美文网首页
Flutter 混合开发 之 手动加载Flutter modul

Flutter 混合开发 之 手动加载Flutter modul

作者: 付小影子 | 来源:发表于2020-04-22 16:46 被阅读0次

官方地址

111.png

创建module

根目录:D:\flutter-boot
Android 项目目录:D:\flutter-boot\flutter_android
1.创建flutter module:在D:\flutter-boot目录下 右键打开终端,输入 flutter create -t module --org com.example flutter_module

  1. 使用命令或者Android studio编译module,生成.android 和.ios
    使用命令编译:
cd flutter_module
 flutter build aar

使用Android studio 打开flutter_module项目,选择build->flutter->build aar


666.png

3.配置结果如下


222.png
4.Android studio 打开flutter_mudule
555.png

配置Android 项目

1.设置setting.gradle

setBinding(new Binding([gradle:this]))
evaluate(new File(
        settingsDir.parentFile,'flutter_module/.android/include_flutter.groovy'
))

2.设置 build.gradle(app)

android {
  
    buildTypes {
     
        profile {
            initWith debug
        }
    }
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

}

repositories {
    maven {
        url 'some/path/my_flutter/build/host/outputs/repo'
        // This is relative to the location of the build.gradle file
        // if using a relative path.
    }
    maven {
        url 'https://storage.googleapis.com/download.flutter.io'
    }
}

dependencies {
   implementation project(':flutter')    
}

3.配置完之后,同步项目 build,项目结构如下


444.png

在Android项目中嵌入flutter界面

官方文档
注意:在Flutter新版本1.12中删除了io.flutter.facade.Flutter,所以不能使用FlutterView和FlutterFragment来加载Flutter界面,新版本中通过FlutterActivity来加载Flutter界面,注意路径包名是:io.flutter.embedding.android.FlutterActivity

1.首先在AndroidManifest文件中添加FlutterActivity

<activity
  android:name="io.flutter.embedding.android.FlutterActivity"
  android:theme="@style/LaunchTheme" //可以是任何主题
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  android:hardwareAccelerated="true"
  android:windowSoftInputMode="adjustResize"
  />
777.png

2.在需要跳转的地方,跳转 FlutterActivity
2.1 不指定跳转路径,默认跳转flutter main页面

myButton.setOnClickListener {
  startActivity(
    FlutterActivity.createDefaultIntent(this)
  )
}

2.2指定跳转路径,在flutter页面需要根据名称,加载需要显示的界面 /my_route 就是指定的名称

myButton.setOnClickListener {
  startActivity(
    FlutterActivity
      .withNewEngine()
      .initialRoute("/my_route")
      .build(this)
  )
}

使用缓存,加载Flutter 界面

官方文档
默认情况下,每个FlutterActivity都创建自己的FlutterEngine。浪费时间,浪费内存
1.在application中进行初始化

class MyApplication : Application() {
    private lateinit var flutterEngine: FlutterEngine

    companion object {
        const val FLUTTER_ACTIVITY_ENGINE_ID = "my_engine_id"
    }

    override fun onCreate() {
        super.onCreate()

        // Instantiate a FlutterEngine.
        flutterEngine = FlutterEngine(this)

        // Start executing Dart code to pre-warm the FlutterEngine.
        flutterEngine.dartExecutor.executeDartEntrypoint(
            DartExecutor.DartEntrypoint.createDefault()
        )

        // Cache the FlutterEngine to be used by FlutterActivity.
        FlutterEngineCache
            .getInstance()
            .put(FLUTTER_ACTIVITY_ENGINE_ID, flutterEngine)
    }
}

2.利用缓存的FlutterEngine 加载FlutterActivity
使用缓存的时候 要保证cachedEngineId 一致

 toFlutterBtn.setOnClickListener {
            /* startActivity(
                 FlutterActivity.createDefaultIntent(this)
             )*/
            //使用缓存的情况
            startActivity(
                FlutterActivity
                    .withCachedEngine(MyApplication.FLUTTER_ACTIVITY_ENGINE_ID)
                    .build(this)
            )
        }

相关文章

网友评论

      本文标题:Flutter 混合开发 之 手动加载Flutter modul

      本文链接:https://www.haomeiwen.com/subject/uvniihtx.html