Выбор ответа Senior Вёрстка и constraints обновлено
Flutter: цена shrinkWrap
Вопрос
Чем плох ListView(shrinkWrap: true) на 2000 элементов внутри другого прокручиваемого списка?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы узнать свою высоту, список строит и меряет всех 2000 детей сразу. Чтобы занять высоту по содержимому, список должен построить и измерить все элементы: ленивость ListView.builder пропадает, растут время кадра и память.
Варианты ответа
- Чтобы узнать свою высоту, список строит и меряет всех 2000 детей сразуправильный ответ
- Ничем:
shrinkWrapтолько меняет физику прокрутки, построение остаётся ленивым - Список перестаёт прокручиваться на iOS, потому что высоту задаёт содержимое
- Элементы перестают переиспользовать
Stateи пересоздаются при каждой прокрутке
Разбор
Чтобы занять высоту по содержимому, список должен построить и измерить все элементы: ленивость ListView.builder пропадает, растут время кадра и память. Для вложенных списков и сложных экранов правильно использовать CustomScrollView со слайверами (SliverList, SliverGrid), где всё лениво в одной прокрутке. С физикой прокрутки и платформой shrinkWrap не связан.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.