我在Flutter中有一个应用程序,它可以在父屏幕上提取大量数据。父屏幕被划分为几个子屏幕,而这些子屏幕又转到几个子屏幕。
现在,为了确保这不会一直从API中拉出数据,我只在根屏幕中拉出一次-这在90%的时间内都是可以的。
所有后续更新都会通过firebase云消息在整个应用程序中广播
如果我在屏幕3上,我需要更新屏幕1中的数据,这也应该更新最终将显示在屏幕2上的数据。
例如,屏幕1包含三个项目。每个项目都有自己的屏幕。
屏幕2.1用于项目1,屏幕2.2用于项目2,依此类推。
在2.1屏幕中,有n个待办事项列表。
现在,如果我打开待办事项列表,我会进入屏幕3,其中包含项目1的第一个待办事项列表的数据。
在firebase云消息传递数据通知中,我收到了这个待办事项列表的新信息,以及项目2待办事项列表1的待办事项列表中的内容。
如何维护一致性并全面更新数据?
我需要改变我的架构并使用Redux或其他类似的东西吗?
发布于 2018-09-06 20:34:23
这个问题实际上与维护跨应用程序的状态相关。Flutter支持多种维护状态的方法。这取决于您正在构建的是什么。
为BLoC实现提供更多资源。Flutter Show BloC Pattern implementation
发布于 2018-09-06 22:15:07
非常好的问题!
您将需要一个中央“数据服务”,作为单一的真理来源。
它加载初始数据并将其存储在其中,它还会在云消息到达时更新数据,并通知所有依赖于数据的小部件数据已更改。
屏幕从不存储数据的可变副本,而是查询数据服务以获取最新数据。
根据你的应用程序的复杂性,有不同的解决方案,可以使用或不使用流。
InheritedWidget是Flutter自带的基本解决方案。您通常会有一个带有State的StatefulWidget,它用一个InheritedWidget包装您的MaterialApp,以便将State广播到您的屏幕。
scoped_model是InheritedWidget的薄包装器,但基本上提供了相同的功能。同样,模型提供者必须包装您的MaterialApp以使其在所有屏幕上都可用。
BLoC和flutter_redux是更高级的解决方案。
https://stackoverflow.com/questions/52203763
复制相似问题