本文介绍了水平ListView.Builder上的刷新指示器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个水平ListView.Builder小工具,我希望在将其向左拖动时使用ReflresIndicator进行刷新。

                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 +
                                        " (" +
正在初始加载列表,但没有显示刷新指示器,也不会重新加载...如何重新加载此列表?

推荐答案

您可以使用滚动控制器侦听ScrollExtents

ScrollController _controller;

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

@覆盖Void initState(){

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

}

然后将THIS_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

这篇关于水平ListView.Builder上的刷新指示器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 00:54