Выбор ответа Junior Производительность спрашивают часто обновлено
Flutter: FutureBuilder с future в build
Вопрос
Что не так с этим кодом?
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: api.loadProfile(),
builder: (context, snap) => snap.hasData
? Text(snap.data!.name)
: const CircularProgressIndicator(),
);
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Запрос уходит на каждом перестроении; Future создают в initState. build вызывается часто, и каждый раз создаётся новый Future: FutureBuilder видит другой объект, подписывается заново и показывает загрузку.
Варианты ответа
- Ничего:
FutureBuilderсам кеширует результат по типу и повторно не запрашивает - Запрос уходит на каждом перестроении; Future создают в
initStateправильный ответ FutureBuilderнельзя использовать вStatelessWidget, только вStatefulWidget- Нужно добавить
awaitпередapi.loadProfile(), иначе данные не придут
Разбор
build вызывается часто, и каждый раз создаётся новый Future: FutureBuilder видит другой объект, подписывается заново и показывает загрузку. Future создают один раз (в initState или в стейт-менеджере) и передают готовым. Кеширования по типу нет, StatelessWidget тут ни при чём, а await в build невозможен.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.