flutter 与 android 混合开发

2019/04/10 10:10
阅读数 43

现有的混合开发方式,都是存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 公共号:

原文出处:https://www.cnblogs.com/deman/p/12255906.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部