ConnectionState始终在等待

时间:2019-12-03 14:20:30

标签: listview flutter dart

为什么connectionState pageB 回来时总是处于等待 ???

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(() {});
              });
            }));
  }

第一次加载页面A时,它将调用initState,并将列表成功填充到listView中。但是,如果我单击浮动操作按钮转到页面B,然后单击返回(Navigator.pop(context, true);),则列表不会填充到listView中。它总是在等待中(保持显示loading.gif)。

2 个答案:

答案 0 :(得分:0)

如果您要更新流本身,我认为不需要setState。

答案 1 :(得分:0)

这是我解决的方法。

listen : false中添加didChangeDependencies

  @override
  void didChangeDependencies() {
    _bloc = Provider.of<Bloc>(context, listen: false);
    super.didChangeDependencies();
  }