【发布时间】:2019-12-21 13:30:12
【问题描述】:
我想设置 ListView.builder 的初始滚动位置,我希望列表从底部开始0.0
如果我在 listView 上设置reverse,我当然会得到所需的初始滚动位置,但我需要的是让最后一个孩子位于底部,这是一个聊天应用程序。
这是列表生成器,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);
动画效果不错。
我想要的是当用户进入聊天室时列表滚动位置已经在底部。
【问题讨论】:
-
使用 0 毫秒的持续时间会起作用吗?
-
为什么不在小部件的 initState 中设置滚动控制器的初始位置。这样在初始小部件构建中它会滚动到底部位置。
-
@E.Bradford 好吧,这只是当用户按下“发送消息”按钮时发生的动画,它有效。我尝试将动画代码放在
initState()上,但它会抛出错误:``` I/flutter (15097): ScrollController not attach to any scroll views。 I/flutter (15097): 'package:flutter/src/widgets/scroll_controller.dart': I/flutter (15097): 断言失败: line 110 pos 12: '_positions.isNotEmpty' ``` 我应该把它放在哪里可以一开始就触发吗? -
@Salma。试过了,我得到一个错误。
-
在初始化 scrollController 时将其设置为 0.0 >>> _scrollController = new ScrollController( initialScrollOffset: 0.0, keepScrollOffset: true, );
标签: listview flutter dart chat native