Выбор ответа Junior Производительность спрашивают часто обновлено

Flutter: длинный список

Вопрос

Список из 5000 товаров тормозит при открытии. Что исправить в первую очередь?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Перейти на ListView.builder, который строит элементы по мере прокрутки. ListView(children:) требует готовый список всех 5000 виджетов.

Варианты ответа

  1. Обернуть каждый элемент в RepaintBoundary, чтобы элементы не перерисовывались
  2. Перенести элементы в SingleChildScrollView с Column, он легче, чем ListView
  3. Перейти на ListView.builder, который строит элементы по мере прокруткиправильный ответ
  4. Добавить shrinkWrap: true, чтобы список считал высоту только по содержимому

Разбор

ListView(children:) требует готовый список всех 5000 виджетов. ListView.builder вызывает itemBuilder только для видимых элементов и небольшого запаса. RepaintBoundary у элементов списка и так ставится по умолчанию (addRepaintBoundaries). SingleChildScrollView и shrinkWrap строят всё сразу и делают только хуже.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.