FutureBuilder em Flutter
Olá, colega entusiasta do flutter!
Hoje vamos aprender mais sobre como mostrar dados assíncronos corretamente Future<T>no FutureBuilderflutter.
Todos nós sabemos, Future<T>é incrível. Isso nos permite fazer um trabalho assíncrono, como buscar dados do servidor sem pensar em Threads tudo Deadlocks.
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();
},
);
Devemos ter cuidado ao fornecer Future<T>Como FutureBuilder.o FutureBuildernormalmente estará dentro do buildmétodo e sabemos que buildo método pode ser chamado várias vezes, não devemos criar o Future<T>dentro dele.
Se criarmos Future<T>dentro builddo método, ele será criado novamente sempre que buildfor chamado. Provavelmente não é o que você quer.
Então, onde criarfutures?
O local ideal para criar ou atualizar um futuro são os métodos de ciclo de vida de um widget como initState, didUpdateWidget, didChangeDependenciesetc.build.
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();
},
);
}
}
Codificação feliz!!





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)