implementation project(path: ‘:flutter’)
2.2 自定义AndroidView
说明:
-
在app项目的java/包名目录下创建嵌入Flutter中的AndroidView
-
此View继承PlatformView,实现getView和dispose两个方法
-
getView :返回要嵌入 Flutter 层次结构的Android View
-
dispose:释放此View时调用,此方法调用后 View 不可用,此方法需要清除所有对象引用,否则会造成内存泄漏。
class MyFlutterView(context: Context) : PlatformView {
override fun getView(): View {
TODO(“Not yet implemented”)
}
override fun dispose() {
TODO(“Not yet implemented”)
}
}
2.3 设置返回的View为TextView
class MyFlutterView(context: Context, messenger: BinaryMessenger, viewId: Int, args: Map<String, Any>?) : PlatformView {
val textView: TextView = TextView(context)
init {
textView.text = “我是Android View”
}
override fun getView(): View {
return textView
}
override fun dispose() {
TODO(“Not yet implemented”)
}
}
说明:
-
messenger:用于消息传递,后面介绍 Flutter 与 原生通信时用到此参数
-
viewId:View 生成时会分配一个唯一 ID
-
args:Flutter 传递的初始化参数
2.4 注册PlatformView
创建PlatformViewFactory
class MyFlutterViewFactory(val messenger: BinaryMessenger) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
override fun create(context: Context, viewId: Int, args: Any?): PlatformView {
val flutterView = MyFlutterView(context, messenger, viewId, args as Map<String, Any>?)
return flutterView
}
}
创建MyPlugin
class MyPlugin : FlutterPlugin {
override fun onAttachedToEngine(binding: Flutter