我有一个可滚动的 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);
}
https://stackoverflow.com/questions/43485529/
相关文章:
android - Flutter Pub : Expected a key while parsi
flutter - 如何更改 CircularProgressIndicator 的颜色
android - Visual Studio Code - URI 目标不存在 'package:
flutter - 如何从我的 Flutter 代码中打开 Web 浏览器 (URL)?
flutter - 将数据传递给 StatefulWidget 并在 Flutter 中以它的状态访
firebase - 类型 'List