#dart #flutter
#dart #flutter
Вопрос:
Я хочу обновить виджет заголовка после того, как future builder, приведенный ниже, получит данные из базы данных.
Рассмотрим этот упрощенный код
Column (
children: [
Text('Data is loading'), // I want to changed it into `Data is loaded`
FutureBuilder(
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Center(
child: CircularProgressIndicator(),
);
}
if (!isCacheInitialized) {
_loadDB(); // get data from db
isCacheInitialized = true;
}
return ListView.builder
},
future: storage.ready,
)
]
)
Что я уже пробовал, но потерпел неудачу
- Вызов
setState
после_loadDB
результат ошибки
setState() вызывается во время сборки.
Итак, как изменить текст Data is loading
на Data is loaded
после FutureBuilder
получения данных?
Ответ №1:
Вместо этого вызовите setState внутри функции _loadDB(). Итак, прежде чем функция _loadDB() перейдет к сборке виджета, она установила бы нужные вам данные.
Комментарии:
1.
setState
не следует вызывать внутри FutureBuilder, когда я пытаюсь это сделать, потому что это вызовет бесконечный цикл builder, отсюда и ошибка. Я пока не нахожу решения этой проблемы