我正在尝试列出一个基本上是日志屏幕的列表。也就是说,我需要列表始终保持滚动到底部。
这怎么办?
答案 0 :(得分:1)
我可以使用Timer
来完成这项工作,但可能应该有更好的方法来做到这一点。
我的解决方法是:
ScrollController()
并将其附加到listView:ListView.builder(
controller: _scrollController,
itemCount: _logLines.values.length,
itemBuilder: (context, index) => _getLogLine(index),
)
initState
方法并在其中设置一个计时器,例如: @override
void initState() {
super.initState();
Timer.periodic(Duration(milliseconds: 100), (timer) {
if (mounted) {
_scrollToBottom();
} else {
timer.cancel();
}
});
}
定义方法_scrollToBottom()
,该方法调用:
_scrollController.jumpTo(_scrollController.position.maxScrollExtent);
答案 1 :(得分:1)
在ListView
小部件上设置reverse: true
并反转子级列表。
ListView(
// Start scrolled to the bottom by default and stay there.
reverse: true,
children: widget.children.reversed.toList(growable: false),
),
我是从上面Günter的评论中得到的。谢谢!
答案 2 :(得分:1)
我发现WidgetsBinding.instance.addPostFrameCallback
在许多情况下非常有用,因为yiou需要一些后期构建处理。在这种情况下,它解决了以下问题。
(1)定义ScrollController
final ScrollController _sc = ScrollController();
(2)在ListView构建器中添加以下语句:
WidgetsBinding.instance.addPostFrameCallback((_) => {_sc.jumpTo(sc.position.maxScrollExtent)});
(3)在列表视图参数中包含参数controller:_sc,
。
我还在构建记录器查看器。就像冠军一样。