繁体   English   中英

Flutter 将数据保存为项目文件夹中的文件

[英]Flutter save data as file in project folder

嗨,我对 Flutter 很陌生。 在运行应用程序时,我截取了一个小部件的屏幕截图,然后我想查看它。 因此,我需要将此屏幕截图保存在某处。 在我的本地 PC 上,例如在项目的资产中或在模拟器上。 我尝试以下将图像保存在资产文件夹中,但没有运气:

final RenderRepaintBoundary boundary = buttonKey.currentContext.findRenderObject();
var rendering = await boundary.toImage();

var byteData = await rendering.toByteData(format: ImageByteFormat.png);
var pngBytes = byteData.buffer.asUint8List();

File('./test_img.png').writeAsBytesSync(pngBytes);

不幸的是,这会导致以下错误消息: [VERBOSE-2:ui_dart_state.cc(177)] Unhandled Exception: FileSystemException: Cannot open file, path = './test_img.png' (OS Error: Read-only file system, errno = 30)

我不确定是否正确理解了您的问题,但我理解的方式是您希望在您的项目/应用程序中拥有一些图片,这些图片存储在设备中而不是互联网中。

如果这就是你的意思,那么答案很简单,首先你必须创建一个名为“assets”的新文件夹(在项目级别),然后在其中创建一个名为“images”的新文件夹,然后你必须 go 到pubspec.yamal 文件并启用资产:如下所示

  assets:
    - assets/images/

另外你必须确保你有正确的缩进 2 个空格,否则它不会工作。

在下面启用它之后,您必须再次添加到图像文件夹的路径,如上所示,确保您有正确的缩进,否则它将无法工作。

您调用这些图像并使用它们的方式非常简单,如下所示:

Center(
 child: Image.asset('assets/images/test_img.png',),
),

您似乎想要生成屏幕截图并将它们保存在本地计算机上的某个位置,例如在您的项目目录中的文件夹中。 你可以使用 Flutter 的集成测试框架来做到这一点。 以下是一些有用的参考资料:

https://medium.com/flutter-community/testing-flutter-ui-with-flutter-driver-c1583681e337

https://blog.codemagic.io/flutter-automated-screenshot-testing/

https://dev.to/mjablecnik/take-screenshot-during-flutter-integration-tests-435k

https://medium.com/@nocnoc/automated-screenshots-for-flutter-f78be70cd5fd

您还可以通过终端命令flutter screenshot直接截取更完整的显示屏幕截图,该命令捕获整个显示,而不仅仅是您的应用程序的 UI。 您可以在集成测试驱动程序的上下文中通过 Dart 代码执行此操作:

import 'dart:io';

await Process.run('flutter', ['screenshot', '-o', 'image.jpg']);

更多关于这样做的利弊的讨论在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM