flutter 与 android 混合开发
<p>现有的混合开发方式,都是存flutter项目在android系统或者iOS上面跑。<br>但是,实际情况是,我们需要在一个成熟的native项目上面,跑几个flutter页面,逐步的进行flutter的融合,并且看情况来进行是否取代native的页面。<br>
以下都是基于flutter version:Flutter 1.12.13+hotfix.5 • channel unknown • unknown source<br>
建议使用最新版本。</p>
<h1 id="1android项目上集成flutter页面">1.android项目上集成flutter页面</h1>
<p>之前很多都是手动的方式,由于flutter版本迭代迅速,很难一把就搞定。<br>
现在官方出了自动的方案,一把到位。<br>
参考google官方链接,通过androidstudio的方式,自动集成。<br>
https://flutter.dev/docs/development/add-to-app/android/add-flutter-screen?tab=custom-activity-launch-kotlin-tab</p>
<h1 id="2实际踩得坑">2.实际踩得坑</h1>
<h2 id="21-flutteractivity">2.1 FlutterActivity</h2>
<p>这个页面在那里,那里也找不到,在flutter的库里面,还有2个???,这是什么case?</p>
<pre><code class="language-xml"><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></pre>
<p>先不要管那么多,按照文档把这段code放在app的manifest里面,run,居然可以跑起来,这个页面在那里,在flutter库里面。<br>
这个是新的版本的位置,以前也有一个 ,包名不一样。</p>
<h2 id="22-android和flutter的交互">2.2 android和flutter的交互</h2>
<p>这个时候,不需要打开2个studio的工程,android app可以跑起来,flutter项目支持热加载,简直爽爆了,but,我要交互怎么办?MethodChannel 怎么定义,现在这个页面,在库里面,怎么改?<br>
改不了,在库里当然改不了。</p>
<pre><code class="language-kotlin">class XXXActivity:FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
//xxx
}
}
</code></pre>
<p>如上,可以自己定义一个Activity继承自FlutterActivity,这个时候,如上,就能拿到flutterengine,然后就可以开始进行交互了。<br>
但是,这个时候,fluuter功能默认跑的还是FluterActivity,所以这个时候的修改,只能从新run整个android项目。当然纯UI的修改,还是可以单独运行flutter看到效果。</p>
<h1 id="3httpspubdev">3.https://pub.dev/</h1>
<p>这算是官方的三方库大全<br>
之前参考同事的flutter项目,发现不能编译,but,这哥们前2天才刚刚编译过,demo跑的飞起,什么情况?<br>
后来发现,我的flutter版本升级了,也就是pub上面的库,一定要看清楚兼容的flutter版本。flutter更新太快了,每个库都要单独支持。</p>
<p>这是我遇到的坑,后续还会推出其他flutter系列文章。</p>
<p>更多内容:demanmath<br>
公共号:<br>
<img src="http://www.demanmath.com/wp-content/uploads/2020/02/gzh.jpg" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/deman/p/12255906.html
頁:
[1]