Flutter 和 Android 互相傳遞資料的實現
(一)Android程式碼設定
1,開啟Android Studio 建立一個應用程式,包名dev.android.book 2,建立一個MyApplication,應用在AndroidManifest.xml檔案中的application的android:name屬性上 3,建立FlutterEngine的例項,然後把這個例項新增到快取的FlutterEngine當中 4,建立MethodChannel的例項,指定一個此例項的唯一字串,例如dev.android.book/add 5,設定methodChannel方法回撥函式,接收Flutter通過MethodChannel發過來的訊息 6,Flutter發過來的訊息眾多,是通過 MethodCall物件中的方法名來判斷 7,Android端向Flutter傳送訊息,也是通過methodChannel物件的的invokeMethod方法
針對以上的各個步驟新增說明
1,很簡單就是開啟Android studio =>File=>New Project=>Select a Project Template=>input Name, Package name等=>Finish
2,建立BookApplication 目的是 預初始化FlutterEngine,啟動Flutter有三種方式
a,第一種方式,就是建立預設的FlutterEngine 比如 FlutterActivity.createDefaultIntent(this) b,第二種方式,就是建立新的FlutterEngine 比如 FlutterActivity.withNewEngine().build(this) c,第三種方式,就是使用快取FlutterEngine 比如 FlutterActivity.withCachedEngine(ENGINE_ID).build(this)
簡單解析這三種方式 a和b其實是一樣的,FlutterActivity.createDefaultIntent其實呼叫的還是FlutterActivity.withNewEngine()方法 如下圖所示,
如果在開發中不建議使用a,b方法,是因為在開發過程中,在原聲當中開啟Flutter頁面,會有一段時間的黑屏,這是因為FlutterEngine在初始化,初始化完成之後,就可以顯示Flutter頁面
3,建立FlutterEngine的例項 有兩種方法,直接傳Context,或者傳Context dartVmArgs
4,建立MethodChannel的例項,提供兩種構造方法 messenger和name, message和name 和 MethodCodec
5,設定MethodChannel方法的回撥,接收Flutter傳過來的內容,提供一個引數 MethodCallHandler
6,Flutter傳過來的值各種各樣,是通過介面 MethodCallHandler
MethodCallHandler裡面的抽象方法onMethodCall來區分,onMethodCall方法裡面有兩個引數 MethodCall包含傳過來引數的一些資訊 比如方法名,引數等資訊,
result表示成功或者失敗的一些回撥資訊
7,Android端向Flutter端傳送訊息,是通過註冊的MethodChannel 呼叫invokeMethod方法,有兩個引數,方法的名字,和引數
c,建議使用這種提前初始化FlutterEngine的方法,使用過程中,頁面幾乎沒有停頓開啟Flutter頁面,所以要在Application中提前初始化 初始化程式碼如下
(二)Flutter程式碼設定
1,開啟VSCODE 建立一個應用程式,包名my_flutter 2,建立MethodChannel的例項,指定一個此例項的唯一字串,例如dev.android.book/add 3,設定methodChannel方法回撥函式,接收Flutter通過MethodChannel發過來的訊息 4,Android發過來的訊息眾多,是通過 MethodCall物件中的方法名來判斷 5,Android端向Flutter傳送訊息,也是通過methodChannel物件的的invokeMethod方法
針對以上的各個步驟新增說明
1,建立一個flutter model,最後要作為依賴新增到原聲程式碼當中,通過命令 flutter create -t module --org com.flutter my_flutter,執行完成之後如圖所示
2,在所在的類中直接初始化 MethodChannel ,比如 final _channel = MethodChannel(channel_name); 引數是一個唯一的字串,這個字串必須和Android端中的字串保持一致
3,給MethodChannel設定方法呼叫回撥 ,引數和Android端基本上一致
4,Android端傳送過來的訊息 也是通過 MethodCall來判斷,可以更具方法名來判斷
5,Flutter端向Android端傳送訊息,也是通過註冊的MethodChannel呼叫invokeMethod,傳送訊息
(三)向Android工程中引入剛才建立的FLutter工程
在Android工程中的settings.gradle中新增如下程式碼
然後在依賴當中新增Flutter工程模組
完成以上步驟,就完成了向已有的Android工程中新增flutter模組,以及Android端和Flutter端資料是怎麼傳遞的。
到此這篇關於Flutter 和 Android 互相傳遞資料的實現的文章就介紹到這了,更多相關Flutter Android 互相傳遞資料內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!