要在Google地图上显示自定义小部件,我使用了一个非常方便的功能,将任何Widget(包括包含图片的Widget)转换为Image,然后将其转换为所需的Uint8List。在iOS和Android上表现良好。参考链接:google_maps_flutter。
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上使用此函数时,出现了以下错误:
不支持的操作:在Web上不支持toImage
现在Flutter已经支持Image.toByteData
和Picture.toImage
#20750,但我无法想象这如何在我的情况下使用。
实际上问题是-如何改造此函数以使其在Web上也能工作?
谢谢,我很高兴听取任何想法
repaintBoundary.toImage
。因此,我正在寻找一种不需要repaintBoundary.toImage
的解决方案。 - Alex