Выбор ответа Middle Управление состоянием обновлено
Provider: select для точечной подписки
Вопрос
Виджет показывает только количество товаров в корзине, а корзина часто меняет другие поля. Как сократить перестроения?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: context.select<Cart, int((c) = c.count) вместо подписки на всю корзину. select сравнивает выбранное значение до и после уведомления и перестраивает виджет только если оно изменилось. read в build не подписывает вообще, и счётчик перестанет обновляться.
Варианты ответа
context.read<Cart>().countпрямо вbuild: тогда лишних подписок не будет- Обернуть виджет в
RepaintBoundary, чтобы он не перерисовывался вместе с корзиной - Вызывать
notifyListenersреже в остальных методах корзины, только при смене количества context.select<Cart, int>((c) => c.count)вместо подписки на всю корзинуправильный ответ
Разбор
select сравнивает выбранное значение до и после уведомления и перестраивает виджет только если оно изменилось. read в build не подписывает вообще, и счётчик перестанет обновляться. RepaintBoundary про отрисовку, а не про build. Реже уведомлять ради одного виджета значит ломать остальных подписчиков.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.