2020-07-17 Flutter 混编(1)

2020-07-17  本文已影响0人  馒Care

Flutter混编集成方式

基于已经安装Flutter环境(Dart:2.8.4 )

在现有项目集成Flutter
setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir,
        'vv_module_flutter/.android/include_flutter.groovy'
))

到这里混编创建过程的第一步就完成了,接下来描述,如何在原生的项目里面使用我们刚才创建的Flutter项目

在现有项目依赖Flutter项目
  1. 在我们的主工程的build.gradle 添加如下代码:
dependencies {
    implementation project(':flutter')
}
  1. 创建一个TestActivity继承FlutterActivity
class TestLoginActivity : FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    override fun onFlutterSurfaceViewCreated(flutterSurfaceView: FlutterSurfaceView) {
        super.onFlutterSurfaceViewCreated(flutterSurfaceView)
    }
}

最后,大胆Run起来了,这篇文章很简单,其实只是想作为一个案例来描述一个过程。我们根据这个简单混编例子进而来描述几个案例。

1.现在大部分的项目都是基于组件化开发,那么Flutter是否可以跟原生的组件化一样,有相关的管理模式
2.原生组件,需要跳转不同的Flutter页面,需要怎么跳转
3.原生组件与Flutter、Flutter与原生的组件传值
4.这一点是笔记好玩的,我们在编译如上的代码,为啥就默认是运行了Dart里面的main方法呢?先贴一段代码,入口默认是"main",所以,根据这个,我们是否可以自定义入口?

public static class DartEntrypoint {
    @NonNull
    public static DartEntrypoint createDefault() {
      return new DartEntrypoint(FlutterMain.findAppBundlePath(), "main");
    }

    /** The path within the AssetManager where the app will look for assets. */
    @NonNull public final String pathToBundle;

    /** The name of a Dart function to execute. */
    @NonNull public final String dartEntrypointFunctionName;

    public DartEntrypoint(
        @NonNull String pathToBundle, @NonNull String dartEntrypointFunctionName) {
      this.pathToBundle = pathToBundle;
      this.dartEntrypointFunctionName = dartEntrypointFunctionName;
    }

答案应该是ok的》》》》》我们可以修改Android代码如下

 var engine = FlutterEngine(this)
    //自定义入口
    var entrypoint = DartExecutor.DartEntrypoint(FlutterMain.findAppBundlePath(), "noMain")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        engine.dartExecutor.executeDartEntrypoint(entrypoint)
    }

相关的dart入口也可以把void main 改为void noMain

void main() => runApp(MyApp());

嗯~~~~很好~

上一篇 下一篇

猜你喜欢

热点阅读