有什么办法可以在 flutter 中实现双缓冲?

is there any way to implement double buffering in flutter?

我已经在 flutter 中用 tcp 套接字实现了一个图像流播放器。

flutter socket获取图片数据的c++服务器发送图片
图片大小约200KB ~ 1MB.

在 Flutter 中,我试图保持每秒 4 帧。
C++(服务器)和 Dart(客户端)中的套接字都可以处理该数量的数据。
但是,当我通过 Image.memory(data) 小部件显示这些数据时,它会闪烁。
(闪烁的原因,首先我认为是在Image widget正在渲染第n个数据时进入第n + 1个数据。其次,图像的大小太大以至于应用程序无法渲染没有空白的图像。)
所以我想实现双缓冲。

现在,我的 Flutter 应用程序获取数据并将其交替发送到多个流。
然后 Stack 小部件中的多个流构建器获取这些数据并通过 Image.memory() 小部件显示。
闪烁已大大减少,但仍然闪烁。

甚至,也不是真正的双缓冲方式
如果不重新渲染,则无法更改堆栈中小部件的顺序。

有什么方法或者插件吗?

谢谢。

更新
有一种方法可以让它不闪烁。无缝播放选项。

_image = Image.memory(data, gaplessPlayback: true)

Flutter 不提供对设备上实际图形库(可能是 OpenGL ES)的访问,因此没有真正的双缓冲。

视频播放的小部件是video_player you can add it via packages

如果您无法将数据转化为与该包兼容的格式,您可以随时使用 canvas and the drawImage method. All of this probably through a custom painter.

自己绘制数据

以上两种方法应该都能轻松支持您要求的 4 fps。