Да, вы правы.
ChangeNotifier
, как следует из названия, означает уведомление об изменениях. Как вы можете видеть, функция notifyListners()
, вызываемая в catalog
и add
, используются для уведомления слушателей, подписанных на уведомитель, с помощью виджета Consumer
или с помощью Consumer.of()
. Итак, когда использовать ChangeNotifiers
? Вы можете использовать then всякий раз, когда есть изменения состояния в модели, зависящие от какого-либо другого представления глубоко в дереве, к которому вы не можете добраться напрямую.

Итак, из этого дерева виджетов вы можете ясно видеть, что MyCatalog и MyCart полностью отличаются друг от друга в пользовательском интерфейсе, но логически зависят. т.е. вам необходимо уведомлять виджет корзины всякий раз, когда пользователь меняет MyListItem
.
Одним из возможных решений для этого сценария является использование глобальных переменных (вроде) или переменной, которая находится наверху MyCatalog и MyCart в дереве. Таким образом, когда MyCatalog изменяет состояние, ChangeNotifier
наверху дерева узнает об изменении и уведомляет MyCart
, который прослушивает изменения.
ChangeNotifiers
используются в таком сценарии, когда нам нужно поднять состояние, как указано в документации здесь , или вы можете использовать его, когда вам нужны значения глубоко в дереве, которые вы не можете прямо отдаю. In case of react we call it props drilling
. Передача состояния дочерним виджетам в дереве.
Мы могли бы добиться этого без использования провайдеров, если я не ошибаюсь. Создание виджета MyApp
с полным состоянием и передача состояния виджетам MyCatalog
и MyCart
. чтобы рендеры знали, откуда нужно получить состояние. Но что, если вы добавили еще один виджет, который зависит от состояния глубоко в дереве. Вы бы передали государство? или вы бы использовали провайдера? все зависит от вас и вашего приложения.