Flutter ListView прокрутите вниз, чтобы построить - PullRequest
0 голосов
/ 04 апреля 2020

Можно ли сделать просмотр списка Flutter вниз, после того как он первоначально загрузит все свои данные? Я знаю о логи scrollController.jumpTo () c, однако это должно вызываться в каком-то обработчике событий, как бы вы вызвали его после завершения построения списка, чтобы, как только экран открывается, он прокручивается вниз

1 Ответ

0 голосов
/ 05 апреля 2020

Что ж, я думаю, что вы на правильном пути для достижения этого!

Вам следует попробовать _controller.jumpTo() и запустить это событие программно.

Вы можете создать таймер и вызвать _controller там, через 500 миллисекунд (полсекунды).

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,
         // ...
      )
}

Пожалуйста, проверьте этот ответ также -> Программная прокрутка до конца ListView

А также этот -> Как получить полный размер ScrollController

Там они используют SchedulerBinding.instance.addPostFrameCallback, что, я думаю, также является хорошим решением для запуска вашей прокрутки.

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

ОБНОВЛЕНИЕ:

Пожалуйста, попробуйте этот код, без перехода , без видимого перехода к меня.

Это комбинация моих предыдущих абзацев.

Просто будьте осторожны, если число строк возрастет, например, 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]}'),
              );
            },
          ),
        ));
  }
...