Wie kann ich catch-Ausnahmen beim flattern behebt eine NetworkImage?
Mein use-case ist hier zu zeigen, eine snackbar, ob es ein Fehler ist, aber ich kann nicht fangen die SocketException da bin ich nicht aufrufen laden: flutter ist.
Update (Beispiel stacktrace):
I/flutter (11702): ══╡ EXCEPTION CAUGHT BY SERVICES ╞══════════════════════════════════════════════════════════════════
I/flutter (11702): The following SocketException was thrown resolving a single-frame image stream:
I/flutter (11702): Connection failed (OS Error: Network is unreachable, errno = 101), address = (( snip )), port
I/flutter (11702): = 443
I/flutter (11702): When the exception was thrown, this was the stack:
I/flutter (11702): #0 IOClient.send (package:http/src/io_client.dart:30:23)
I/flutter (11702): <asynchronous suspension>
I/flutter (11702): #1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:171:38)
I/flutter (11702): <asynchronous suspension>
I/flutter (11702): #2 BaseClient.get (package:http/src/base_client.dart:34:5)
I/flutter (11702): #3 NetworkImage._loadAsync (package:flutter/src/services/image_provider.dart:431:54)
I/flutter (11702): <asynchronous suspension>
I/flutter (11702): #4 NetworkImage.load (package:flutter/src/services/image_provider.dart:417:7)
I/flutter (11702): #5 ImageProvider.resolve.<anonymous closure>.<anonymous closure> (package:flutter/src/services/image_provider.dart:253:61)
- Was Flattern version verwenden Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir relativ sicher, es ist nicht möglich, mit NetworkImage und das ist, weil so wie ich das verstehe Ausnahmen können nur gefangen werden, wenn Sie warten auf das Ergebnis von dem, was ist eine Ausnahme zu werfen.
Glücklicherweise mit ein wenig F12 Aktion, es scheint, der code ist ziemlich einfach. So war meine Lösung zu kopieren NetworkImage ist _loadAsync Funktionalität, um meine eigene Klasse mit ein paar kleinen tweeks. (Wie rturning eine Uint8List anstelle eines codec)
utils/network_image_loader.dart
Einen einfachen Weg, dies zu nutzen wäre (ich habe es anders da ich am laden war eine Schleife von Bildern und anzeigen einer Voreinstellung, so habe ich noch nicht getestet, aber es sollte funktionieren, oder schließen):
Also meine Klasse ist schön, wenn Sie wollen, können Sie Folgendes tun:
Edit:
Möchten Sie vielleicht zu schauen, fade-in Bildern, die es erlauben, die Angabe von ein Platzhalter und kann ausreichend sein, für viele Fälle: https://flutter.io/cookbook/images/fading-in-images/