从 Widget 或 Canvas 创建原始图像

Creating raw image from Widget or Canvas

我的最终目标是能够通过传递原始图像数据或将图像保存到磁盘以供本机 android/ios 服务共享来共享动态图像。我如何将 flutter 中的 WidgetCanvas 转换为原始图像数据(如 byte[])?

目前在 FlutterView 中的 Dart 代码 运行 目前无法做到这一点,但是我们在文件跟踪实现方面存在错误:https://github.com/flutter/flutter/issues/6774

可以将 Flutter 小部件渲染为 FlutterView 的一部分,然后使用 Java 或 Objective-C 接口到 FlutterView 上以捕获图片,例如标准 android.View.getBitmap FlutterView 实现了: https://docs.flutter.io/javadoc/io/flutter/view/FlutterView.html#getBitmap--

如果这对您的应用程序需求很重要,并且希望能够从 Dart 代码中捕获 Widget 树的位图,我们很乐意听到它。欢迎就上述问题提供更多背景信息!

现在有对此的支持。您可以使用 RenderRepaintBoundryOffsetLayerScene。他们都有一个toImage。这里是 link 到 RenderRepaintBoundry.toImage()

  Future<void> _capturePng() async {
    RenderRepaintBoundary boundary = globalKey.currentContext.findRenderObject();
    ui.Image image = await boundary.toImage();
    ByteData byteData = await image.toByteData(format: ui.ImageByteFormat.png);
    Uint8List pngBytes = byteData.buffer.asUint8List();
    print(pngBytes);
  }

这是从文档中复制的。

您可以使用 Screenshot package 得到您想要的 widgetimage

https://pub.dev/packages/screenshot