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

528 阅读1分钟

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?