Выбор ответа Junior Управление состоянием спрашивают часто обновлено
Provider: watch и read
Вопрос
Где правильно использовать context.read<Cart>(), а не context.watch<Cart>()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: В обработчиках событий (onPressed), где подписка на изменения не нужна. watch подписывает виджет на изменения и используется в build. read просто достаёт объект без подписки: правильно в колбэках, где подписка не нужна (и watch там даже запрещён ассертом). read в build даст экран, который не обновится при…
Варианты ответа
- В
build, чтобы виджет обновлялся каждый раз, когда меняется корзина - В обработчиках событий (
onPressed), где подписка на изменения не нужнаправильный ответ - Везде:
readэто новое названиеwatch, старое оставлено для совместимости - Только в
initStateчерезaddPostFrameCallback, иначе провайдер ещё не создан
Разбор
watch подписывает виджет на изменения и используется в build. read просто достаёт объект без подписки: правильно в колбэках, где подписка не нужна (и watch там даже запрещён ассертом). read в build даст экран, который не обновится при изменении данных. Это разные методы с разной семантикой.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.