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