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