web-dev-qa-db-fra.com

FlutterError: Impossible de charger l'actif

Ceci est la structure de dossiers de mon application

.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

Dans mon fichier pubspec.yaml, je charge les polices et les éléments tels que celui-ci.

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

Je ne reçois aucune erreur pour ce fichier yaml et l'exécution de "flutter packages get" donne un code de sortie de 0.

Dans ma maison. J'ai le cours suivant:

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,
    );
  }
}

Ce que j'utilise ailleurs pour afficher l'image (code omis):

        ),
        PizzaImageWidget(),
      ],

La construction ne donne aucune erreur. Flutter Doctor -v ne génère pas d'erreur, pas plus que Flutter Analyze -v. Le fichier .apk semble bien fonctionner, mais lorsque l'application s'ouvre sur mon téléphone, l'erreur suivante s'affiche dans asset_bundle.Dart:

Une exception s'est produite. FlutterError (Impossible de charger l'actif: images/pizza0.png)

L'erreur est renvoyée par cette classe dans le fichier 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;
  }
}

Cela se produit à la fois pour le fichier pizza0.png et le fichier pizza1.png. Les fichiers sont visibles dans l'arborescence, aussi bien dans l'explorateur Windows que dans le code de VS. Les ressources de police se chargent sans problème.

Voici le résultat obtenu lors de l'exécution de Flutter Run -v:

[+1068 ms] I/flutter (6489): EXCEPTION PRIS PAR LE SERVICE DE RESSOURCES D'IMAGE ════════════════════════ [+9 ms] I/flutter (6489): L'assertion suivante a été émise pour résoudre un codec d'image: [+2 ms ] I/flutter (6489): Impossible de charger l’actif: images/pizza0.png [+2 ms] I/flutter (6489): [+1 ms] I/flutter (6489): Lorsque l’exception a été levée, c’était la pile: [+2 ms] I/flutter (6489): # 0 PlatformAssetBundle.load (package: flutter/src/services/asset_bundle.Dart: 221: 7) [+1 ms] I/flutter (6489): [ +1 ms] 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/painti ng/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): (8 images sélectionnées du package Dart: asynchrone) [+1 ms] I/flutter (6489) : [+1 ms] I/flutter (6489): Fournisseur d'images: AssetImage (bundle: null, nom: "images/pizza0.png") [+3 ms] I/flutter (6489): Clé de l'image: AssetBundleImageKey (bundle : PlatformAssetBundle # 20fc8 (), nom: "images/pizza0.png", [+1 ms] I/Flutter (6489): échelle: 1.0) [+2 ms] I/Flutter (6489): ══════════════════════════════════════════════════ ═════════════════════════════════════════════

14
Matthias

Vous devriez envisager l'indentation pour assets

flutter:

  assets:
    - images/pizza1.png
    - images/pizza0.png

Plus de détails:

flutter:

[2 whitespaces or 1 tab]assets:
[4 whitespaces or 2 tabs]- images/pizza1.png
[4 whitespaces or 2 tabs]- images/pizza0.png
22
diegoveloper

J'ai le même problème. Je viens de lancer "$ flutter clean", alors tout va bien.

Plus d'informations sur cette erreur

6
yathavan

vous pouvez simplement spécifier le chemin d'accès à votre dossier d'images au lieu de spécifier chaque image.
veillez à utiliser les empreintes appropriées, car pubspec.yaml est sensible aux empreintes.

flutter:

  uses-material-design: true
  assets:
    - images/

et vous pouvez simplement accéder à chaque image en tant que

  new Image.asset('images/pizza1.png',width:300,height:100)
5
maheshmnj