如何在Flutter中截取特定Widget的屏幕截图?

6
我有一个带有图片和一些信息的小部件,我希望用户能够将其保存并分享为一张图片。请问有没有办法在不要求用户截屏的情况下实现这个功能?

这取决于您如何将图像放入Widget中。如果它来自资产或您可以下载它,您可以使用此解决方案https://dev59.com/g1cP5IYBdhLWcg3wkK3U 如果您使用CustomPaint自己绘制了图像,则似乎没有提取所需位图的方法。 - Richard Heap
1
提示:您可以使用Canvas并在其中添加任何您希望在屏幕截图中看到的内容。最终,Canvas只是一张图片,然后将该图片保存在文件存储中。 - Arnold Parge
1个回答

5
我认为这可能是您正在寻找的内容:https://docs.flutter.io/flutter/rendering/RenderRepaintBoundary/toImage.html 基本上,您需要将小部件包装在一个 RepaintBoundary 中。为 RepaintBoundary 提供一个关键字,我们可以称之为 boundaryKey。 然后你可以做如下操作:
RenderRepaintBoundary boundary = boundaryKey.currentContext.findRenderObject();

然后执行 ui.Image image = await boundary.toImage(); 来创建一张图片,你可以用它来创建png或者其他任何你想要的格式。


很棒的解决方案!我在想是否有可能只捕获部件的一部分?因为我只需要部件的一部分。 - colin
也许您可以定义一个占据您感兴趣的区域的不可见子控件,并将重绘边界包装在其周围? - EduardKieser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接