Flutter 1.12版本后调用原生view的改动

310 阅读1分钟

1.12 之前

  • 通过PluginRegistry去注册
public static void registerWith(PluginRegistry registry) {
		//防止多次注册
		final String key = TestFluttertoAndroidTextViewPlugin.class.getCanonicalName();
		if (registry.hasPlugin(key)) return;
		//初始化 PluginRegistry
		PluginRegistry.Registrar registrar = registry.registrarFor(key);
		//设置标识
		registrar.platformViewRegistry().registerViewFactory("com.flutter_to_native_test_textview", new TestViewFactory(registrar.messenger()));
	}
  • 然后在MainActivity的onCteate方法里调用注册方法
TestFluttertoAndroidTextViewPlugin.registerWith(this)

1.12版本及后续

  • 通过ShimPluginRegistry去注册
class UnityViewRegistrant {
    fun registerWith(flutterEngine: FlutterEngine) {
        val key = UnityViewRegistrant::class.java!!.canonicalName
        val shimPluginRegistry = ShimPluginRegistry(flutterEngine)
        if (shimPluginRegistry.hasPlugin(key)) return
        val registrar = shimPluginRegistry.registrarFor(key)
        registrar.platformViewRegistry().registerViewFactory("unityView", UnityViewFactory(StandardMessageCodec()))
    }
}
  • 在MainActivity的configureFlutterEngine调用注册方法
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine)
        UnityViewRegistrant().registerWith(flutterEngine)
    }