美文网首页
2020-07-17 Flutter 混编(1)

2020-07-17 Flutter 混编(1)

作者: 馒Care | 来源:发表于2020-07-17 15:19 被阅读0次

Flutter混编集成方式

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

在现有项目集成Flutter
  • 打开Android Studio,打开已有项目
  • 查看Plugins列表Android APK Support 是否勾选,很多人没有勾选,导致无法创建Flutter Module


    image.png
  • 选择Flie->New->New Module 然后跳转到选择框,选择Flutter Module


    image.png
  • 等待创建完毕后,在settings.gradle 会显示依赖情况
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());

嗯~~~~很好~

相关文章

网友评论

      本文标题:2020-07-17 Flutter 混编(1)

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