для каждого экрана. История комфортная. Но! Иногда нужно проинициализировать провайдер следующего окна открываемый навигатором, сделать анимацию загрузки данных по апи при этом. Вот как лучше передать объект экрану. До вызова navigator.push. В конструкторе экрана, или подключить провайдер к родительскому экрану и вызвать функцию провайдера в нем? Объект, который передается, лучше передавать статически т.к. редактирование уже завершено.
Оберните MaterialApp в провайдер. И у обоих экранов будет доступ к нему.
Да, но логичнее было бы отдельный провайдеры для экранов
Для лучшего понимания, зачем нужен провайдер, почитайте статью https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple, посмотрите схемки. Провайдер устанавливается выше по дереву, и хранит в себе ссылку на класс. Виджеты ниже по дереву могут к нему обращаться. Смысл именно в том, чтобы из разных мест (с разных экранов, страниц, виджетов) можно было обратиться к одному и тому же источнику данных. Делать "провайдер = экран" — это все равно, что в initState создать класс, а в dispose удалить.
Или описка или я чего-то не понимаю. Как раз провайдер=экран, это хорошо, потому что на экране несколько виджетов и при обновлении состояния мы перерисовываем только избранные, а не весь экран. И модель (логика) экрана выносится из ui. Или что имелось в виду под "экраном"?
Нет. Вы путаете провайдер с консьюмером.
Я правда для экранов использую свой "провайдер" на инхеритеднотифаере, по урокам Евгения
Допустим, а как тогда сделать эти объекты видимыми разным провайдерам. А уведомлять об их изменениях?
Уведомлять об изменениях: есть ChangeNofitierProxyProvider, он реагирует на notifyListeners() и вызывает на инстансе класса метод update()
Обсуждают сегодня