Flutter Dart: не удается загрузить ресурсы SVG: невозможно загрузить путь к значку ресурса

#flutter #dart #svg #assets

#трепетание #dart #svg #активы

Вопрос:

Я пытаюсь использовать пакет flutter_svg для загрузки некоторых значков .svg.

 class _MyHomePageState extends State<MyHomePage> {
  final String iconPath = "assets/icons/adept.svg";
  ...
}
 

Я добавил assets/ папку, содержащую icons/ папку, в pubspec.yaml файл:

   assets:
    - assets/
 

И когда я пытаюсь загрузить значок внутри моего тела:

       body: Center(
        child: Container(
          child: LimitedBox(
            child: SvgPicture.asset('iconPath', color: Colors.black, width: 100, height: 100,),
            maxHeight: 100,
            maxWidth: 100,
          )
        )
      ),
 

Я получаю эту трассировку стека, невозможно загрузить ресурс: assetName,

 I/flutter (10154): ══╡ EXCEPTION CAUGHT BY SVG ╞═══════════════════════════════════════════════════════════════════════
I/flutter (10154): The following assertion was thrown resolving a single-frame picture stream:
I/flutter (10154): Unable to load asset: iconPath
I/flutter (10154): 
I/flutter (10154): When the exception was thrown, this was the stack:
I/flutter (10154): #0      PlatformAssetBundle.load (package:flutter/src/services/asset_bundle.dart:223:7)
...
I/flutter (10154): Picture provider: ExactAssetPicture(name: "iconPath", bundle: null, colorFilter: null)
I/flutter (10154): Picture key: AssetBundlePictureKey(bundle: PlatformAssetBundle#153a9(), name: "iconPath",
I/flutter (10154):   colorFilter: null)
I/flutter (10154): ════════════════════════════════════════════════════════════════════════════════════════════════════
 

Пожалуйста, объясните мне, чего мне не хватает?

Комментарии:

1. Попробуйте использовать SvgPicture.asset('assets/icons/adept.svg') .

2. @Andrej спасибо, что указали на ошибку, которую я не заметил, как вы можете видеть в приведенном ниже ответе, я должен включить - assets/icons/ в файл pubspec.yaml, у меня сложилось впечатление, что все, что мне нужно было сделать, это добавить родительскую папку, и все последующие папки будут автоматическивключено, чего не было, странно.

3. Работает ли это сейчас?

4. @Andrej да, спасибо.

Ответ №1:

Вы изменили приведенный ниже код?

 assets:
    - assets/
    - assets/icons/
 
       body: Center(
        child: Container(
          child: LimitedBox(
            child: SvgPicture.asset(iconPath, color: Colors.black, width: 100, height: 100,),
            maxHeight: 100,
            maxWidth: 100,
          )
        )
      ),
 

Комментарии:

1. Проблема решена путем добавления - assets/icons/ , но у меня создалось впечатление, что если я включу папку в качестве ресурса pubspec.yaml , все дочерние папки будут автоматически включены, что не является центром сертификации, как показано в этой теме. Не могли бы вы объяснить, почему?

2. Пожалуйста, проверьте комментарий на официальном сайте ‘ flutter.dev/docs/ development/ui / assets-and-images ‘.

3. Включаются только файлы, расположенные непосредственно в каталоге, если в подкаталоге нет файлов с таким же именем (см. Варианты ресурсов). Чтобы добавить файлы, расположенные в подкаталогах, создайте запись для каждого каталога.

Ответ №2:

просто выполните 3 действия: запустите эту команду в терминале: flutter clean.

и в android Studio перейдите к файлу и выберите: Недействительные кэши и перезапуск.

затем снова получите зависимости с помощью этой команды: flutter pub get