最初加载所有数据后,是否可以使Flutter列表视图滚动到底部?我知道scrollController.jumpTo()逻辑,但是必须在某些事件处理程序中调用它,您如何在列表视图构建完成时调用此方法,以便在屏幕打开后立即滚动到底部?
嗯,我认为您在实现目标的正确道路上!
您应该尝试_controller.jumpTo()
并以编程方式触发该事件。
您可以创建一个计时器,并在500毫秒(半秒)后在其中调用_controller。
ScrollController _myController = ScrollController();
@override
Widget build(BuildContext context) {
// here we set the timer to call the event
Timer(Duration(milliseconds: 500), () => _myController.jumpTo(_myController.position.maxScrollExtent));
// add _myController to the ListView
return ListView.builder(
controller: _myController,
// itemCount: yourItemsCount,
// ...
)
}
也请检查此答案->Programmatically scrolling to the end of a ListView
还有这一个-> How to get full size of a ScrollController
他们使用SchedulerBinding.instance.addPostFrameCallback
,我认为这也是触发滚动条的好方法。
SchedulerBinding.instance.addPostFrameCallback((_) {
_myController.animateTo(
_myController.position.maxScrollExtent,
duration: const Duration(milliseconds: 500),
curve: Curves.easeOut,
);
});
UPDATE:
请尝试以下代码,无过渡,无可见跳转给我。
是前几段的结合。
请注意,如果行数增加,例如10000。
但是我认为您应该控制所显示消息的数量。
Widget build(BuildContext context) {
final items = List<String>.generate(50, (i) => "Item $i");
ScrollController _controller = ScrollController();
SchedulerBinding.instance.addPostFrameCallback((_) {
_controller.jumpTo(_controller.position.maxScrollExtent);
});
return Scaffold(
body: SafeArea(
child: ListView.builder(
controller: _controller,
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
),
));
}