如何获取 Flutter ListView
、GridView
、 SliverList` 等内部的当前滚动偏移量?
问问题
21409 次
3 回答
23
- 如果您在滚动视图中,请使用
Scrollable.of(context).position.pixels
. - 如果您在外面,您可能想将 a
ScrollController
作为滚动视图的控制器参数提交,然后您可以阅读controller.offset
. - 或者,将滚动通知与
NotificationListener
.
这是在 Flutter Gitter 上提出的,并回答: https ://gitter.im/flutter/flutter?at=591243f18a05641b1167be0e
于 2017-05-09T22:58:44.283 回答
19
对于其他人,寻找代码实现,你可以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'), ), ); }
于 2019-01-19T17:25:53.667 回答
0
另一种方法是NotificationListener
NotificationListener(
child: ListView(
controller: _scrollController,
children: ...
),
onNotification: (notification) {
if (notification is ScrollEndNotification) {
print(_scrollController.position.pixels);
}
return false;
},
)
于 2021-12-05T18:46:23.297 回答