FutureWidget
Einleitung
Das FutureWidget ist eine einfache Möglichkeit, Futures in Ihren Nylo Website-Projekten darzustellen. Es umschließt Flutters FutureBuilder und bietet eine übersichtlichere API mit integrierten Ladezuständen.
Während Ihr Future in Bearbeitung ist, wird ein Ladeindikator angezeigt. Sobald das Future abgeschlossen ist, werden die Daten über den child-Callback zurückgegeben.
Grundlegende Verwendung
Hier ist ein einfaches Beispiel für die Verwendung von FutureWidget:
// A Future that takes 3 seconds to complete
Future<String> _findUserName() async {
await sleep(3); // wait for 3 seconds
return "John Doe";
}
// Use the FutureWidget
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: FutureWidget<String>(
future: _findUserName(),
child: (context, data) {
// data = "John Doe"
return Text(data!);
},
),
),
);
}
Das Widget verarbeitet automatisch den Ladezustand für Ihre Benutzer, bis das Future abgeschlossen ist.
Ladezustand anpassen
Sie können das Erscheinungsbild des Ladezustands mit dem Parameter loadingStyle anpassen.
Normaler Ladestil
Verwenden Sie LoadingStyle.normal(), um ein Standard-Lade-Widget anzuzeigen. Sie können optional ein benutzerdefiniertes Kind-Widget bereitstellen:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.normal(
child: Text("Loading..."), // custom loading widget
),
)
Wenn kein Kind-Widget angegeben wird, wird der Standard-App-Loader von Nylo Website angezeigt.
Skeletonizer-Ladestil
Verwenden Sie LoadingStyle.skeletonizer(), um einen Skeleton-Ladeeffekt anzuzeigen. Dies eignet sich hervorragend, um Platzhalter-UI anzuzeigen, die Ihrem Inhaltslayout entspricht:
FutureWidget<User>(
future: _fetchUser(),
child: (context, user) {
return UserCard(user: user!);
},
loadingStyle: LoadingStyle.skeletonizer(
child: UserCard(user: User.placeholder()), // skeleton placeholder
effect: SkeletonizerEffect.shimmer, // shimmer, pulse, or solid
),
)
Verfügbare Skeleton-Effekte:
SkeletonizerEffect.shimmer- Animierter Schimmer-Effekt (Standard)SkeletonizerEffect.pulse- Pulsierender AnimationseffektSkeletonizerEffect.solid- Einfarbiger Effekt
Kein Ladestil
Verwenden Sie LoadingStyle.none(), um den Ladeindikator vollständig auszublenden:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.none(),
)
Fehlerbehandlung
Sie können Fehler von Ihrem Future mit dem onError-Callback behandeln:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
onError: (AsyncSnapshot snapshot) {
print(snapshot.error.toString());
return Text("Something went wrong");
},
)
Wenn kein onError-Callback angegeben wird und ein Fehler auftritt, wird ein leeres SizedBox.shrink() angezeigt.
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
future |
Future<T>? |
Das abzuwartende Future |
child |
Widget Function(BuildContext, T?) |
Builder-Funktion, die aufgerufen wird, wenn das Future abgeschlossen ist |
loadingStyle |
LoadingStyle? |
Ladeindikator anpassen |
onError |
Widget Function(AsyncSnapshot)? |
Builder-Funktion, die bei einem Fehler des Futures aufgerufen wird |