zoukankan      html  css  js  c++  java
  • 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()
          }
      
      }
      
  • 相关阅读:
    TransactionScop事务机制的使用
    MVC无刷新上传图片并显示
    WebClient和WebRequest获取html代码
    Web.config配置详解
    分类和扩展有什么区别?可以分别用来做什么?分类有哪些局限性?分类的结构体里面有哪些成员?
    有序二维数组的查找
    生成Excel.xlsx文件 iOS
    charles Https抓包
    https 通信流程和Charles 抓包原理
    fastlane自动化打包ipa并发布到firim或者蒲公英
  • 原文地址:https://www.cnblogs.com/yongfengnice/p/13950175.html
Copyright © 2011-2022 走看看