android原生項目內建flutter子產品
- 建立flutter子產品
使用android studio,File->New->New Flutter Project...->Flutter Module->Next->Next->Finish,即可完成,期間可以修改包名、項目名稱等。
- 配置settings.gradle
setBinding(new Binding(gradle: this))
evaluate(new File(settingsDir.parent, "fluttermodule/.android/include_flutter.groovy")) //fluttermodule是flutter子產品項目名稱
- 配置build.gradle
//flutter是預設子產品名稱,具體看build/outputs/aar下的aar包名稱,可以通過settings.gradle裡的include(':test')和 project(':test').projectDir = new File('項目路徑')修改名稱為test并指定項目路徑
api project(path: ':flutter')
- 代碼
//BaseActivity必須繼承AppCompatActivity,才有ActivityLifeCycle。
class FlutterTestActivity : BaseActivity() {
override fun setLayout() = R.layout.m_activity_flutter_test
private val flutterEngineId = "flutterEngineId"
private var engine: FlutterEngine? = null
override fun initView(view: View) {
setToolbarTitle("flutter測試頁面")
engine = FlutterEngineCache.getInstance().get(flutterEngineId)
if (engine == null) {
engine = FlutterEngine(this)
engine?.dartExecutor?.executeDartEntrypoint(DartExecutor.DartEntrypoint.createDefault())
FlutterEngineCache.getInstance().put(flutterEngineId, engine)
}
val view = createFlutterView()
view.attachToFlutterEngine(engine!!)
}
private fun createFlutterView(): FlutterView {
val flutterView = FlutterView(this) //預設加載flutter側的main.dart檔案
val params = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
binding.flContain.addView(flutterView, params)
return flutterView
}
override fun initEvent() {
}
override fun createPresenter() = FlutterTestPresenter()
override fun onResume() {
super.onResume()
engine?.lifecycleChannel?.appIsResumed()
}
override fun onPause() {
super.onPause()
engine?.lifecycleChannel?.appIsInactive()
}
override fun onStop() {
super.onStop()
engine?.lifecycleChannel?.appIsPaused()
}
}