FutureWidget
Introduzione
Il FutureWidget e' un modo semplice per renderizzare Future nei tuoi progetti Nylo Website. Avvolge il FutureBuilder di Flutter e fornisce un'API piu' pulita con stati di caricamento integrati.
Quando il tuo Future e' in corso, mostrera' un loader. Una volta completato il Future, i dati vengono restituiti tramite il callback child.
Utilizzo Base
Ecco un semplice esempio di utilizzo di 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!);
},
),
),
);
}
Il widget gestira' automaticamente lo stato di caricamento per i tuoi utenti fino al completamento del Future.
Personalizzazione dello Stato di Caricamento
Puoi personalizzare l'aspetto dello stato di caricamento usando il parametro loadingStyle.
Stile di Caricamento Normale
Usa LoadingStyle.normal() per mostrare un widget di caricamento standard. Puoi opzionalmente fornire un widget figlio personalizzato:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.normal(
child: Text("Loading..."), // custom loading widget
),
)
Se non viene fornito alcun widget figlio, verra' mostrato il loader predefinito dell'app Nylo Website.
Stile di Caricamento Skeletonizer
Usa LoadingStyle.skeletonizer() per mostrare un effetto di caricamento a scheletro. Questo e' ottimo per mostrare un'interfaccia segnaposto che corrisponde al layout del tuo contenuto:
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
),
)
Effetti scheletro disponibili:
SkeletonizerEffect.shimmer- Effetto shimmer animato (predefinito)SkeletonizerEffect.pulse- Effetto animazione a pulsazioneSkeletonizerEffect.solid- Effetto colore solido
Nessuno Stile di Caricamento
Usa LoadingStyle.none() per nascondere completamente l'indicatore di caricamento:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
loadingStyle: LoadingStyle.none(),
)
Gestione degli Errori
Puoi gestire gli errori dal tuo Future usando il callback onError:
FutureWidget<String>(
future: _fetchData(),
child: (context, data) {
return Text(data!);
},
onError: (AsyncSnapshot snapshot) {
print(snapshot.error.toString());
return Text("Something went wrong");
},
)
Se non viene fornito alcun callback onError e si verifica un errore, verra' mostrato un SizedBox.shrink() vuoto.
Parametri
| Parametro | Tipo | Descrizione |
|---|---|---|
future |
Future<T>? |
Il Future da attendere |
child |
Widget Function(BuildContext, T?) |
Funzione builder chiamata quando il Future e' completato |
loadingStyle |
LoadingStyle? |
Personalizza l'indicatore di caricamento |
onError |
Widget Function(AsyncSnapshot)? |
Funzione builder chiamata quando il Future ha un errore |