Как обновить другой виджет после получения данных future builder

#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, отсюда и ошибка. Я пока не нахожу решения этой проблемы