开始之前,我们需要了解一下 flutter 的四种项目结构
-
application:纯 flutter 应用
-
plugin:基于原生的 flutter 插件
-
package:纯 dart 插件
-
module:原生上集成 flutter 模块
一、将 flutter 集成到 Android 项目
在原生应用的目录下运行命令:
会在目录下面生成如下文件: 我们需要将生成 flutter module 集成进我们的 native 应用,集成方法有两种:
-
aar 依赖
-
源码依赖
1、flutter module 集成
1、aar 依赖
在 flutter_lib 目录下,我们运行命令:
很贴心的是,flutter 会在命令行中告诉我们如何在原生应用中去集成 aar
优点:
- 依赖一个包含 Flutter 产物的 aar 包,这个的好处就是其他不开发 flutter 的同学可以不用配置 flutter 环境,它和其他模块包无异
2、源码依赖
打开原生项目的 setting.gradle 文件:
include ‘:app’
rootProject.name = “NativeToFlutter”
// 加入如下代码
setBinding(new Binding([gradle: this]))
evaluate(new File(
‘flutter_lib/.android/include_flutter.groovy’
))
include ‘:flutter_lib’
在 app 项目的 build.gradle 依赖 flutter module 模块
dependencies {
implementation project(’:flutter’)
}
缺点:
- 需要 flutter 环境,并且各个开发人员环境不一致,导致集成因为版本不一致报各种错误
2、原生接入 flutter 页面
flutter 依赖提供了 FlutterActivity 来直接加载 flutter 页面,我们只需要在清单文件中配置该 Activity :
<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”
/>
在需要打开 flutt
er 页面的地方 startActivity 即可:
val intent = FlutterActivity
.withNewEngine()
// 背景颜色,透明 or 不透明
.backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
// 指定跳转的路由 home 页面
.initialRoute(“home”)
.build(this)
startActivity(intent)
3、原生指定跳转 Flutter 页面
Flutter 提供 initialRoute 来供原生层跳到 flutter 对应的指定路由页面,官方解释,该路由是有限制的:
所以,我们必须使用 withNewEngine 创建新的引擎来打开一个页面:
val intent = FlutterActivity
.withNewEngine()
// 指定跳转到 home 路由页面
.initialRoute(“home”)
.build(this)
startActivity(intent)
确选择入口的。
所以,我们必须使用 withNewEngine 创建新的引擎来打开一个页面:
val intent = FlutterActivity
.withNewEngine()
// 指定跳转到 home 路由页面
.initialRoute(“home”)
.build(this)
startActivity(intent)