Передача данных Firebase Cloud Messaging на n экранов над текущим экраном и через приложение во Flutter

У меня во Флаттере есть приложение, которое вытягивает много данных на родительском экране. Родительский экран делится на несколько дочерних экранов, а те переходят на несколько дочерних экранов.

Теперь, чтобы убедиться, что данные не извлекаются из API все время, я просто вытягиваю их один раз в корневой экран, что вполне нормально в 90% случаев.

Все последующие обновления транслируются по всему приложению через облачные сообщения Firebase.

Если я на экране 3, мне нужно обновить данные на экране 1, которые также должны обновить данные, которые в конечном итоге будут отображаться на экране 2. В настоящее время я использую этот метод для передачи своих данных ( https://flutter.io / кулинарная книга / навигация / передача данных /)

Например, экран 1 содержит три проекта. У каждого проекта есть свой экран.

Экран 2.1 для проекта 1, экран 2.2 для проекта 2 и так далее.

На экране 2.1 есть n списков дел.

Теперь, если я открою список дел, я попаду на экран 3 с данными первого списка дел проекта 1.

В уведомлении о передаче данных облачной базы Firebase я получаю новую информацию из этого списка задач и что-то из списка задач проекта 2 в списке задач 1.

Как мне поддерживать согласованность и обновлять данные по всем направлениям?

Нужно ли мне менять архитектуру и использовать Redux или что-то в этом роде?

2 ответа

Очень хороший вопрос!

Вам понадобится центральная "служба данных", которая действует как единый источник правды.

Он загружает исходные данные и сохраняет их в нем, а также обновляет данные при поступлении облачного сообщения и уведомляет все виджеты, которые зависят от данных, которые изменились.

На экранах никогда не хранится изменяемая копия данных, вместо этого они запрашивают службу данных, чтобы получить самые последние данные.

В зависимости от сложности вашего приложения, существуют разные решения, которые работают с потоками или без них.

InheritedWidget является основным решением, с которым поставляется Flutter. Вы бы обычно имели StatefulWidget с State это окутывает тебя MaterialApp с InheritedWidget транслировать State на ваши экраны.

scoped_model - это тонкая оболочка вокруг InheritedWidget, но в основном предлагает ту же функцию. Опять же, поставщик модели должен обернуть MaterialApp сделать его доступным на всех экранах.

BLoC and flutter_redux are more advanced solutions.

Этот вопрос на самом деле связан с поддержанием состояния в приложении. Флаттер поддерживает различные методы для поддержания состояния. Это зависит от того, что вы строите.

  1. Унаследованный виджет: это самый простой способ, но у него есть недостатки, когда состояние должно поддерживаться в дереве виджетов.

  2. Модель Scoped: Этот пакет полезен для поддержания состояния его потомков.

  3. Потоки (BLoC): это лучший способ поддерживать состояние в приложении. Flutter использует аналогичный процесс для поддержания состояния в дереве виджетов приложения. В трепетании все по сути является потоком.

Больше ресурсов для реализации BLoC. Реализация Flutter Show BloC Pattern

Другие вопросы по тегам