当前位置: 首页 > 面试题库 >

如何在flutter中使用rootBundle加载图像?

寇鸿
2023-03-14
问题内容

我使用图片插件( image:^ 2.0.4 ),以便可以在图片上写一些内容,然后将其保存为新图片到设备或通过邮件发送。我尝试使用“ new
File

加载图像,但Flutter出现错误。我询问并搜索,并得到一个提示,我可以使用rootBundle在Flutter中加载图像。我做到了,我得到以下错误。

[错误:topaz / lib / tonic / logging / dart_error.cc(16)]未处理的异常:无法加载资产:包/
myAppName /资产/图像/ReceiptRaw_1.jpg

当我创建一个简单的Dart控制台应用程序时,该插件可以工作,但无法使用Flutter加载。任何帮助,

这是Flutter代码:

    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); 
    }

这是Dart控制台代码:

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);
}

更新1: 当我使用下面的代码时,我会得到以下错误:

在pubspec.yaml中检测到错误: 找不到资产的文件或变体:包/ myAppName /资产/图像/ReceiptRaw_1.jpg

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

更新2: 如果我使用rootBundle.load我得到以下错误。

错误:无法将类型为’dart.typed_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());

新更新:

步骤1: 移动到ReceiptRaw_1.jpglib/dekonts/

改成:

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

改成:

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

结果: 打印为

imageData:“ _ ByteDataView”的实例

步骤2: 移至资料 /lib/assets/images/ReceiptRaw_1.jpg

改成:

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

改成:

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

结果: 错误为:

解决依赖项…正在运行’gradlew
assembleDebug’…在pubspec.yaml中检测到错误:找不到资产的文件或变体:包/myAppName/lib/assets/images/ReceiptRaw_1.jpg

更新:

///要包含第一张图片,pubspec.yaml应用的图片应
///在资源部分中指定:
///
///资源:///-包/fancy_backgrounds/backgrounds/background1.png ///
/// lib/ 是隐含的,因此不应将其包含在资产路径中。


问题答案:

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

将图像添加到资产 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/部分是强制性的。



 类似资料:
  • 我使用图像插件(图像:^2.0.4),这样我就可以在图像上写些东西,然后将新图像保存到设备或通过邮件发送。我尝试使用“新文件”加载图像,但在颤振时出错。我询问并搜索,得到一个提示,我可以使用rootBundle在flatter中加载图像。我做到了,我得到了下面的错误。 [错误:topaz/lib/tonic/logging/dart_ERROR.cc(16)]未处理的异常:无法加载资产:packa

  • 我是flutter的新手,上周才开始。我正在从在线课程中学习,然后我想在我的flutter应用程序中加载一个图像。但有一个错误是:

  • 我试了所有的办法,但似乎都不奏效。据我说,图像的路径是正确的。(虽然我附上了一张图片供参考)。这就是我得到的错误- 这是**pubspec.yaml*- 名称:foodfast描述:一个新的颤振项目。 Publish_To:'none' 版本:1.0.0+1 环境:SDK:“>=2.7.0<3.0.0” 依赖项:flutter:SDK:flutter 弹出屏幕:^1.3.5 cupertino_i

  • 我希望方法使用picasso从服务器加载图像,并且我希望显示一个进度条,直到照片完全下载完毕。下面是我的代码:

  • 我正在使用Glide库在imageview中加载图像,并使用以下代码。 灰色占位符在图像未加载之前可见,但在图像在imageview中加载后,占位符仍会出现,并在该图像后显示一些空白。 我如何解决这个问题。如果你有任何想法,请帮助我。

  • 我是新来的。我想为我的flutter应用程序实现惰性加载功能,它使用sqflite数据库存储数据。在我的数据库中有1000+行。当应用程序打开时,我想加载10个项目。当我达到第10个数据时,然后加载下一个10个,以此类推。如何实现此功能??