现有的混合开发方式,都是存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系列文章。