Flutter ListView在构建时滚动到底部

问题描述 投票:0回答:1

最初加载所有数据后,是否可以使Flutter列表视图滚动到底部?我知道scrollController.jumpTo()逻辑,但是必须在某些事件处理程序中调用它,您如何在列表视图构建完成时调用此方法,以便在屏幕打开后立即滚动到底部?

listview flutter flutter-layout
1个回答
0
投票

嗯,我认为您在实现目标的正确道路上!

您应该尝试_controller.jumpTo()并以编程方式触发该事件。

您可以创建一个计时器,并在500毫秒(半秒)后在其中调用_controller。

ScrollController _myController = ScrollController();

@override
Widget build(BuildContext context) {

      // here we set the timer to call the event
      Timer(Duration(milliseconds: 500), () => _myController.jumpTo(_myController.position.maxScrollExtent));

      // add _myController to the ListView
      return ListView.builder(
         controller: _myController,
         // itemCount: yourItemsCount,
         // ...
      )
}

也请检查此答案->Programmatically scrolling to the end of a ListView

还有这一个-> How to get full size of a ScrollController

他们使用SchedulerBinding.instance.addPostFrameCallback,我认为这也是触发滚动条的好方法。

SchedulerBinding.instance.addPostFrameCallback((_) {
            _myController.animateTo(
              _myController.position.maxScrollExtent,
              duration: const Duration(milliseconds: 500),
              curve: Curves.easeOut,
            );
          });

UPDATE:

请尝试以下代码,无过渡无可见跳转给我。

是前几段的结合。

请注意,如果行数增加,例如10000。

但是我认为您应该控制所显示消息的数量。

  Widget build(BuildContext context) {
    final items = List<String>.generate(50, (i) => "Item $i");

    ScrollController _controller = ScrollController();

    SchedulerBinding.instance.addPostFrameCallback((_) {
        _controller.jumpTo(_controller.position.maxScrollExtent);
      });

    return Scaffold(
        body: SafeArea(
          child: ListView.builder(
            controller: _controller,
            itemCount: items.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('${items[index]}'),
              );
            },
          ),
        ));
  }
© www.soinside.com 2019 - 2024. All rights reserved.