FutureBuilder in Flutter
Ciao, collega appassionato di flutter!
Oggi impareremo di più su come mostrare correttamente i dati asincroni da Future<T>con FutureBuilderin flutter.
Lo sappiamo tutti, Future<T>è fantastico. Ci consente di svolgere un lavoro asincrono come il recupero dei dati dal server senza pensarci Threads e Deadlockstutto.
Future<Model> _doCalculation() async {
// do calculation / computation asynchronously.
....
return Model;
}
FutureBuilder<Model>(
future: _doCalculationFuture,
builder: (BuildContext context, AsyncSnapshot<Model> snapshot) {
if (snapshot.hasData) {
return DataWidget(snapshot.requireData);
} else if (snapshot.hasError) {
return ErrorWidget();
} else {
return CircularProgressIndicator();
}
return const SizedBox();
},
);
Dobbiamo stare attenti mentre forniamo Future<T>in FutureBuilder.Poiché FutureBuildertipicamente sarà all'interno del buildmetodo e sappiamo che buildil metodo può essere chiamato più volte, non dobbiamo creare l' Future<T>interno di esso.
Se creiamo il metodo Future<T>interno build, verrà creato di nuovo ogni volta che buildviene chiamato. Probabilmente non è quello che vuoi.
Quindi, dove crearefutures?
Il luogo ideale per creare o aggiornare un futuro sono i metodi del ciclo di vita di un widget come initState, didUpdateWidget, didChangeDependenciesecc. o qualsiasi luogo diverso dabuild.
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
late Future<Model> _doCalculationFuture;
@override
void initState() {
super.initState();
_doCalculationFuture = _doCalculation();
}
Future<Model> _doCalculation() async {
return await Future<Model>.delayed(
const Duration(seconds: 2),
() => Model(),
);
}
@override
Widget build(BuildContext context) {
return FutureBuilder<Model>(
future: _doCalculationFuture,
builder: (BuildContext context, AsyncSnapshot<Model> snapshot) {
if (snapshot.hasData) {
return DataWidget(snapshot.requireData);
} else if (snapshot.hasError) {
return ErrorWidget();
} else {
return CircularProgressIndicator();
}
return const SizedBox();
},
);
}
}
Buona programmazione!!

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































