将Firebase云消息传递数据传递到当前屏幕上方的n个屏幕以及Flutter中的应用程序

问题描述 投票:1回答:2

我在Flutter有一个应用程序,它在父屏幕上提取了大量数据。父屏幕分为几个子屏幕,而这些屏幕则分成几个子屏幕。

现在,为了确保不会一直从API中提取数据,我只在根屏幕中提取一次 - 这在90%的时间都很好。

所有后续更新都通过firebase云消息传递在整个应用程序中广播

如果我在屏幕3上,我需要更新屏幕1中的数据,这也应该更新最终将显示在屏幕2上的数据。我正在使用此方法传递我的数据(https://flutter.io/cookbook/navigation/passing-data/

例如,屏幕1包含三个项目。每个项目都有自己的屏幕。

屏幕2.1用于项目1,屏幕2.2用于项目2,依此类推。

在屏幕2.1中,有n个待办事项列表。

现在,如果我打开待办事项列表,我将使用项目1的第一个待办事项列表的数据到达屏幕3。

在firebase云消息传递数据通知中,我从项目2待办事项列表1的待办事项列表中收到此待办事项列表的新信息。

如何保持一致性并全面更新数据?

我是否需要更改我的架构并使用Redux或其他类似的东西?

firebase firebase-cloud-messaging flutter
2个回答
0
投票

这个问题实际上与跨应用程序维护状态有关。 Flutter支持各种维持状态的方法。这取决于你正在建设什么。

  1. Inherited Widget:这是最简单的方法,但是当状态必须保持深入到小部件树时它有缺点。
  2. Scoped Model:这个包对于维护其后代的状态非常有用。
  3. Streams(BLoC):这是在应用程序中维护状态的最佳方式。 Flutter使用类似的过程来维护app widget树中的状态。在颤动中,一切都基本上是一条小溪。

更多资源用于BLoC实施。 Flutter Show BloC Pattern implementation


0
投票

非常好的问题!

您将需要一个中央“数据服务”,作为单一的事实来源。

它加载初始数据并将其存储在其中,它还在云消息到达时更新数据,并通知所有依赖于数据已更改的数据的小部件。

屏幕从不存储数据的可变副本,而是查询数据服务以获取最新数据。

根据应用程序的复杂程度,有不同的解决方案可以使用或不使用流。

InheritedWidget是Flutter附带的基本解决方案。你通常会有一个StatefulWidgetState包裹你的MaterialAppInheritedWidget播放State到你的屏幕。

scoped_model是围绕InheritedWidget的薄包装,但基本上提供相同的功能。同样,模型提供者必须包装你的MaterialApp,使其在所有屏幕上都可用。

BLoC和flutter_redux是更高级的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.