Android探路先锋之Flutter (滑动监听+加载更多功能实现)

ListView官网目前只介绍了一个下拉刷新功能,但上拉加载更多貌似没有甚至监听都没找到,相信以后会有大侠陆续给出自己的方案的,就像Android一样如雨后春笋,势不可挡。

在百度谷歌上目前都没有多少相关的解决方案

即使是flutter的一手资料也只给出了动态更新的方案。

看来只能靠自己了  不废话直接上源码  核心即

所摸点长度 +滑动距离  = IistView的长度  说明到达底部

 
 
var scrollController = new ScrollController();
double downY = 0.0;
double lastDownY = 0.0;
double lastListLength = 0.0;
new Listener(
                  onPointerDown: (event) {
                    print("onPointerDown=====${event.down}");
                    print("onPointerDown=====${event.delta}");
                    print("onPointerDown=====${event.kind}");
                    var position = event.position.distance;
                    print("onPointerDown=====${position}");
                    downY = position;
                    print("================onPointerDown================");
                  },
                  onPointerMove: (event) {
                    var position = event.position.distance;
//                    print("onPointerMove=====${event.position}");
//                    print("onPointerMove=====${event.delta}");
                    var detal = position - lastDownY;
                    if (detal > 0) {
                      print("================向下移动================");
                    } else {
                      //所摸点长度 +滑动距离  = IistView的长度  说明到达底部
                      print("================向上移动================");
                      print(
                          "scrollController==滑动距离=======${(position - downY)}");
                      var scrollExtent = scrollController.position
                          .maxScrollExtent;
                      print(
                          "scrollController==ListView最大长度===${scrollExtent}");
                      print("scrollController==所摸点长度===${scrollController
                          .offset}");
                      print("scrollController==所摸点离屏幕距离===${position}");
                      var result = scrollController.offset +
                          (position - downY).abs();
                      print("scrollController==result==$result");
                      if (result >= scrollExtent) {
                        print("scrollController====到达底部");
                        lastListLength = scrollExtent;
                        loadMore(scrollExtent);
                      }
                    }
                    lastDownY = position;
                  },
                  onPointerCancel: (event) {
                    print("onPointerCancel=====${event.position}");
                  },
                  onPointerUp: (event) {
//                    loadMore();
                    print("onPointerUp=====${event.position}");
                    print("onPointerUp=====${event.delta}");
                    print("onPointerDown=====${event.down}");
                  },
                  child: new ListView.builder(
                    //primary: false,
                    physics: const ClampingScrollPhysics(),
                    controller: scrollController,
                    itemBuilder: (BuildContext context, int index) {
                      var data = new GankBean.fromJson(datas[index]);
                      return new NewsItemView(
                        data.desc,
                        data.url,
                        data.who,
                        data.publishedAt,
                        data.type,
                      );
                    },
                    itemCount: datas == null ? 0 : datas.length,
                  )
              );

Github源文件:https://github.com/goodluckforme/flutter_try/blob/master/lib/app/home/NicePage.dart

源码:Android探路先锋之Flutter Gank版本

欢迎strat哦。

猜你喜欢

转载自blog.csdn.net/qq_20330595/article/details/80045816