代码描述
flutter项目中,在原生模块中使用了flutterView,并新建 flutterEngine 与 flutterView 发生绑定关系。在 flutterView 中我们使用了三方库 video-player 。
报错描述:
- 当使用新建的 flutterEngine 与 flutterView 发生绑定时,在视图层使用
video-player插件会报错:Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel., null, null) - 使用默认的 flutterEngine 与 flutterView 发生绑定时,不会报错。
问题分析
- plugin 使用 channel进行交互,channel 与 engine存在对应关系,engine负责绘制dart层ui,并桥接channel。
- video-player 作为插件引入,默认 channel 与主工程的 engine 进行关联。此时当我们使用 new engine 进行 videoPlayer 的ui层绘制时,videoPlayer 使用 channel 对原生进行数据交互,此时 channel 发送给了 new engine 的通道,但 new engine 并没有与 video-player 插件发生绑定,所以会报错
Unable connection on channel
在
GeneratedPluginRegistrant这个类中, flutterEngine与plugin发生绑定注册关系。所以才能通过channel调用相应plugin提供的方法。
处理方式
将我们的new engine与video-player插件进行关联:
newEngine.plugins.add(VideoPlayerPlugin()) //VideoPlayerPlugin由video-player