这是我的应用程序的文件夹结构
.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
Run Code Online (Sandbox Code Playgroud)
在我的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
Run Code Online (Sandbox Code Playgroud)
我没有收到此yaml文件的任何错误,并且运行“ flutter package get”给出的退出代码为0。
在我的home.dart中,我有以下课程:
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,
);
}
}
Run Code Online (Sandbox Code Playgroud)
我在其他地方使用的是为了显示图像(省略了代码):
),
PizzaImageWidget(),
],
Run Code Online (Sandbox Code Playgroud)
建立没有错误。Flutter Doctor -v没有给出任何错误,Flutter Analyze -v也没有给出任何错误。.apk似乎可以很好地构建,但是当应用程序在手机上打开时,在asset_bundle.dart中出现以下错误:
发生异常。FlutterError(无法加载资源:images / 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;
}
}
Run Code Online (Sandbox Code Playgroud)
Pizza0.png文件和pizza1.png文件都会发生这种情况。这些文件在树结构中都是可见的,在Windows资源管理器中都与VS Code中一样。字体资产加载没有问题。
这是运行Flutter Run -v时得到的输出:
[+1068毫秒] I /颤振(6489):??? 影像资源服务的例外情况??????????????????????????????????????????????????? ????????? [+9 ms] I / flutter(6489):抛出了以下断言来解析图像编解码器:[+2 ms] I / flutter(6489):无法加载资产:images / 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毫秒] I / flutter(6489):[+1毫秒] I / flutter(6489):#1 AssetBundleImageProvider._loadAsync(package:flutter / src / painting /image_provider.dart:429:44)[+1 ms] I / flutter(6489):[+1 ms] I / flutter(6489):#2 AssetBundleImageProvider.load(package:flutter / src / painting / image_provider.dart :414:14)[+1 ms] I / flutter(6489):#3 ImageProvider.resolve ..(package:flutter / src / painting / image_provider.dart:267:86)[+4 ms] I / flutter(6489 ):#4 ImageCache.putIfAbsent(package:flutter / src / painting / image_cache.dart:143:20)[+3 ms] I / flutter(6489):#5 ImageProvider.resolve。(package:flutter / src / painting / image_provider.dart:267:63)[+3 ms] I / flutter(6489):(从dart:async软件包中删除了8帧)[+1 ms] I / flutter(6489) :[+1毫秒] I / flutter(6489):图片提供者:AssetImage(bundle:null,名称:“ images / pizza0.png”)[+3毫秒] I / flutter(6489):图片密钥:AssetBundleImageKey(bundle :PlatformAssetBundle#20fc8(),名称:“ images / pizza0.png”,[+1毫秒] I / Flutter(6489):比例尺:1.0)[+2毫秒] I / flutter(6489):
die*_*per 30
您应该考虑缩进 assets
flutter:
assets:
- images/pizza1.png
- images/pizza0.png
Run Code Online (Sandbox Code Playgroud)
更多细节:
flutter:
[2 whitespaces or 1 tab]assets:
[4 whitespaces or 2 tabs]- images/pizza1.png
[4 whitespaces or 2 tabs]- images/pizza0.png
Run Code Online (Sandbox Code Playgroud)
Dee*_*Jha 20
为了我,
flutter clean,在我的形象中给出完整的路径
image: AssetImage(
'./lib/graphics/logo2.png'
),
width: 200,
height: 200,
);
Run Code Online (Sandbox Code Playgroud)这三个步骤成功了。
Ale*_*ean 18
遇到相同的问题,代码略有不同。就我而言,我使用了一个“资产”文件夹,该文件夹细分为资产(精灵、音频、UI)子文件夹。
我的代码最初只是在pubspec.yaml 中- 替代方法是详细说明每个文件。
flutter:
assets:
- assets
Run Code Online (Sandbox Code Playgroud)
压痕和颤振清洁不足以修复它。flutter 未加载子文件夹中的文件。似乎 flutter 需要“用手”,而不是在没有明确要求它查看子文件夹的情况下查看它们。这对我有用:
flutter:
assets:
- assets/sprites/
- assets/audio/
- assets/UI/
Run Code Online (Sandbox Code Playgroud)
所以我必须详细说明每个文件夹和每个包含资产(mp3、jpg 等)的子文件夹。这样做使应用程序工作并为我节省了大量时间,因为上面详述的唯一解决方案需要我手动列出 30 多个资产,而这里的代码只有几行并且更易于维护。
小智 12
有时缓存会产生问题,所以首先运行
flutter clean
Run Code Online (Sandbox Code Playgroud)
这次运行之后
flutter pub get
Run Code Online (Sandbox Code Playgroud)
yat*_*van 11
我有同样的问题。我刚跑步"$ flutter clean",一切都OK。
Jam*_*len 10
我也有这个问题。我认为 Flutter 缓存图像的方式存在错误。我的猜测是,当您第一次尝试加载时pizza0.png,它不可用,并且 Flutter 已经缓存了这个失败的结果。然后,即使添加了正确的图像,Flutter 仍然认为它不可用。
这都是猜测,基于我遇到同样问题的事实,并且在应用程序启动时调用一次为我解决了问题:
imageCache.clear();
Run Code Online (Sandbox Code Playgroud)
这会清除图像缓存,这意味着 Flutter 将尝试加载新鲜图像而不是搜索缓存。
PS 我还发现,出于同样的原因,每当您更改任何现有图像时都需要调用它 - Flutter 将加载旧的缓存版本。另一种方法是重命名图像。
小智 9
如果您正在开发 flutter 包,请在图像路径后添加包参数,如下所示:
AssetImage('images/heart.png', package: 'my_icons') // my_icons is your plugin name, in flutter plugin is also a package.
Run Code Online (Sandbox Code Playgroud)
这是 flutter 文档的链接 https://flutter.dev/assets-and-images/#from-packages
在 pubspec.yaml 中,不要使用 TAB!
flutter:
<space><space>assets:
<space><space><space><space>assets/
Run Code Online (Sandbox Code Playgroud)
例子:
flutter:
assets:
assets/
Run Code Online (Sandbox Code Playgroud)
您只需指定图像文件夹的路径即可,而不必指定每个图像。
确保您使用正确的缩进,因为pubspec.yaml是缩进敏感的。
flutter:
uses-material-design: true
assets:
- images/
Run Code Online (Sandbox Code Playgroud)
您可以简单地访问每个图像为
new Image.asset('images/pizza1.png',width:300,height:100)
Run Code Online (Sandbox Code Playgroud)
小智 7
我有一个类似的问题,我在这里修复:
uses-material-design: true
assets:
- assets/images/
Run Code Online (Sandbox Code Playgroud)
之后,执行以下操作:
Flutter Clean
Run Code Online (Sandbox Code Playgroud)
完成所有操作后仍然无法正常工作,请尝试:
flutter clean
flutter pub get
Run Code Online (Sandbox Code Playgroud)
有时更新pubspec.yaml文件后,尽管显示正在运行,但无法运行 pub get。
尝试上面的命令
实际上问题出在 pubspec.yaml 中,我将所有图像都放入 assets/images/并
这个错误的方式
flutter:
uses-material-design: true
assets:
- images/
Run Code Online (Sandbox Code Playgroud)
正确的
flutter:
uses-material-design: true
assets:
- assets/images/
Run Code Online (Sandbox Code Playgroud)
对我来说唯一有用的是在代码中提及整个路径。也就是说,您必须在代码页上提及根目录中的图像路径,在 YAML 中它与顶级目录一起使用。
您可能无法仅使用代码中的主目录路径,我已经尝试了很多,这是唯一有效的方法。
希望它能解决问题并节省您的时间。
第一个图像是代码,第二个图像是 yaml。
| 归档时间: |
|
| 查看次数: |
19232 次 |
| 最近记录: |