現有的混合開發方式,都是存flutter項目在android系統或者iOS上面跑。
但是,實際情況是,我們需要在一個成熟的native項目上面,跑幾個flutter頁面,逐步的進行flutter的融合,並且看情況來進行是否取代native的頁面。
以下都是基於flutter version:Flutter 1.12.13+hotfix.5 • channel unknown • unknown source
建議使用最新版本。
1.android項目上集成flutter頁面
之前很多都是手動的方式,由於flutter版本迭代迅速,很難一把就搞定。
現在官方出了自動的方案,一把到位。
參考google官方鏈接,通過androidstudio的方式,自動集成。
https://flutter.dev/docs/development/add-to-app/android/add-flutter-screen?tab=custom-activity-launch-kotlin-tab
2.實際踩得坑
2.1 FlutterActivity
這個頁面在那里,那里也找不到,在flutter的庫里面,還有2個???,這是什么case?
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
先不要管那么多,按照文檔把這段code放在app的manifest里面,run,居然可以跑起來,這個頁面在那里,在flutter庫里面。
這個是新的版本的位置,以前也有一個 ,包名不一樣。
2.2 android和flutter的交互
這個時候,不需要打開2個studio的工程,android app可以跑起來,flutter項目支持熱加載,簡直爽爆了,but,我要交互怎么辦?MethodChannel 怎么定義,現在這個頁面,在庫里面,怎么改?
改不了,在庫里當然改不了。
class XXXActivity:FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
//xxx
}
}
如上,可以自己定義一個Activity繼承自FlutterActivity,這個時候,如上,就能拿到flutterengine,然后就可以開始進行交互了。
但是,這個時候,fluuter功能默認跑的還是FluterActivity,所以這個時候的修改,只能從新run整個android項目。當然純UI的修改,還是可以單獨運行flutter看到效果。
3.https://pub.dev/
這算是官方的三方庫大全
之前參考同事的flutter項目,發現不能編譯,but,這哥們前2天才剛剛編譯過,demo跑的飛起,什么情況?
后來發現,我的flutter版本升級了,也就是pub上面的庫,一定要看清楚兼容的flutter版本。flutter更新太快了,每個庫都要單獨支持。
這是我遇到的坑,后續還會推出其他flutter系列文章。
更多內容:demanmath
公共號:

