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()
        }
    
    }
    
posted @   yongfengnice  阅读(1251)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2017-11-09 将7z分卷合并成一个7z文件,然后就可以使用7z或rar软件等打开
点击右上角即可分享
微信分享提示