Dies ist die Ordnerstruktur meiner App
.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
In meiner pubspec.yaml-Datei lade ich die Schriftarten und Assets wie folgt
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
Ich erhalte keine Fehler für diese Yaml-Datei, und das Ausführen von "Flutter Packages Get" gibt einen Exit-Code von 0.
Bei mir zu Hause. Ich habe folgenden Unterricht:
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,
);
}
}
Was ich an anderer Stelle verwende, um das Bild zu zeigen (Code weggelassen):
),
PizzaImageWidget(),
],
Gebäude gibt keine Fehler. Flutter Doctor -v gibt keine Fehler aus und Flutter Analyze -v auch nicht. Die .apk-Datei scheint in Ordnung zu sein, aber wenn die App auf meinem Telefon geöffnet wird, wird in asset_bundle.Dart die folgende Fehlermeldung angezeigt:
Ausnahme ist aufgetreten. FlutterError (Asset kann nicht geladen werden: images/pizza0.png)
Der Fehler wird von dieser Klasse in der Datei asset_bundle.Dart ausgelöst:
/// 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;
}
}
Dies geschieht sowohl für die Datei pizza0.png als auch für die Datei pizza1.png. Die Dateien sind in der Baumstruktur sowohl im Windows-Explorer als auch in VS-Code sichtbar. Die Schriftarten werden ohne Probleme geladen.
Dies ist die Ausgabe, die ich beim Ausführen von Flutter Run -v erhalte:
[+1068 ms] I/Flatter (6489): ══╡ AUSNAHME DURCH IMAGE RESOURCE SERVICE ╞════════════════════════════ ════════════════════════ [+9 ms] I/Flatter (6489): Die folgende Behauptung wurde ausgegeben, um einen Bildcodec aufzulösen: [+2 ms ] I/flattern (6489): Asset kann nicht geladen werden: images/pizza0.png [+2 ms] I/flattern (6489): [+1 ms] I/flattern (6489): Als die Ausnahme ausgelöst wurde, war dies Der Stack: [+2 ms] I/Flatter (6489): # 0 PlatformAssetBundle.load (Paket: Flatter/src/services/asset_bundle.Dart: 221: 7) [+1 ms] I/Flatter (6489): [ +1 ms] I/Flatter (6489): # 1 AssetBundleImageProvider._loadAsync (Paket: Flatter/src/painting/image_provider.Dart: 429: 44) [+1 ms] I/Flatter (6489): [+1 ms] I/flutter (6489): # 2 AssetBundleImageProvider.load (Paket: flutter/src/painting/image_provider.Dart: 414: 14) [+1 ms] I/flutter (6489): # 3 ImageProvider.resolve .. (Paket : flattern/src/painti ng/image_provider.Dart: 267: 86) [+4 ms] I/flattern (6489): # 4 ImageCache.putIfAbsent (Paket: flattern/src/painting/image_cache.Dart: 143: 20) [+3 ms] I/flattern (6489): # 5 ImageProvider.resolve. (Paket: flutter/src/painting/image_provider.Dart: 267: 63) [+3 ms] I/flutter (6489): (8 Frames aus Paket Dart: async entfernt) [+1 ms] I/flutter (6489) : [+1 ms] I/Flatter (6489): Bildanbieter: AssetImage (Bundle: null, Name: "images/pizza0.png") [+3 ms] I/Flatter (6489): Bildschlüssel: AssetBundleImageKey (Bundle : PlatformAssetBundle # 20fc8 (), Name: "images/pizza0.png", [+1 ms] I/Flattern (6489): Maßstab: 1.0) [+2 ms] I/Flattern (6489): ═════ ══════════════════════════════════════════════════ ═════════════════════════════════════════════
Sie sollten den Einzug für assets
berücksichtigen.
flutter:
assets:
- images/pizza1.png
- images/pizza0.png
Mehr Details:
flutter:
[2 whitespaces or 1 tab]assets:
[4 whitespaces or 2 tabs]- images/pizza1.png
[4 whitespaces or 2 tabs]- images/pizza0.png
Ich habe das gleiche Problem. Ich bin gerade gelaufen "$ flutter clean"
, dann ist alles in Ordnung.
sie können einfach den Pfad zu Ihrem Bilderordner angeben, anstatt jedes Bild einzeln anzugeben.
Achten Sie darauf, dass Sie die richtigen Einrückungen verwenden, da die pubspec.yaml einrückungsempfindlich ist.
flutter:
uses-material-design: true
assets:
- images/
und Sie können einfach auf jedes Bild als zugreifen
new Image.asset('images/pizza1.png',width:300,height:100)