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): ══════════════════════════════════════════════════ ═════════════════════════════════════════════
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
J'ai le même problème. Je viens de lancer "$ flutter clean"
, alors tout va bien.
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)