Flutter aar 中含有第三方flutter插件 集成到现有安卓项目坑

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

相关文章
相关标签/搜索