我使用图像插件(image: ^2.0.4),这样我就可以在图像上写入一些内容,然后将新图像保存到设备或通过邮件发送.我try 用"new File"加载图像,但在抖动时出错.我询问和搜索,得到一个提示,我可以使用rootBundle来加载fltter中的图像.我做了,我得到了下面的错误.

[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)]未处理的异常: 无法加载assets资源 :packages/myAppName/assets/images/ReceiptRaw_1.jpg

当我创建一个简单的dart控制台应用程序时,该插件可以工作,但无法使用Flatter加载.请帮忙,

This is the Flutter Code:

    Future<bool> makeReceiptImage() async {

// UPDATE ****************************************

      // load the receipt jpeg
  var imageData = await rootBundle.load('packages/myAppName/dekonts/ReceiptRaw_1.jpg');
  print("imageData: $imageData"); // Prints as imageData: Instance of 
'_ByteDataView'

// UPDATE ****************************************

  Image _receiptImage = await decodeImage(new File(imageData).readAsBytesSync());

      drawString(_receiptImage, arial_48, 440, 30, “Customer Name”, color: 0xFF000000); 

      // Write it to disk as a different jpeg 
      var new_jpeg = await encodeJpg(_receiptImage); 
      String newImagePath = await rootBundle.loadString('packages/myAppName/assets/images/ReceiptRaw_2.jpg'); 
      await new File(‘$newImagePath’).writeAsBytesSync(new_jpeg); 
    }

This is the Dart Console Code:

import 'dart:io';
import 'dart:convert';
import 'dart:async';
import 'package:image/image.dart';

void main() async {
  // load the receipt jpeg
  String mImagePath = 'images/ReceiptRaw_1.jpg';
  Image _receiptImage = decodeImage(new File(mImagePath).readAsBytesSync());
  drawString(_receiptImage, arial_48, 440, 30, “Customer Name”, color: 0xFF000000);

  // Write it to disk as a different jpeg
  var new_jpeg = encodeJpg(_receiptImage);
  new File('images/ReceiptRaw_1.jpg').writeAsBytesSync(new_jpeg);
}

Update-1:个 当我使用下面的代码时,我得到错误信息,如下所示:

在pubspec.yaml中检测到错误: No file or variants found for asset: packages/myAppName/assets/images/ReceiptRaw_1.jpg

 String imageData = await rootBundle.loadString('packages/myAppName/assets/images/ReceiptRaw_1.jpg');
  Image _receiptImage = await decodeImage(new File(imageData).readAsBytesSync());

Update-2:

错误:无法将‘dart.type_data::ByteData’类型的值赋给‘dart.core::string’类型的变量.

var imageData = await rootBundle.load('packages/myAppName/assets/images/ReceiptRaw_1.jpg');
  Image _receiptImage = await decodeImage(new File(imageData).readAsBytesSync());

New 更新:

Step 1:

Change to:个个

assets:
  - packages/myAppName/dekonts/ReceiptRaw_1.jpg

Change to:个个

var imageData = await rootBundle.load('packages/myAppName/dekonts/ReceiptRaw_1.jpg');
print("imageData: $imageData"); 

Result:张照片

ImageData:"_ByteDataView"的实例

Step 2: Move to /lib/assets/images/ReceiptRaw_1.jpg文件夹

Change to:个个

assets:
  - packages/myAppName/lib/assets/images/ReceiptRaw_1.jpg

Change to:个个

var imageData = await rootBundle.load('packages/myAppName/lib/assets/images/ReceiptRaw_1.jpg');
print("imageData: $imageData"); 

Result:收到错误,错误为:

正在解析依赖关系. 正在运行"gradlew AssembleDebug". 在pubspec.yaml中检测到错误: 找不到assets资源 的文件或变体:packages/myAppName/lib/assets/images/ReceiptRaw_1.jpg

更新:

/要包括例如第一张图片,应用程序的pubspec.yaml
/在assets资源 部分指定:
/
/assets资源 : /-packages/fancy_backgrounds/backgrounds/background1.png /
/101 is implied,因此不应包含在assets资源 路径中.

推荐答案

发布依赖项的文件不能作为文件使用.它们包含在存档文件中.

将图像添加到pubspec.yaml中的资源

flutter:
  assets:
    - packages/myAppName/assets/images/ReceiptRaw_1.jpg

然后把它装上

var imageData = await rootBundle.load('packages/myAppName/assets/images/ReceiptRaw_1.jpg');

为此,文件ReceiptRaw_1.jpg需要位于

myAppName/lib/assets/images/ReceiptRaw_1.jpg

其中lib/部分是必填项.

Dart相关问答推荐

Dartpad使用基本身份验证发出请求

Futures 和异步代码如何在 Dart 中工作?

将所有内容放在有序组中,但将括号中的字符组合在一起

在 Flutter 中以间隔自动获取 API 数据

读取有状态(Stateful)小部件的状态

无法在 IOS 上使用 firebase 运行Flutter应用程序

如何在 dart 中获取当前和调用函数的名称?

如何在 ListView 中添加额外的底部间距?

Flutter - 在 null 上调用了 getter 'length'

如何调整ShowDialog的子级大小

如何在Flatter中将图表线 colored颜色 更改为自定义 colored颜色 代码值

了解Dart private class

dart- 四舍五入

未定义命名参数child.在 Center() 构造函数中

判断Dart中是否提供了可选参数

如何在 Dart 中使用 char 类型?

用 dart 解析日期

DART:future的语法 then

在 Dart 中打开类类型

如何在 Dart 中进行整数除法?