Конструктор предметов не запускается в Futurbuilder Flutter
Scaffold(body: FutureBuilder(
future: fetchTracks(),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.hasData)
{
ListView.builder(
scrollDirection: Axis.vertical,
itemExtent: 130.0,
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: trackes.length,
itemBuilder: (BuildContext context, int index) {
print("test");
return makeCard(snapshot.data[index]);
},
).build(context);
}
else
{
return Center(child: new CircularProgressIndicator());
}
} ));
Когда я вызываю эту сборку Scaffold Future, я буду вызывать мою будущую функцию fetchTracks() и получать данные в моментальном снимке, но он не входит в функцию itemBuilder. Итак, futurebuilder вернет NULL. Пожалуйста, помогите мне решить. И заранее спасибо
2 ответа
Решение
Вам не хватает return
перед ListView.builder
. Если вы его не вернете, он не построит.
FutureBuilder имеет разные состояния подключения моментальных снимков, которые вы должны обрабатывать. Данные в потоке недоступны до тех пор, пока ConnectionState не станет равным done, а hasData не станет равным true.
_loadData(context)
{
showModalBottomSheet(
context: context,
builder: (BuildContext bc){
return FutureBuilder(
future: fetchTracks(),
builder: (BuildContext context, AsyncSnapshot<List<MyClass>> snapshot){
if (snapshot.connectionState!=ConnectionState.done)
{
return PleaseWaitWidget();
}
else if(snapshot.hasError)
{
DialogCaller.showErrorDialog(context,"future builder has an error").then((value){});
}
else if (snapshot.connectionState==ConnectionState.done)
{
if(snapshot.hasData){
List<Widget> list = snapshot.data.map((MyClass myClass){
return Card(
child:Wrap(children:<Widget>[
Row(children: [Text(myClass.field1)],),
]));}).toList();
return list;
}
}
});
});
}