Flutter:如何使列表始终滚动到底部?

时间:2018-11-26 14:28:56

标签: flutter

我正在尝试列出一个基本上是日志屏幕的列表。也就是说,我需要列表始终保持滚动到底部。

这怎么办?

3 个答案:

答案 0 :(得分:1)

我可以使用Timer来完成这项工作,但可能应该有更好的方法来做到这一点。 我的解决方法是:

  1. 定义一个ScrollController()并将其附加到listView:
ListView.builder(
      controller: _scrollController,
      itemCount: _logLines.values.length,
      itemBuilder: (context, index) => _getLogLine(index),
    )
  1. 覆盖页面initState方法并在其中设置一个计时器,例如:
 @override
  void initState() {
      super.initState();
      Timer.periodic(Duration(milliseconds: 100), (timer) {
        if (mounted) {
            _scrollToBottom();
        } else {
          timer.cancel();
        }
      });
    }
  1. 定义方法_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,

我还在构建记录器查看器。就像冠军一样。