FlutterError: невозможно загрузить ресурс
Это структура папок моего приложения
.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
Я не получаю никаких ошибок для этого файла yaml, а запуск "флаттера пакетов" дает код выхода 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 -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;
}
}
Это происходит как для файла pizza0.png, так и для файла pizza1.png. Файлы видны в древовидной структуре, как в проводнике Windows, так и в коде VS. Нагрузка на шрифты без проблем.
Это результат, который я получаю при запуске Flutter Run -v:
[+1068 ms] I/flutter (6489): ══╡ ИСКЛЮЧЕНИЕ, УЛУЧШЕННОЕ ОБСЛУЖИВАНИЕМ РЕСУРСОВ ИЗОБРАЖЕНИЯ ╞═════════════════════════════════════════ ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════ CN05] 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 (пакет: flutter/src/services/asset_bundle.dart: 221: 7) [+1 ms] I/flutter (6489): [+1 ms] I/flutter (6489): # 1 AssetBundleImageProvider._loadAsync (пакет: flutter/src/painting/image_provider.dart: 429: 44) [+1 ms] I/flutter (6489): [+1 ms] I/flutter (6489): # 2 AssetBundleImageProvider.load (пакет: flutter/src/painting/image_provider.dart: 414: 14) [+1 ms] I/flutter (6489 ): # 3 ImageProvi der.resolve.. (пакет: flutter/src/painting/image_provider.dart: 267: 86) [+4 ms] I/flutter (6489): # 4 ImageCache.putIfAbsent (пакет: flutter/src/painting/image_cache.dart: 143: 20) [+3 ms] I/flutter (6489): # 5 ImageProvider.resolve. (пакет: flutter/src/painting/image_provider.dart: 267: 63) [+3 ms] I/flutter (6489): (удалено 8 кадров из пакета dart: async) [+1 ms] 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): scale: 1.0) [+2 ms] I/flutter (6489): = = = = = = = ══════════════════════════════════════════════════ ═
Ответы
Ответ 1
Вы должны учитывать отступы для 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
Ответ 2
У меня такая же проблема. Я только что запустил "$ flutter clean"
, тогда все в порядке.
Подробнее об этой ошибке
Ответ 3
вы можете просто указать путь к папке изображений вместо указания каждого изображения.
убедитесь, что вы используете правильные углубления, так как pubspec.yaml чувствителен к отступу.
flutter:
uses-material-design: true
assets:
- images/
и вы можете просто получить доступ к каждому изображению в виде
new Image.asset('images/pizza1.png',width:300,height:100)
Ответ 4
Привет, у меня есть похожая проблема, я исправил здесь:
uses-material-design: true
assets:
- assets/images/
После того, как вы делаете: Flutter Clean
Ответ 5
У меня была та же проблема, я исправил ее, вам просто нужно поместить два (use-material-design: true и assets) в один столбец и щелкнуть по зависимостям обновления, но перед перезапуском android studio.