Flutter混编之iOS原生传值给Flutter

824 阅读1分钟

需求是将我们已上线的Flutter App嵌入到其他公司的iOS 原生项目中。

主要流程:

  1. 将Flutter端业务以及插件打包成framework类型
  2. 原生iOS端按照文档初始化Flutter引擎以及打开Flutter页面
  3. 原生端传值以及Flutter端取值

其中关于传值,查看文档以及网上检索,一般是通过MessageChannel进行传值,比较方便的方式则是通过初始化引擎的时候指定 initialRoute,这样确实可以传递过来,但是也会影响Flutter端的路由逻辑,进而影响业务(比如我们的是需要先拿到原生端传来的值,再进行页面的跳转以及业务处理)。

其中 官方文档 也有写明:这段代码使用 "/onboarding" 取代 "/",作为你的 dart:ui 的 window.defaultRouteName

后来发现初始化引擎的时候有个API:

- (BOOL)runWithEntrypoint:(nullable NSString*)entrypoint

               libraryURI:(nullable NSString*)libraryURI

             initialRoute:(nullable NSString*)initialRoute

           entrypointArgs:(nullable NSArray<NSString*>*)entrypointArgs;

其中 entrypointArgs 参数则代表Flutter端的main函数可选参数,于是将默认的初始化引擎方式改为:

[self.flutterEngine runWithEntrypoint:nil libraryURI:nil initialRoute:nil entrypointArgs:@[@"123456"]];

在Flutter端接收:

void main(args) async {
  print('从原生过来的值:$args');
}

测试一切正常,在此记录一下,后续补充一点混编方面的其他资料。