Передача данных Firebase Cloud Messaging на n экранов над текущим экраном и через приложение во Flutter - PullRequest
0 голосов
/ 06 сентября 2018

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

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

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

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

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

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

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

BLoC и flutter_redux - более продвинутые решения.

0 голосов
/ 06 сентября 2018

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

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

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

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

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

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