我想设置 ListView.builder 的初始滚动位置,我希望列表从底部开始0.0
如果我设置reverse
当然,在 listView 上,我将初始滚动位置设置为所需的位置,但我需要的是让最后一个孩子位于底部,是一个聊天应用程序。
这是列表生成器,MessageItem()
是聊天消息
ListView.builder(
shrinkWrap: true,
controller: _scrollController,
itemCount: snapshot.data.documents.length,
padding: EdgeInsets.all(10.0),
itemBuilder: (BuildContext context, int index) =>
MessageItem(
index: index,
document: snapshot.data.documents[index],
myId: myId));
这是当有人时我看到的动画send
消息
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 500),
curve: Curves.easeOut);
动画效果很好。
我想要的是当用户进入聊天室时列表滚动位置已经位于底部。
为了避免任何列表未附加滚动的错误,请在构建准备就绪后使用 WidgetsBinding 进行拉出。
void _scrollToBottom() {
if (_scrollController.hasClients) {
_scrollController.animateTo(_scrollController.position.maxScrollExtent,
duration: Duration(milliseconds: 300), curve: Curves.elasticOut);
} else {
Timer(Duration(milliseconds: 400), () => _scrollToBottom());
}
}
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) => _scrollToBottom());
{...} //rest of code;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)