Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 刷新水平ListView.builder上的指示器_Flutter_Listview_Refresh - Fatal编程技术网

Flutter 刷新水平ListView.builder上的指示器

Flutter 刷新水平ListView.builder上的指示器,flutter,listview,refresh,Flutter,Listview,Refresh,我有一个水平ListView.builder小部件,我想在将其向左拉时用RefreshIndicator刷新它 FutureBuilder( future: _initGetTopX(), builder: (context, wikiSnapshot) { if (ConnectionState.active != null &&a

我有一个水平ListView.builder小部件,我想在将其向左拉时用RefreshIndicator刷新它

                FutureBuilder(
                    future: _initGetTopX(),
                    builder: (context, wikiSnapshot) {
                      if (ConnectionState.active != null &&
                          !wikiSnapshot.hasData) {
                        return Center(child: CircularProgressIndicator());
                      }

                      if (ConnectionState.done != null &&
                          wikiSnapshot.hasError) {
                        return Center(child: Text(wikiSnapshot.error));
                      }

                      return Container(
                        height: 220,
                        child: RefreshIndicator(
                          onRefresh: _refreshInitGetTopX,
                          child: ListView.builder(
                            scrollDirection: Axis.horizontal,
                            physics: const AlwaysScrollableScrollPhysics(),
                            itemCount: _getTopXList.length,
                            itemBuilder: (context, index) {
                              return Row(
                                children: [
                                  MainImageThumb(
                                    myTitle: _getTopXList[index].title +
                                        " (" +
列表正在初始加载,但RefreshIndicator没有显示,也没有重新加载。。。
如何重新加载此列表?

您可以使用ScrollController侦听scrollExtents

ScrollController _controller;
我们在initState方法中以以下方式实例化它:

@凌驾 void initState(){

}

然后我们将这个_控制器分配给我们的ListView

 controller: _controller,
有了它,我们就可以将ListView与ScrollController连接起来,我们只需要监听事件来确定我们想要什么。 倾听事件

 @override
  void initState() {
    _controller = ScrollController();
    _controller.addListener(_scrollListener);
    super.initState();
  }
现在我们正在收听滚动事件,但是我们如何知道滚动是否到达顶部或底部

我们只需添加以下验证:

_scrollListener() {
    if (_controller.offset >= _controller.position.maxScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the end right";
      });
    }
    if (_controller.offset <= _controller.position.minScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the end left";
      });
    }
  }
\u scrollListener(){
如果(_controller.offset>=_controller.position.maxScrollExtent&&
!\u控制器。位置。超出范围){
设置状态(){
message=“到达右端”;
});
}

如果(_controller.offset我认为
RefreshIndicator
不支持水平滚动。
_scrollListener() {
    if (_controller.offset >= _controller.position.maxScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the end right";
      });
    }
    if (_controller.offset <= _controller.position.minScrollExtent &&
        !_controller.position.outOfRange) {
      setState(() {
        message = "reach the end left";
      });
    }
  }