FutureBuilder en Flutter
¡Hola, compañero entusiasta del aleteo!
Hoy vamos a aprender más sobre cómo mostrar datos asíncronos correctamente desde Future<T>Flutter FutureBuilder.
Todos lo sabemos, Future<T>es impresionante. Nos permitió hacer un trabajo asincrónico como obtener datos del servidor sin pensar Threads en Deadlocksnada.
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();
},
);
Debemos tener cuidado al proporcionar Future<T>en FutureBuilder.Como FutureBuildernormalmente estará dentro del buildmétodo y sabemos que buildel método se puede llamar varias veces, no debemos crear el Future<T>dentro de él.
Si creamos un método Future<T>interno build, se creará nuevamente cada vez que buildse llame. Probablemente no sea lo que quieres.
Entonces, dónde crearfutures?
El lugar ideal para crear o actualizar un futuro son los métodos del ciclo de vida de un widget como initState, didUpdateWidget, didChangeDependenciesetc. o cualquier otro lugar que no seabuild.
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();
},
);
}
}
¡Feliz codificación!

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































