项目模式:Android 项目+ flutter module
flutter通过插件访问不到host中的类。
E:\dev\FlutterProjects\flutter_hybid_demo\flutter_module\.android\Flutter\src\main\java\io\flutter\plugins\GeneratedPluginRegistrant.java:16: 错误: 无法访问SceneRestorable
flutterEngine.getPlugins().add(new com.example.moblink_plugin.MoblinkPlugin());
^
找不到com.mob.moblink.SceneRestorable的类文件
有些flutter插件很奇葩,只能在Flutter项目中使用。
public final class GeneratedPluginRegistrant {
public static void registerWith(PluginRegistry registry) {
if (alreadyRegisteredWith(registry)) {
return;
}
MoblinkPlugin.registerWith(registry.registrarFor("com.example.moblink.MoblinkPlugin"));
}
private static boolean alreadyRegisteredWith(PluginRegistry registry) {
final String key = GeneratedPluginRegistrant.class.getCanonicalName();
if (registry.hasPlugin(key)) {
return true;
}
registry.registrarFor(key);
return false;
}
}
android项目运行执行的不是main.dart,而是app。
android项目中,flutter模块没有依赖android host。
编译时会去对GeneratedPluginRegistrant代码校验,当Plugin类中持有Android host中的类时,造成找不到类的错误。
解决办法:
不使用flutter插件进行flutter通信。
直接使用MethodChannel进行通信,把moblink中的源码直接拷贝出来使用。
以MobLink举例,flutter模块不要导入
moblink: 3.4.1
直接把moblink插件中的flutter相关代码拷贝到flutter模块使用。
moblink.dart'
moblink_interface.dart
moblink_defines.dart
demo地址
https://github.com/zombiu/flutter_hybid_demo/tree/master
网友评论