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() } }