scroll_to_index 是一个用于在 Flutter 中实现列表滚动到指定索引的库

依赖

scroll_to_index: ^3.0.1 #滑动位置

使用

class ScrollToIndexExample extends StatefulWidget {
  @override
  _ScrollToIndexExampleState createState() => _ScrollToIndexExampleState();
}

class _ScrollToIndexExampleState extends State<ScrollToIndexExample> {
  late AutoScrollController _controller; // 自动滚动控制器
  static const int ITEM_COUNT = 100; // 列表项总数

  @override
  void initState() {
    super.initState();
    _controller = AutoScrollController(); // 初始化控制器
  }

  @override
  void dispose() {
    _controller.dispose(); // 销毁控制器
    super.dispose();
  }

  // 滚动到指定索引
  Future<void> scrollToIndex(int index) async {
    await _controller.scrollToIndex(index,
        preferPosition:
            AutoScrollPosition.middle, // 目标对齐的位置,begin 左侧  middle居中 end末尾
        duration: Duration(milliseconds: 1000)
        // Duration.zero // 不使用动画,立即滚动

        ); // 滚动到指定位置
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        ElevatedButton(
          onPressed: () {
            scrollToIndex(10); // 滚动到第 10 项
          },
          child: Text('Scroll to Index 10'),
        ),
        Expanded(
          child: ListView.builder(
            controller: _controller, // 使用控制器
            itemCount: 50,
            itemBuilder: (context, index) {
              return AutoScrollTag(
                key: ValueKey(index), // 为每个列表项提供唯一键
                controller: _controller,
                index: index,
                child: Container(
                  height: 50,
                  color: index.isEven ? Colors.blue[100] : Colors.blue[200],
                  child: Center(
                      child: ElevatedButton(
                          onPressed: () {
                            scrollToIndex(index); // 滚动到第 10 项
                          },
                          child: Text('Item $index'))),
                ),
              );
            },
          ),
        ),
      ],
    );
  }
}

 

posted on 2024-08-10 17:26  鲤斌  阅读(159)  评论(0编辑  收藏  举报