Flutter ListView、SliverList 等内的当前滚动偏移量



如何在 Flutter ListViewGridView、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;
  },
)

最新更新