FutureBuilder во Flutter
Привет, коллега-любитель флаттера!
Сегодня мы узнаем больше о том, как правильно отображать асинхронные данные из Future<T>with FutureBuilderво флаттере.
Мы все знаем, Future<T>это здорово. Это позволило нам выполнять асинхронную работу, например, извлекать данные с сервера, не задумываясь об Threads этом 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();
},
);
Мы должны быть осторожны при предоставлении. Future<T>Так FutureBuilder.как FutureBuilderwill обычно находится внутри метода build, и мы знаем, buildчто метод может вызываться несколько раз, мы не должны создавать Future<T>внутри него.
Если мы создадим Future<T>внутренний buildметод, он будет создаваться снова при каждом buildвызове. Вероятно, это не то, что вы хотите.
Итак, где создатьfutures?
Идеальное место для создания или обновления будущего — это методы жизненного цикла виджета, такого как и initState, didUpdateWidget, didChangeDependenciesт. д., или любое другое место, кроме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();
},
);
}
}
Удачного кодирования!!

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































