Listview 连接状态总是在等待

Listview 连接状态总是在等待,listview,flutter,dart,Listview,Flutter,Dart,为什么连接状态从第b页返回时总是处于等待中 第A页 @override void initState() { super.initState(); Future.delayed(Duration.zero, () { _bloc.getList(context); }); } @override Widget build(BuildContext context) { return Scaffold( appB

为什么
连接状态从第b页返回时总是处于等待中

第A页

@override
  void initState() {
    super.initState();
      Future.delayed(Duration.zero, () {
        _bloc.getList(context);  
    });
  }

@override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Title'),
        ),
        body: WillPopScope(
          child: RefreshIndicator(
              key: _refreshIndicatorKey,
              onRefresh: _refresh,
              child: Container(
                  child: StreamBuilder<List<ABC>>(
                      stream: _bloc.abcStream,
                      builder: (context, snapshot) {
                        switch (snapshot.connectionState) {
                          case ConnectionState.waiting:
                            return Center(
                              child: Image.asset(
                                'assets/loading.gif',
                                width: 200.0,
                                height: 200.0,
                              ),
                            );
                            break;

                          case ConnectionState.active:
                            if (snapshot.data.isEmpty) {
                              return Container(
                                child: Text('empty'),
                              );
                            } else {
                              return ListView.builder(
                                 .......
                            }
                            break;
                          default:
                            return Text("Error");
                        }
                      }))),
          onWillPop: () {
            Navigator.of(context).pop();
          },
        ),
        floatingActionButton: new FloatingActionButton(
            elevation: 0.0,
            child: new Icon(Icons.add),
            onPressed: () {
               Navigator.pushNamed(context, PageB.ROUTE).then((onValue) async{
                 _bloc.getList(context);   // call this function once it is back from pageB
                setState(() {});
              });
            }));
  }
@覆盖
void initState(){
super.initState();
未来。延迟(Duration.zero,(){
_bloc.getList(上下文);
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“标题”),
),
正文:Willposcope(
子:刷新指示器(
键:_refreshIndicatorKey,
onRefresh:\u refresh,
子:容器(
孩子:StreamBuilder(
流:_bloc.abcStream,
生成器:(上下文,快照){
交换机(快照.连接状态){
案例连接状态。正在等待:
返回中心(
子:Image.asset(
“assets/loading.gif”,
宽度:200.0,
高度:200.0,
),
);
打破
案例连接状态.active:
if(snapshot.data.isEmpty){
返回容器(
子项:文本('empty'),
);
}否则{
返回ListView.builder(
.......
}
打破
违约:
返回文本(“错误”);
}
}))),
onWillPop:(){
Navigator.of(context.pop();
},
),
floatingActionButton:新的floatingActionButton(
标高:0.0,
子:新图标(Icons.add),
已按下:(){
Navigator.pushNamed(context,PageB.ROUTE)。然后((onValue)异步{
_getList(context);//从pageB返回后调用此函数
setState((){});
});
}));
}

第一次加载页面A时,它将调用initState,列表将成功填充到listView。但是,如果我单击浮动操作按钮转到页面B,然后单击后退(
Navigator.pop(context,true);
),列表不会填充到listView。它始终处于等待状态(保持显示加载.gif).

如果要更新流本身,我认为不需要设置state。

这就是我解决问题的方法

didChangeDependencies
中添加
listen:false

  @override
  void didChangeDependencies() {
    _bloc = Provider.of<Bloc>(context, listen: false);
    super.didChangeDependencies();
  }
@覆盖
void didChangeDependencies(){
_bloc=Provider.of(上下文,侦听:false);
super.didChangeDependencies();
}

那么解决方案是什么呢?请发布一个最小的可复制代码。如果没有更多您正在使用的代码,很难判断这里发生了什么-您是否验证了a)_bloc.getList(context)实际上是在推送导航器之后被调用的;B)streambuilder实际上正在被调用,C)从流返回的列表实例是不同的列表,即使它只是最后一个列表的直接副本-如果它是同一个对象,可以想象它可能不会正确触发ListView的重建。但一个简单的代码示例会更有帮助。@rmtmckenzie我已经修复了。