flutter aar中我用到了package_info、shared_preferences等需要和原生交互的插件,打包aar之后集成到安卓项目中发现这些插件没法工作,报错了;
错误信息大致意思是没有注册method channel之类的;
找了一大圈,终于找到怎么解决了,可能大多数在安卓中集成flutter之后是使用flutter开发的新页面也就是 FlutterActivity,这样的话不会有任何问题,因为在新版本中的FlutterActivity已经自动帮忙初始化第三方flutter插件了,但是flutterFragment里面并没有,需要自己去处理;
我的项目中只是viewpager中有3个fragment,其中第三个是flutterFragment,然后承载这些fragment的activity继承我自己的baseActivity,没办法改为FlutterActivity。
我的解决办法是,在自己写的Application里面做第三方flutter插件的初始化,初始化插件需要传入flutterEngine实例,
因为我做了预加载 flutterEngine,所以直接传进去就行了:
flutterEngine = new FlutterEngine(this);
// Configure an initial route.
flutterEngine.getNavigationChannel().setInitialRoute("your/route/here");
// Start executing Dart code to pre-warm the FlutterEngine.
flutterEngine.getDartExecutor().executeDartEntrypoint(
DartEntrypoint.createDefault()
);
// 创建预加载的flutterEngine之后,在这里为证flutterEngine初始化用到的第三方flutter插件。
GeneratedPluginRegistrant.registerWith(flutterEngine);
// Cache the FlutterEngine to be used by FlutterActivity or FlutterFragment.
FlutterEngineCache
.getInstance()
.put("my_engine_id", flutterEngine);
预加载flutterEngine好处是 flutter的页面加载会快很多。
这些东西官方文档不会告诉你的,flutter的issues中也都是告诉你用最新版本的flutter插件,毛用都没有,
我也搞不懂官方文档为啥不多写点,难道他们只用flutterActivity,不会单独使用flutterFragment?