一尘不染

在屏幕外构建小部件

flutter

我需要构建一个小部件只是为了获取其位图。我不在乎屏幕上有小部件。

所以我的问题是:我可以以某种方式在不使用屏幕视图层次结构的情况下“在侧面”构建窗口小部件吗?

我没有找到方法。因此,如果不可能,我可以在屏幕上构建小部件,但实际上不显示它。我已经尝试过了,Visibility但这将使RenderObjectnull。有了Offstage它打电话时会失败toImage()的断言:Failed assertion: line 2752 pos 12: ‘!debugNeedsPaint’: is not true.


阅读 307

收藏
2020-08-13

共1个答案

一尘不染

编辑:看起来这在Flutter的最新版本中中断了。不知道为什么,但是我想Flutter现在会在确定完全不可见叠加层时避免绘制。该方法仍然可以使用,但是需要与翻译结合才能将其移出屏幕:https
:
//gist.github.com/itsJoKr/ce5ec57bd6dedf74d1737c1f39481913

有人建议使用OverlayEntry,它看起来是最好的解决方案。

您可以将其OverlayEntry放置在当前屏幕下方,以使该屏幕不可见并随maintainState: true其构建。一个很大的优点是,由于它不与当前的窗口小部件树混合使用,因此易于实现。

OverlayState overlayState = Overlay.of(context);
OverlayEntry entry = OverlayEntry(builder: (context) {
  return RepaintBoundary(key: key, child: yourWidget,); // Using RepaintBoundary to get RenderObject and convert to image
}, maintainState: true);
overlayState.insert(entry);
// doesn't work anymore
// overlayState.rearrange([entry], above: entry); // Didn't find how to insert it at the bottom of current overlays, so this should rearrange it so that our entry is at the bottom
2020-08-13