如何在 Flutter ListView
、GridView
、SliverList 等中获取当前滚动偏移量?
- 如果您在滚动视图中,请使用
Scrollable.of(context).position.pixels
. - 如果你在外面,你可能想交一个
ScrollController
作为滚动视图的控制器参数,然后你可以阅读controller.offset
。 - 或者,将滚动通知与
NotificationListener
一起使用。
这是在Flutter Gitter上问的,并回答:https://gitter.im/flutter/flutter?at=591243f18a05641b1167be0e
对于其他人,寻找代码实现,您可以使用这样的ScrollController
:
-
使用
NotificationListener
:NotificationListener<ScrollNotification>( onNotification: (scrollNotification) { print(scrollNotification.metrics.pixels); // <-- This is it. return false; }, child: ListView.builder( itemCount: 200, itemBuilder: (c, i) => Text('Item $i'), ), )
-
使用
ScrollController.offset
final ScrollController _controller = ScrollController(); @override void initState() { super.initState(); _controller.addListener(() { print(_controller.offset); // <-- This is it. }); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: ListView.builder( controller: _controller, itemCount: 200, itemBuilder: (c, i) => Text('Item $i'), ), ); }
另一种方法是使用NotificationListener
NotificationListener(
child: ListView(
controller: _scrollController,
children: ...
),
onNotification: (notification) {
if (notification is ScrollEndNotification) {
print(_scrollController.position.pixels);
}
return false;
},
)