【发布时间】:2020-06-01 03:31:39
【问题描述】:
我正在尝试将 Future 类型的 Future Provider 的输出调用到列表视图构建器中。我认为我非常接近,因为我能够呈现最终的列表视图本身,但是,在此之前,会出现一个错误,并在完成 Future 后迅速被列表视图替换。我相信我的实现可能有问题。
这是我到目前为止所得到的(这些是我实际代码的派生,那里有太多不必要的东西,我试图简化它):
class TempProvider extends ChangeNotifier(){
List<Widget> _list = <Widget>[];
List<Widget get list => _list;
Future<List<Widget>> getList() async{
List _result = await db....
_result.forEach((_item){
addToList(_item);
});
}
addToList(Widget widget){
_list.add(widget);
notifyListeners();
}
}
class Parent extends StatelessWidget{
@override
Widget build(BuildContext context) {
return FutureProvider(
create: (context) => TempProvider().getList(),
child: Child(),
);
}
}
class Child extends StatelessWidget{
@override
Widget build(BuildContext context) {
var futureProvider = Provider.of<List<Widget>>(context);
return FutureBuilder(
initialData: <Widget>[],
future: TempProvider().getList(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.none &&
snapshot.hasData == true) {
return ListView.builder(
itemCount: futureProvider.length,
itemBuilder: (BuildContext context, int index) {
return futureProvider[index];
},
);
} else {
return Text('ALAWS');
}
},
);
}
}
所以基本上,我的 Future 的输出将是一个小部件列表,这些小部件将填充我正在尝试构建的列表视图。虽然我最终能够呈现列表视图,但下面的错误出现在两者之间:
The getter 'length' was called on null.
Receiver: null
Tried calling: length
The relevant error-causing widget was
FutureBuilder<List<Widget>>
希望有人可以帮助解决这个问题,或者至少举一个更好的例子。
非常感谢!
【问题讨论】:
-
我认为你应该得到 snapshot.data 的长度而不是 futureProvider 的长度。所以基本上放“itemCount:snapshot.data.length”。
标签: flutter dart flutter-provider