Назад к вопросам
Junior
140
questionbank
Что такое FutureBuilder в Flutter?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Виджет для построения интерфейса на основе асинхронных данных, полученных из Future.
Основные параметры:
future: ЭкземплярFuture, за которым следует наблюдать.initialData: Данные, которые отображаются до завершенияfuture.builder: Функция (AsyncWidgetBuilder), которая вызывается при каждом изменении состоянияfutureи получаетBuildContextиAsyncSnapshot.
Состояния AsyncSnapshot:
ConnectionState.none: Future еще не начал выполняться.ConnectionState.waiting: Future выполняется.ConnectionState.active: (Редко для Future) Future вернул промежуточные данные.ConnectionState.done: Future завершен (успешно или с ошибкой).
Пример использования:
// Предположим, у нас есть функция, которая возвращает Future<String>
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2)); // Имитация сетевого запроса
return "Данные загружены!";
}
// ... в build методе виджета:
@override
Widget build(BuildContext context) {
return FutureBuilder<String>(
future: fetchData(), // Наш Future
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
// Отображаем индикатор загрузки, пока Future выполняется
return CircularProgressIndicator();
} else if (snapshot.hasError) {
// Отображаем сообщение об ошибке, если Future завершился с ошибкой
return Text('Ошибка: ${snapshot.error}');
} else {
// Отображаем данные, если Future успешно завершен
return Text('Результат: ${snapshot.data}');
}
},
);
}
Преимущества:
- Упрощает работу с асинхронными операциями в UI.
- Автоматически перестраивает UI при изменении состояния
Future. - Четко разделяет логику загрузки данных и логику построения UI.
Недостатки:
- Может приводить к излишним перерисовкам, если
Futureсоздается внутри методаbuild. Рекомендуется создаватьFutureодин раз (например, вinitState).