ListView создает все элементы внутри другого прокручиваемого виджета - PullRequest
0 голосов
/ 10 марта 2020

Я хочу иметь виджет ListView.builder внутри другого прокручиваемого виджета, но когда я создаю такое дерево, внутреннее ListView.builder создает все элементы (поэтому рендеринг медленный с огромными списками)

У меня есть следующий метод сборки:

  Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            Text(""),
            ListView.builder(
              shrinkWrap: true,
              primary: false,
              itemCount: 999,
              itemBuilder: (_, position) {
                if (position == 998)
                  {/* breakpoint*/}
                return Placeholder(fallbackHeight: 100,);
              }
            )
          ],
        ),
      ),
    );
  }

Выполнение всегда останавливается в точке останова в itemBuilder (но если я удаляю первый SingleChildScrollView и Column, все в порядке, последний элементы отображаются только когда необходимо )

1 Ответ

0 голосов
/ 10 марта 2020

Это ожидается. SingleChildScrollView позволяет своим детям получать столько места, сколько им нужно, и прокручивать их. ListView использует это как возможность для рендеринга всего. SingleChildScrollView прокручивает этот огромный ListView. ListView нужно какое-то ограничение размера, чтобы отображать только те элементы, которые он показывает. Прямо сейчас он думает, что показывает их всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...