android原生項目集成flutter模塊


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM