无法加载资产

这是我的应用程序的文件夹结构

.idea
.vscode
android
build
fonts
Oxygen-Bold.tff
Oxygen-Light.tff
Oxygen-Regular.tff
images
pizza0.png
pizza1.png
ios
lib
ui
home.dart
main.dart
test
.gitignore
.metadata
.packages
app_widgets.iml
pubspec.lock
pubspec.yaml
README.md

pubspec.yaml文件中,我加载的字体和资产如下所示

flutter:


uses-material-design: true


assets:
- images/pizza0.png
- images/pizza1.png


fonts:
- family: Oxygen
fonts:
- asset: fonts/Oxygen-Regular.ttf
- asset: fonts/Oxygen-Bold.ttf
weight: 700
- asset: fonts/Oxygen-Light.ttf
weight: 300

我没有得到这个 pubspec.yaml的任何错误,运行 flutter packages get得到的退出代码为0。

在我家,我有以下课程:

class PizzaImageWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
AssetImage pizzaAsset = AssetImage('images/pizza0.png');
Image image = Image(image: pizzaAsset, width: 400, height: 400);
return Container(
child: image,
);
}
}

为了显示图像(代码省略) ,我在其他地方使用了:

        ),
PizzaImageWidget(),
],

建筑物没有出错。颤振医生 -v 不会给出任何错误,颤振分析 -v 也不会。那个。Apk 看起来构建得很好,但是当应用程序在我的手机上打开时,我在 asset _ bundle 中得到以下错误。飞镖:

发生异常。 FlutterError (无法加载资产: 图片/pizza0.png)

这个类在 asset _ bundle. dart 文件中抛出错误:

/// An [AssetBundle] that loads resources using platform messages.
class PlatformAssetBundle extends CachingAssetBundle {
@override
Future<ByteData> load(String key) async {
final Uint8List encoded = utf8.encoder.convert(Uri(path: Uri.encodeFull(key)).path);
final ByteData asset =
await BinaryMessages.send('flutter/assets', encoded.buffer.asByteData());
if (asset == null)
throw FlutterError('Unable to load asset: $key');
return asset;
}
}

对于 pizza0.png 文件和 pizza1.png 文件都是如此。这些文件可以在树结构中看到,就像 VS 代码中的文件资源管理器一样。加载字体资产没有问题。

这是我在运行 Flutter Run-v 时得到的输出:

[ + 1068ms ] I/flutter (6489) : 由图像资源捕捉到的普通噪声 毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼上,毕业典礼 Ms ] I/flutter (6489) : 抛出以下断言来解析 图像编解码器: [ + 2 ms ] I/flutter (6489) : 无法加载资源: 图片/pizza0.png [ + 2 ms ] I/flutter (6489) : [ + 1 ms ] I/flutter ( 6489) : 当抛出异常时,这是堆栈: [ + 2 ms ] I/flutter (6489) : # 0 PlatformAssetBundle.load (package: flutter/src/services/asset _ bundle. dart: 221:7)[ + 1 ms ] I/flutter (6489) : [ + 1 ms ] I/flutter ( 6489) : # 1 AssetBundleImageProvider. _ loadAsync (包装: flutter/src/畫/image _ Provider. dart: 429:44)[ + 1 ms ] I/flutter (6489) : [ + 1 ms ] I/flutter ( 6489) : # 2 AssetBundleImageProvider.load (包装: flutter/src/畫/image _ Provider. dart: 414:14)[ + 1 ms ] I/flutter (6489) : # 3 ImageProvider.Resol. . . (包: flutter/src/畫/image _ Provider. dart: 267:86)[ + 4 ms ] I/flutter (6489) : # 4 ImageCache.putIfAbsent (包: flutter/src/畫/image _ cache. dart: 143:20)[ + 3 ms ] I/flutter (6489) : # 5 ImageProvider. (包: flutter/src/畫/image _ Provider. dart: 267:63)[ + 3 ms ] I/flutter (6489) : (省略了包省略号中的8帧)[ + 1 I/flutter (6489) : [ + 1 ms ] I/flutter (6489) : 图片提供商: AssetImage (bundle: null,name: “ images/pizza0.png”)[ + 3 ms ] I/flutter (6489) : 图像键: AssetBundleImageKey (bundle: PlatformAssetBundle # 20fc8() ,名称: “ images/pizza0.png”,[ + 1 ms ] I/flutter (6489) : 刻度: 1.0)[ + 2 ms ] I/flutter (6489) : 一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,一般来说,

397231 次浏览

您应该考虑 assets的缩进

flutter:


assets:
- images/pizza1.png
- images/pizza0.png

更多细节:

flutter:


[2 whitespaces or 1 tab]assets:
[4 whitespaces or 2 tabs]- images/pizza1.png
[4 whitespaces or 2 tabs]- images/pizza0.png

在所有这些之后,您可以进行热重启。

最简单的方法是引用资产文件夹而不是资产本身,只要确保使用适当的缩进即可,因为 pubspec.yaml对缩进敏感。

flutter:


uses-material-design: true
assets:
- images/

您可以简单地访问每个图像作为

  Image.asset('images/pizza1.png', width:300, height:100)

运行 flutter clean解决了我的问题。

关于这个错误的更多信息

我有同样的问题,我纠正了它,你只需要把两个(使用-材料-设计: 真实和资产)在同一列,并在升级依赖,但重新启动安卓工作室之前点击。

screenshot

我也遇到过类似的问题,我在这里解决了:

uses-material-design: true
assets:
- assets/images/

之后,做:

Flutter Clean

我也有这个问题。我认为 Flutter 缓存图像的方式有一个漏洞。我的猜测是,当您第一次尝试加载 pizza0.png时,它不可用,而 Flutter 缓存了这个失败的结果。然后,即使添加了正确的图像,Flutter 仍然认为它是不可用的。

这些都是猜测,基于我也有同样的问题这个事实,并调用这个 once on app start 为我解决了这个问题:

imageCache.clear();

这将清除图像缓存,这意味着 Flutter 将尝试加载新的图像,而不是搜索缓存。

PS 我还发现你需要调用这个当你改变任何现有的图像,出于同样的原因-Flutter 将加载旧的缓存版本。另一种方法是重命名图像。

这个问题在过去几乎把我逼疯了。为了支持其他人的说法,在确保 yaml 文件上的所有缩进都已经被修正并且问题仍然存在之后,在 Android 工作室的终端上运行一个“ flutter clean”命令。至于 flutter 1.9,这应该可以解决问题。

确保文件名不包含诸如 ñ 之类的特殊字符

2019年12月25日:

无论谁在 Flutter 面临图片未显示的问题,让我给你一个简单的检查点:

  1. Asset (‘ asset/images/photo1.png’) ; ——这里确保在 asset 之前不要使用/(正斜杠)。
  2. YAML 文件总是清晰的,不要使用空格,而是使用 TAB。
  3. YAML 文件为资产添加条目。

第一点非常重要

即使在那之后,这个问题仍然存在于我的案子中, 在 yaml 文件中删除构建文件夹 flutter clean正确的压痕

它自己修复了,因为它可能是一个与 Android Studio 相关的问题。

修正1) 冷靴子模式下重新启动模拟器, 单击 列出虚拟设备按钮后,单击 向下箭头(编辑图标旁边的最后一个图标) = > 选择 冷启动选项。如果问题仍然存在,按照下面的步骤操作

修正2 )在 更改模拟器虚拟设备作为解决方案之后,

例如 : 从 Nexus6到像素模拟器

编程愉快!

在 pubspec.yaml 中正确声明之后,考虑给出图像 ex 的完整路径。

'assets/images/about_us.png'

而不仅仅是 images/..

在这样一个微不足道的错误上浪费了2个小时之后,他为我工作。

我也面临着同样的问题。我这边的问题是图像名称之间有空格,所以我用没有任何空格的新名称更新了图像名称。

创建错误的图像名称是 comboclr emtpy no circle.png

我将此名称更新为 comboclr _ emtpy _ no _ Circle. png

对我来说,

  1. flutter clean,
  2. 重启机器人工作室和模拟器,
  3. 在我的想象中给予完整的道路

    image: AssetImage(
    './lib/graphics/logo2.png'
    ),
    width: 200,
    height: 200,
    );
    

these three steps did the trick.

我遇到了这个问题,几乎放弃了扑动,直到我偶然发现了原因。在我的情况下,我所做的是沿着以下路线

static Future<String> resourceText(String resName) async
{
try
{
ZLibCodec zlc = new ZLibCodec(gzip:false,raw:true,level:9);
var data= await rootBundle.load('assets/path/to/$resName');
String result = new
String.fromCharCodes(zlc.decode(puzzleData.buffer.asUint8List()));
return puzzle;
} catch(e)
{
debugPrint('Resource Error $resName $e');
return '';
}
}


static Future<String> fallBackText(String textName) async
{
if (testCondtion) return 'Some Required Text';
else return resourceText('default');
}

其中 一些必修课文是一个文本字符串,如果满足 testCondition则发回。失败的是,我试图从应用程序资源中提取默认文本,然后将其发送回来。我的错误是在行 return resourceText('default');。在将其改为读取 return await resourceText('default')之后,一切正如预期的那样。

这个问题产生于 rootBundle.load异步操作的事实。为了正确返回其结果,我们需要 await他们的可用性,我没有这样做。不管是 Flutter VSCode 插件还是 Flutter 构建过程都没有将这个错误标记出来,这让我有点吃惊。尽管 rootBundle.load失败的原因很可能还有其它原因,但这个答案有望帮助其它在 Flutter 遭遇神秘资产负荷失败的企业。

用稍微不同的代码遇到了同样的问题。在我的例子中,我使用的是一个“资产”文件夹,它被细分为资产(精灵、音频、 UI)的子文件夹。

我的代码刚开始只是在 Pubspec.yaml-选择将详细说明每一个文件。

flutter:


assets:
- assets


凹痕和颤振清洁不足以修复它。子文件夹中的文件不采用颤振加载。看起来颤动需要“被手抓住”,不要在没有明确要求它看子文件夹的情况下看它们。这对我很有效:

flutter:


assets:
- assets/sprites/
- assets/audio/
- assets/UI/


因此,我必须详细说明每个文件夹和每个包含资产的子文件夹(mp3、 jpg 等)。这样做使应用程序和 节省了我吨的时间,因为唯一的解决方案详细上述将需要我手动列出30 + 资产工作,而这里的代码只有几行,更容易维护。

其实问题出在 pubspec.yaml, 我把所有图像都输入 assets/images/

走错路了

flutter:
uses-material-design: true
assets:
- images/

没错

flutter:
uses-material-design: true
assets:
- assets/images/

请提供在图像文件夹中指定的确切图像名称(包括扩展名)。不匹配会触发此异常。

Yaml,不要使用 TAB!

flutter:
<space><space>assets:
<space><space><space><space>assets/

例如:

flutter:
assets:
assets/
  1. 你应该用 资产开始图像路径:

image: AssetImage('assets/images/pizza0.png')

  1. 必须在 pubspec.yaml 中的新行中添加每个子文件夹

当我在资产文件夹中加载新映像时,每次都会遇到这个问题。

我运行 flutter clean,然后重新启动 Android Studio。似乎 flutter 包缓存资产文件夹,并且当开发人员在项目中添加新图像时,没有更新缓存的机制(个人想法)。

我的问题是嵌套文件夹。

我有我的形象在 assets/images/logo/xyz.png和认为 - assets/images/将捕捉所有子文件夹。

您必须显式地添加每个嵌套的子文件夹

解决方案: - assets/images/logo/等。

我将我的图像放在资产文件夹的子目录中。 每当我添加新的图像,我重新启动应用程序,它工作得很好。

 assets:
- assets/sub_folder/

我这样做是为了不必列出每个资产的名称。

如果你已经改变了一切,在缩进部分,告诉和检查输入错误,但仍然得到一个错误,那么你应该做这个简单的工作,对我来说,似乎这是几乎所有人都忽略了

即使在资产后面有正确的间距: 您仍然可能做错了一件事

按这个顺序保持压痕

颤动: < 2 _ space > 资产: < no _ space >-asset/images/image. png

所以应该是这样的

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

在我的情况下,重新启动没有帮助。

我必须 卸载的应用程序,然后 把所有东西都重新运行一遍

成功了!

当我试图在一个更大的项目中添加一个图像到一个模块中时,我也犯了同样的错误,结果是 Image.asset 小部件在指定了包参数之后,获得了一个可以指定的包参数

如果您正在开发颤振包,请添加包参数后的图像路径如下:

AssetImage('images/heart.png', package: 'my_icons') // my_icons is your plugin name, in flutter plugin is also a package.

这里是 flutter 文档的链接 Https://flutter.dev/assets-and-images/#from-packages

类似问题的另一个原因是: 在 Windows 上,不应该使用符号作为目录分隔符

而不是

AssetImage('images\heart.png')

使用

AssetImage('images/heart.png')

它可能是 Windows 版本的 Flutter 的一个 bug。它解决了我的问题。

养成一个习惯,检查 Pubspec.yaml时,你正在努力加载一个图像在一个扑动项目。大多数时候,问题出在它身上。

下面提到了正确的方法。不要使用 Tab 键来保留空格。相反,使用空格键。

flutter:
uses-material-design: tru
assets:
- images/image1.jpg

并确保包括 相同的正确路径在您的 Dart 文件。

  • 我经常使用的一个技巧是将图像重命名为一个非常短的名称,以避免输入错误。

希望这对面临这些问题的人有所帮助。

唯一能让我在代码中提到整条道路的方法。也就是说,您必须在代码页上提到根目录中的映像路径,在 YAML 中,它与顶级目录一起工作。

你可能不能摆脱只有主目录路径的代码,我已经尝试了很多,这是唯一的工作。

希望它解决了问题,节省了你的时间。

第一个图像是代码,第二个图像是 yaml。

code

yaml

我只是重新运行我的应用程序,而不是只是热重新加载。

当 pubspec.yaml 中的图像没有正确更新时,就会发生此错误

按照以下步骤添加一个要颤动的图像:

1)在项目中创建资产文件夹(代替你可以随心所欲创建的资产,比如图片或其他)。 creating assets directory in project

2)将图像添加到资产文件夹(或拖放图像到资产)。 adding images into assets folder

3)开启 pubspec.yaml 档案 create a assets dependency and add a images which are already available in assets folder and run command from terminal pubget or press ctrl+s to save it will run and update,or press the download arrow which appears in top to update, once updated successfully in output console you can see exitcode 0..

按照上面的图片: 创建一个资产依赖项,添加一个已经在资产文件夹中可用的图像,并从终端 pubget 运行命令或按 ctrl + s 保存它将运行和更新图像,或按下载箭头出现在顶部更新图像,一旦在输出控制台成功更新,你可以看到 exitcode 0。

使用

Image.asset( 'assets\\images\\logo.png')

为我工作, 需要在 puspec.yaml 文件中指定相对图像路径

如果一切正常,正确的路径,正确的 pubspec 空间等,最后可能导致这种情况的是缓存。您可以关闭模拟器,并重新启动您的应用程序,它有助于我的情况。

还有一个答案:

我的 pubspec.yaml 看起来像这样:

flutter:
assets:
- assets/us_defs/
- assets/eu_defs/
- assets/images/

在调用代码中:

Center(
child: Image(
image: AssetImage('assets/images/<name.png>')
)
)

(*_defs文件夹包含各种其他用途的 json 文件,我可以很好地加载它们。)

但是,无论我怎么努力,图像都无法加载。检查并反复检查缩进间距、拼写、调用 flutter cleanflutter pub get、冷启动应用程序等。尝试引用 'images/<name.png>''assets/images/<name.png>'

没有。

最后,我将 images文件夹提升到项目文件夹下的顶层:

flutter:
assets:
- assets/us_defs/
- assets/eu_defs/
- images/    <-- now a top level folder

在调用代码中:

Center(
child: Image(
image: AssetImage('images/<name.png>');
)
)

成功了。

我不知道为什么。

现在,我宁愿把 images文件夹保留在 assets中,因为它符合我的情感,但如果这次重组让我继续下去,我会忍受它。

在你做了所有的事情仍然没有工作之后,试着:

flutter clean
flutter pub get

有时在更新 Pubspec.yaml文件后,即使显示正在运行,也无法运行 pub get。

试试上面的命令

有时缓存会产生一个问题,所以首先运行

flutter clean

在这次运行之后

flutter pub get

显然有某种类型的抖动错误。这是我的目录结构:

<project>/assets/images/myimage.png

下面是我在 pubspec.yaml 中看到的内容:

flutter:


uses-material-design: true
assets:
- assets/images/

这就是它过去和现在的工作方式,当我为 web 编译的时候:

const DecorationImage(image: AssetImage("images/myimage.png")

但它只有在我为这样的 ios 编译时才能工作:

const DecorationImage(image: AssetImage("assets/images/myimage.png")

幸运的是,添加“ asset/”作为前缀现在在所有情况下都可以工作。

在我的例子中,我必须再次在 iOS 目录中运行 pod install

对于 Android Studio Bumblebee 2021.1.1: 如果你有你的资产路径在 Pubspec.yaml文件设置为“图像/”或任何命名你喜欢然后

飞得很干净

或者你可以转到 Tools-> Flutter-> Flutter clean

(然后热重启就能解决问题)。

我也遇到了同样的问题,在 pubspec.yaml 中没有发现任何问题

Image.asset('images/heart.png', fit: BoxFit.cover,width: 450, ),

设置宽度对我来说很有用。

这可能是因为 WindowsOS 用作目录分隔符。 你可以这样做:

你可以用 r 作为前缀来创建一个“原始”字符串:

AssetImage(r'images\icon.png')

或者

使用正斜杠/

AssetImage('images/icon.png')

我有面对这个问题。我做 flutter clean,我做 Hot Restart,检查 pubspec.yaml。但一切似乎很好。

我的问题是在文件名,请检查您的文件名的小写和大写。

我的问题是这样的。

文件名

images/Pizza0.png

错误

AssetImage pizzaAsset = AssetImage('images/pizza0.png');

工作

 AssetImage pizzaAsset = AssetImage('images/Pizza0.png');

如果您在一个项目中使用了多个模块,可能是您的模块没有访问正确的资产文件夹。 要解决这个问题,你必须指定你的软件包名称:

使用 Flutter SVG

SvgPicture.asset("assets/images/image1.svg", package: "<my_package_name>", width: 100, height: 100,),

使用 Image.asset

Image.asset(AssetImage("assets/images/image1.png").assetName, package: "<my_package_name>",);

别忘了在 pubspec.yaml中指明你的资产:

flutter:
uses-material-design: true
assets:
- assets/
- assets/images/

详情请参阅 这个问题

如果一切正常,问题仍然存在。

我的建议是:

在“ pubspec.yaml”中写入指定的路径。

  assets:
- assets/images/x.png

在酒吧获取,黄线将出现告诉你文件不存在。

然后重构您的文件名将使黄线消失,IDE 将识别您现有的文件。

希望能有帮助。