Flutter: 无法加载资源文件

6
我无法将图像作为容器的背景上传,我已将图像添加到资产文件夹并将其添加到 pubspec.yaml 文件中,但显示以下错误:
I/flutter ( 6664): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 6664): The following assertion was thrown resolving an image codec:
I/flutter ( 6664): Unable to load asset: assets/images/img.png
I/flutter ( 6664): 
I/flutter ( 6664): When the exception was thrown, this was the stack:
I/flutter ( 6664): #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:221:7)
I/flutter ( 6664): <asynchronous suspension>
I/flutter ( 6664): #1      AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:484:44)
I/flutter ( 6664): #2      AssetBundleImageProvider.load (package:flutter/src/painting/image_provider.dart:469:14)
I/flutter ( 6664): #3      ImageProvider.resolve.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:327:17)
I/flutter ( 6664): #4      ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:160:22)
I/flutter ( 6664): #5      ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:325:84)
I/flutter ( 6664): (elided 13 frames from package dart:async)
I/flutter ( 6664): 
I/flutter ( 6664): Image provider: AssetImage(bundle: null, name: "assets/images/img.png")
I/flutter ( 6664): Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#99877(), name: "assets/images/img.png",
I/flutter ( 6664):   scale: 1.0)
I/flutter ( 6664): ════════════════════════════════════════════════════════════════════════════════════════════════════

代码:

body: Form(
          child: Column(
            children: <Widget>[
               Container(
                 decoration: BoxDecoration(
                   image: DecorationImage(
                     image: AssetImage("assets/images/img.png"),
                     fit: BoxFit.cover,
                   ),
                 ),

我已经添加了

assets:
  - assets/images/

到 pubspec.yaml 文件

图片文件夹

图片文件夹

并且在

assets:
  - assets/images/img.png

I/flutter ( 6664): ══╡ EXCEPTION CAUGHT BY IMAGE RESOURCE SERVICE ╞════════════════════════════════════════════════════
I/flutter ( 6664): The following assertion was thrown resolving an image codec:
I/flutter ( 6664): Unable to load asset: assets/images/img.png
I/flutter ( 6664): 
I/flutter ( 6664): When the exception was thrown, this was the stack:
I/flutter ( 6664): #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:221:7)
I/flutter ( 6664): <asynchronous suspension>
I/flutter ( 6664): #1      AssetBundleImageProvider._loadAsync (package:flutter/src/painting/image_provider.dart:484:44)
I/flutter ( 6664): #2      AssetBundleImageProvider.load (package:flutter/src/painting/image_provider.dart:469:14)
I/flutter ( 6664): #3      ImageProvider.resolve.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:327:17)
I/flutter ( 6664): #4      ImageCache.putIfAbsent (package:flutter/src/painting/image_cache.dart:160:22)
I/flutter ( 6664): #5      ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/painting/image_provider.dart:325:84)
I/flutter ( 6664): (elided 13 frames from package dart:async)
I/flutter ( 6664): 
I/flutter ( 6664): Image provider: AssetImage(bundle: null, name: "assets/images/img.png")
I/flutter ( 6664): Image key: AssetBundleImageKey(bundle: PlatformAssetBundle#c1182(), name: "assets/images/img.png",
I/flutter ( 6664):   scale: 1.0)
I/flutter ( 6664): ════════════════════════════════════════════════════════════════════════════════════════════════════

1
我意识到我正在使用 .svg 资源,而我需要使用 SvgPicture.asset('assets/imgs/reset-password.svg') 来加载 svg 图像。 - bikram
5个回答

9
你需要像这样添加:

你需要这样添加


flutter:
  assets:
    - assets/images/img.png

我按照你的要求进行了更新,但是出现了错误,我已经添加到答案中。 - ADev
请查看此答案:https://dev59.com/V1UL5IYBdhLWcg3wlI1w - Cenk YAGMUR
请点击以下链接查看与Flutter开发相关的资产和图像的详情:https://flutter.dev/docs/development/ui/assets-and-images - Cenk YAGMUR
抱歉,在我的 pubspec.yaml 文件中,应该是 assets: - assets/images/img.png,而不是 flutter: assets: - assets/images/img.png。非常感谢。 - ADev

7

在我的情况下,我需要使用 package 属性,因为图片位于我的 项目中,而我正在运行 示例 项目。

package:[您的父目录或项目名称]

例如,我的项目名称是 'flutter_demo'

AssetImage('assets/images/ic_welcome.png', package: 'flutter_demo'),

pubspect.yaml

flutter:
  assets:
    - assets/images/

目录结构:

flutter_demo
  -- assets
    -- images
      -- ic_welcome.png

我正在创建一个Flutter包,但无法以多种方式加载资产,你拯救了我的一天,兄弟。非常感谢。 - thanhbinh84

1
我遇到了这个错误,这是我解决它的方法:
  • 首先确保资产文件夹位于项目的根目录下,而不是 lib 文件夹外。
  • 检查 AssetImage() 内图像路径字符串前面是否有斜杠。
  • 检查 pubspec.yaml 和 AssetImage 中的文件名和路径是否正确。
  • 记得在进行更改后保存文件并热重载。
  • 对于 svg 文件,请使用 flutter_svg package

0

试一下这个:

flutter:
  assets:
    -android/assests/directory/

0
在我的情况下,如果您的文件位于子目录中,请尝试添加子目录而不仅仅是父目录。 类似这样
flutter:
  assets:
    - assets/subdirectory1/
    - assets/subdirectory2/

替代

flutter:
  assets:
    - assets/

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