【发布时间】:2021-01-15 19:16:34
【问题描述】:
为了在谷歌地图google_maps_flutter 上显示自定义小部件,我使用了一个非常方便的函数,它将任何Widget(包括那些包含图像的)转换为Image,然后我将其转换为我需要的Uint8List。它在 iOS 和 Android 上运行良好。
Future createImageFromWidget( Widget widget){
final RenderRepaintBoundary repaintBoundary = RenderRepaintBoundary();
final RenderView renderView = RenderView(
child: RenderPositionedBox(alignment: Alignment.center, child: repaintBoundary),
configuration: ViewConfiguration(size: const Size.square(300.0), devicePixelRatio: ui.window.devicePixelRatio),
window: null,
);
final PipelineOwner pipelineOwner = PipelineOwner()..rootNode = renderView;
renderView.prepareInitialFrame();
final BuildOwner buildOwner = BuildOwner(focusManager: FocusManager());
final RenderObjectToWidgetElement<RenderBox> rootElement = RenderObjectToWidgetAdapter<RenderBox>(
container: repaintBoundary,
child: Directionality(
textDirection: TextDirection.ltr,
child: IntrinsicHeight(child: IntrinsicWidth(child: widget)),
),
).attachToRenderTree(buildOwner);
buildOwner..buildScope(rootElement)..finalizeTree();
pipelineOwner..flushLayout()..flushCompositingBits()..flushPaint();
return repaintBoundary.toImage(pixelRatio: ui.window.devicePixelRatio)
.then((image) => image.toByteData(format: ui.ImageByteFormat.png))
.then((byteData) => byteData.buffer.asUint8List());
}
但不幸的是,当我尝试在 Web 上使用此功能时,我收到以下错误:
不支持的操作:网络上不支持toImage
现在 Flutter 支持 Image.toByteData 和 Picture.toImage #20750,但我不知道如何在我的情况下使用它。
实际上的问题是 - 如何重新制作这个函数,以便它也可以在 Web 上运行?
谢谢你,我会很高兴有任何想法
【问题讨论】:
-
PR 显示已合并到 Flutter 主频道。你能换个频道再测试一下吗?
-
@AbhilashChandran 无论如何我都在使用主分支。不幸的是,这个 PR 并不意味着
repaintBoundary.toImage的实现。因此,我正在寻找一种无需repaintBoundary.toImage的解决方案。
标签: google-maps flutter google-maps-markers flutter-web flutter-image