本文介绍了水平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上的刷新指示器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!