【发布时间】:2019-05-08 15:30:34
【问题描述】:
这是我的应用程序的文件夹结构
.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。
在我的 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,
);
}
}
我在其他地方使用的,为了显示图像(代码省略):
),
PizzaImageWidget(),
],
该建筑没有错误。 Flutter Doctor -v 不会给出任何错误,Flutter Analyze -v 也不会。 .apk 似乎构建得很好,但是当应用程序在我的手机上打开时,我在asset_bundle.dart 中收到以下错误:
发生了异常。 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 文件都会发生这种情况。这些文件在树结构中可见,无论是在 Windows 资源管理器中还是在 VS Code 中。字体资源加载没有问题。
这是我在运行 Flutter Run -v 时得到的输出:
[+1068 ms] I/flutter (6489): ══╡ 图像资源捕获的异常 服务╞════════════════════════════════════════════════ ════ [ +9 ms] I/flutter (6489): 抛出以下断言解决 图像编解码器:[+2 ms] I/flutter(6489):无法加载资产: 图像/pizza0.png [+2 ms] I/flutter (6489): [+1 ms] I/flutter ( 6489):抛出异常时,这是堆栈:[+2 ms] 我/颤振(6489):#0 PlatformAssetBundle.load (包:flutter/src/services/asset_bundle.dart:221:7)[+1 毫秒] I/颤动(6489):[+1 ms] I/颤动( 6489):#1 AssetBundleImageProvider._loadAsync (包:flutter/src/painting/image_provider.dart:429:44)[+1 毫秒] I/颤动(6489):[+1 ms] I/颤动( 6489):#2 AssetBundleImageProvider.load (包:flutter/src/painting/image_provider.dart:414:14)[+1 毫秒] 我/颤振(6489):#3 ImageProvider.resolve.. (包:flutter/src/painting/image_provider.dart:267:86)[+4 毫秒] 我/颤振(6489):#4 ImageCache.putIfAbsent (包:flutter/src/painting/image_cache.dart:143:20)[+3 毫秒] I/flutter (6489):#5 ImageProvider.resolve。 (包:flutter/src/painting/image_provider.dart:267:63)[+3 毫秒] I/flutter(6489):(从包 dart:async 中删除了 8 帧)[+1 ms] I/flutter(6489):[+1 ms] I/flutter(6489):图像提供者: AssetImage(bundle: null, name: "images/pizza0.png") [+3 ms] I/flutter(6489):图像键:AssetBundleImageKey(捆绑: PlatformAssetBundle#20fc8(),名称:“images/pizza0.png”,[+1 ms] I/颤动(6489):比例:1.0)[+2 ms] I/颤动(6489): ══════════════════════════════════════════════════ ══════════════════════════════════════════════════
【问题讨论】:
-
@diegoveloper 是的,字体可以使用,但两个图像都会出现此错误。
-
你在 assets 关键字前使用空格吗?
-
yaml文件没问题。我在 VS Code 中有一个 yaml 扩展,它没有给出任何错误,yamlint.com 说它也很好。
-
是的,如果您不添加缩进,但您无法获取图像,您不会收到错误
-
我有同样的问题,我发现在构建时可能有用的警告:“错误:无法在 pubspec.yaml 中找到目录条目”