我有一个可滚动的 ListView
,其中项目的数量可以动态变化。每当将新项目添加到列表末尾时,我想以编程方式将 ListView
滚动到末尾。 (例如,可以在末尾添加新消息的聊天消息列表)
我的猜测是我需要在我的 State
对象中创建一个 ScrollController
并将其手动传递给 ListView
构造函数,所以我以后可以在 Controller 上调用 animateTo()
/jumpTo()
方法。但是,由于我无法轻松确定最大滚动偏移量,因此似乎不可能简单地执行 scrollToEnd()
类型的操作(而我可以轻松传递 0.0
使其滚动到初始位置)。
有没有简单的方法来实现这一点?
使用 reverse: true
对我来说不是一个完美的解决方案,因为当 中只有少量项目时,我希望项目在顶部对齐ListView
视口(viewport)。
最佳答案
截图:
用动画滚动:
final ScrollController _controller = ScrollController(); // This is what you're looking for! void _scrollDown() { _controller.animateTo( _controller.position.maxScrollExtent, duration: Duration(seconds: 2), curve: Curves.fastOutSlowIn, ); } @override Widget build(BuildContext context) { return Scaffold( floatingActionButton: FloatingActionButton.small( onPressed: _scrollDown, child: Icon(Icons.arrow_downward), ), body: ListView.builder( controller: _controller, itemCount: 21, itemBuilder: (_, i) => ListTile(title: Text('Item $i')), ), ); }
无动画滚动:
将上面的
_scrollDown
方法替换为:void _scrollDown() { _controller.jumpTo(_controller.position.maxScrollExtent); }
关于flutter - 以编程方式滚动到 ListView 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485529/