webentwicklung-frage-antwort-db.com.de

FlutterError: Asset kann nicht geladen werden

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): ═════ ══════════════════════════════════════════════════ ═════════════════════════════════════════════

14
Matthias

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
22
diegoveloper

Ich habe das gleiche Problem. Ich bin gerade gelaufen "$ flutter clean", dann ist alles in Ordnung.

Mehr zu diesem Fehler

6
yathavan

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)
5
maheshmnj