Выбор ответа Junior Производительность спрашивают часто обновлено
Flutter: длинный список
Вопрос
Список из 5000 товаров тормозит при открытии. Что исправить в первую очередь?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Перейти на ListView.builder, который строит элементы по мере прокрутки. ListView(children:) требует готовый список всех 5000 виджетов.
Варианты ответа
- Обернуть каждый элемент в
RepaintBoundary, чтобы элементы не перерисовывались - Перенести элементы в
SingleChildScrollViewсColumn, он легче, чемListView - Перейти на
ListView.builder, который строит элементы по мере прокруткиправильный ответ - Добавить
shrinkWrap: true, чтобы список считал высоту только по содержимому
Разбор
ListView(children:) требует готовый список всех 5000 виджетов. ListView.builder вызывает itemBuilder только для видимых элементов и небольшого запаса. RepaintBoundary у элементов списка и так ставится по умолчанию (addRepaintBoundaries). SingleChildScrollView и shrinkWrap строят всё сразу и делают только хуже.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.