Flutter Virtual displays

虚拟显示将 android.view.View 实例渲染到一个纹理上,因此它不会嵌入到 Android Activity 的视图层级中。某些平台交互,如键盘处理和辅助功能可能无法工作。

使用 VirtualDisplay 机制,将原生视图渲染为纹理。在 Flutter 界面上开辟一个同样大小的只为,使用 Flutter Texture 渲染。这种不会附加到视图层次结构中。

Flutter 将原生空间绘制到 VirtualDisplay 中,然后通过 textureid 提取出绘制的纹理,渲染到一个内存 Surface 上。

缺点:

原理图:

平台视图VirtualDisplay模式绘制原理.png

兼容性问题

触摸事件

链路长问题:

触摸事件被发送给 FlutterView,FlutterView 先传给 Dart 侧,Dart 再转发给原生侧,如果原生不处理,需要再转回 Dart 侧。这个链路很长,过程中容易发生意外丢失和不响应。

信息丢失问题

Android MotionEvent 转为 Flutter 事件过程中,可能会存在信息的丢失

输入法

原生视图因为在 VirtualDisplay 里,无法获取焦点。FlutterView 中重写了输入法相关逻辑,代理了原生视图的输入法触发逻辑。

这里面的问题,在与需要兼容不同 Android 系统版本的输入法逻辑。

网络资源


本文作者:Maeiee

本文链接:Flutter Virtual displays

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!