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

时间:2018-09-06 12:07:20

标签: firebase firebase-cloud-messaging flutter

我在Flutter中有一个应用程序可以在父屏幕中提取大量数据。父屏幕分为几个子屏幕,而子屏幕又进入了几个子屏幕。

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

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

如果我在屏幕3上,则需要更新屏幕1上的数据,该数据也应更新最终将在屏幕2上显示的数据。我目前正在使用此方法来传递数据({{3} })

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

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

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

现在,如果我打开待办事项列表,则进入屏幕3,其中包含项目1的第一个待办事项列表的数据。

在firebase云消息传递数据通知中,我接收到此待办事项列表的新信息以及项目2待办事项列表1的待办事项列表中的某些内容。

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

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

2 个答案:

答案 0 :(得分:0)

这个问题实际上与维护整个应用程序的状态有关。 Flutter支持多种维护状态的方法。这取决于您要构建的内容。

  1. Inherited Widget:这是最简单的方法,但是当状态必须保持深入到小部件树中时,它具有缺点。

  2. Scoped Model:此软件包对于维护子孙后代的状态非常有用。

  3. Streams(BLoC):这是维护应用程序状态的最佳方法。 Flutter使用类似的过程来维护应用程序小部件树中的状态。在颤动中,一切基本上都是流。

更多有关BLoC实施的资源。 Flutter Show BloC Pattern implementation

答案 1 :(得分:0)

很好的问题!

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

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

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

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

InheritedWidget是Flutter随附的基本解决方案。通常,您会拥有一个StatefulWidget和一个State,并用一个MaterialApp来包裹您的InheritedWidget,以便将State广播到屏幕上。

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

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