flutter aar中我用到了package_info、shared_preferences等须要和原生交互的插件,打包aar以后集成到安卓项目中发现这些插件无法工做,报错了;java
错误信息大体意思是没有注册method channel之类的;markdown
找了一大圈,终于找到怎么解决了,可能大多数在安卓中集成flutter以后是使用flutter开发的新页面也就是 FlutterActivity,这样的话不会有任何问题,由于在新版本中的FlutterActivity已经自动帮忙初始化第三方flutter插件了,可是flutterFragment里面并无,须要本身去处理;this
个人项目中只是viewpager中有3个fragment,其中第三个是flutterFragment,而后承载这些fragment的activity继承我本身的baseActivity,没办法改成FlutterActivity。spa
个人解决办法是,在本身写的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?code