Listview 如何在Flatter中将列表视图滚动到底部

Listview 如何在Flatter中将列表视图滚动到底部,listview,flutter,dart,scroll,chat,Listview,Flutter,Dart,Scroll,Chat,我有一个包含列表视图生成器的颤振应用程序 聊天页面 我需要将页面滚动到页面末尾,直到最后一条消息?您需要创建一个scrollController并将其传递到ListView,然后运行如下代码: class SampleList extends StatefulWidget { @override _SampleListState createState() => _SampleListState(); } class _SampleListState extends State&

我有一个包含列表视图生成器的颤振应用程序 聊天页面
我需要将页面滚动到页面末尾,直到最后一条消息?

您需要创建一个scrollController并将其传递到ListView,然后运行如下代码:

class SampleList extends StatefulWidget {
  @override
  _SampleListState createState() => _SampleListState();
}

class _SampleListState extends State<SampleList> {
  ScrollController _scrollController;
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      controller: _scrollController,
      itemBuilder: (_, index) => ListTile(
        title: Text(
          index.toString(),
        ),
      ),
    );
  }

  void scrollToBottom() {
    final bottomOffset = _scrollController.position.maxScrollExtent;
    _scrollController.animateTo(
      bottomOffset,
      duration: Duration(milliseconds: 1000),
      curve: Curves.easeInOut,
    );
  }

  @override
  void initState() {
    _scrollController = ScrollController();
    super.initState();
  }

  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }
}

您需要创建一个scrollController并将其传递给ListView,然后运行如下代码:

class SampleList extends StatefulWidget {
  @override
  _SampleListState createState() => _SampleListState();
}

class _SampleListState extends State<SampleList> {
  ScrollController _scrollController;
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      controller: _scrollController,
      itemBuilder: (_, index) => ListTile(
        title: Text(
          index.toString(),
        ),
      ),
    );
  }

  void scrollToBottom() {
    final bottomOffset = _scrollController.position.maxScrollExtent;
    _scrollController.animateTo(
      bottomOffset,
      duration: Duration(milliseconds: 1000),
      curve: Curves.easeInOut,
    );
  }

  @override
  void initState() {
    _scrollController = ScrollController();
    super.initState();
  }

  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }
}

将reverse:true设置为ListView小部件将在底部显示最新的元素。有了它,您可以轻松地实现聊天时间表

ListView.builder(
  reverse: true,
  itemBuilder: (context, index) => _chatCell(),
)

将reverse:true设置为ListView小部件将在底部显示最新的元素。有了它,您可以轻松地实现聊天时间表

ListView.builder(
  reverse: true,
  itemBuilder: (context, index) => _chatCell(),
)

在initState方法中初始化ScrollController类的对象

记住:-1调用super.initState;在initState方法的顶部。 2 ListView应与滚动控制器的对象连接

WidgetsBinding.instance.addPostFrameCallback\u{ scrollController.jumpToscrollController.position.maxScrollExtent; };


然后,在构建方法的顶部添加上述代码。它将自动滚动到消息列表视图的底部。

在initState方法中初始化ScrollController类的对象

记住:-1调用super.initState;在initState方法的顶部。 2 ListView应与滚动控制器的对象连接

WidgetsBinding.instance.addPostFrameCallback\u{ scrollController.jumpToscrollController.position.maxScrollExtent; };


然后,在构建方法的顶部添加上述代码。它将自动滚动到消息列表视图的底部。

呼叫的位置scrollToBottom@Husamuldeen这取决于你。无论何时加载新消息或任何对您有意义的内容,您都可以调用它screen@Husamuldeen你必须在小部件布置好之后调用这个方法。请为我解释一下,怎么做,在哪里调用scrollToBottom@Husamuldeen这取决于你。无论何时加载新消息或任何对您有意义的内容,您都可以调用它screen@Husamuldeen你必须在小部件布置好之后调用这个方法。请为我解释一下,怎么做这回答了你的问题吗?这回答了你的问题吗?我不想反转它,我想向下滚动它,在它工作之前的答案当我使用timer I initState时,我需要对每一条新消息都这样做。@Husamuldeen你真的尝试过这个吗?它实际上就像一个符咒。我不想反转它,我想向下滚动它,在它工作之前的答案。当我使用计时器时,我需要初始化状态,我需要对每一条新消息都这样做。@Husamuldeen你真的尝试过这个吗?它实际上就像一个符咒。