水平 ListView.builder 上的 RefreshIndicator

时间:2021-04-26 07:55:35

标签: flutter listview refresh

我有一个水平的 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 没有显示,也没有重新加载...... 如何重新加载此列表?

1 个答案:

答案 0 :(得分:1)

你可以使用 ScrollController 来监听 scrollExtents

ScrollController _controller;

我们在 initState 方法中实例化它,方法如下:

@override void initState() {

 _controller = ScrollController();
super.initState();

}

然后我们将这个 _controller 分配给我们的 ListView。

 controller: _controller,

这样我们就将 ListView 与我们的 ScrollController 连接起来,我们只需要监听事件来确定我们想要什么。 监听事件

 @override
  void initState() {
    _controller = ScrollController();
    _controller.addListener(_scrollListener);
    super.initState();
  }

现在我们正在监听 Scroll 事件,但是我们如何知道滚动到达顶部还是底部。

我们只需要添加这些验证:

_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";
      });
    }
  }

要深入了解,您可以阅读更多here