Flutter列表查看未来提供商价值



我正试图将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>> 

希望有人能帮上忙,或者至少举一个更好的例子。

非常感谢!

不确定,但发生这种情况是因为您的小部件可能要构建两次,第一次futureProvider为null,第二次它有一些值

解决方法:

替换此:

futureProvider.length

这样:

futureProvider?.length ?? 0

以上代码的作用是什么

  1. futureProvider?.length:如果futureProvider为null,则不要访问它的长度
  2. 现在返回的值将为null
  3. ?? 0:如果返回值为空,则返回0

您需要考虑以下事项并编辑代码

  1. 首先,futureProvider不应为null
  2. 为什么在使用FutureBuilder时不使用snaphot.data

所以我一直在做我的研究,并在下面的文章中展示了一个基于我需要的明确实现:

Flutter提供商示例-Codetober这篇文章要归功于道格拉斯·托伯。再次感谢卡尔佩什的快速帮助!

最新更新