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

Ответ 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.

screenshot