gpt4 book ai didi

flutter - 通过 future 提供者值(value)查看Flutter列表

转载 作者:行者123 更新时间:2023-12-03 04:25:04 26 4
gpt4 key购买 nike

我试图将类型为Future>的Future Provider的输出调用到List View构建器中。我认为我已经很接近了,因为我能够渲染最终的列表 View 本身,但是在此之前,会出现一个错误,并且在完成Future后会很快被列表 View 替换。我认为我的实现可能存在问题。

到目前为止,这是我所得到的(这些是我实际代码的派生产品,不必要的事情太多了,我试图简化一下):

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的输出将是一个小部件列表,这些小部件将填充我尝试构建的列表 View 。尽管我最终可以渲染列表 View ,但以下两者之间会出现以下错误:
The getter 'length' was called on null.
Receiver: null
Tried calling: length
The relevant error-causing widget was
FutureBuilder<List<Widget>>

希望有人可以对此提供帮助,或者至少给出一个更好的例子。

非常感谢!

最佳答案

不能确定,但​​是这是因为您的窗口小部件可能正在构建两次,并且最初的futureProvider为null,而第二次它具有一定的值(value)。

解决方法:

替换为:

futureProvider.length

有了这个:
futureProvider?.length ?? 0

上面的代码做什么?
  • futureProvider?.length:如果futureProvider为null,请不要访问它的长度。
  • 现在返回的值将为null。
  • ?? 0:如果返回的值为null,则返回0;

  • 您需要考虑以下事项并编辑代码。
  • 首先,futureProvider不应为null。
  • 使用FutureBuilder时为什么不使用snaphot.data
  • 关于flutter - 通过 future 提供者值(value)查看Flutter列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258410/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com