Лучший подход для установки типа в FutureBuilder?

#flutter #dart

Вопрос:

Каков наилучший подход к настройке типа snapshot.data внутри a FutureBuilder ? Например, в приведенном ниже коде я ожидаю, что мое будущее вернет список, но snapshot.data.length нельзя вызвать, так как мой код не знает, что это должен быть список, он знает только, что это объект типа Object? .

 FutureBuilder(
  future: locator<UniversityApi>().getUniversities
  builder: (context, snapshot) => ListView.builder(
    itemBuilder: snapshot.data.length, //this line does not work
  ),
),
...

 

Ответ №1:

Вы можете определить тип моментального снимка следующим образом:

 FutureBuilder<List<dynamic>>( // replace dynamic with your type
  future: locator<UniversityApi>().getUniversities
  builder: (context, snapshot) => ListView.builder(
    itemBuilder: snapshot.data.length, //this line should work now
  ),
),
...
 

Просто будьте осторожны, перед использованием snapshot.data.length вы должны убедиться, что снимок содержит какие-либо данные:

 FutureBuilder<List<dynamic>>( // replace dynamic with your type
  future: locator<UniversityApi>().getUniversities
  builder: (context, snapshot) {
    if (snapshot.hasData) {
       return ListView.builder(
         itemBuilder: snapshot.data.length,
       );
    }

    return SizedBox(); // Return any placeholder widget
  }
),
...