我在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或其他类似的东西?
这个问题实际上与跨应用程序维护状态有关。 Flutter支持各种维持状态的方法。这取决于你正在建设什么。
更多资源用于BLoC实施。 Flutter Show BloC Pattern implementation
非常好的问题!
您将需要一个中央“数据服务”,作为单一的事实来源。
它加载初始数据并将其存储在其中,它还在云消息到达时更新数据,并通知所有依赖于数据已更改的数据的小部件。
屏幕从不存储数据的可变副本,而是查询数据服务以获取最新数据。
根据应用程序的复杂程度,有不同的解决方案可以使用或不使用流。
InheritedWidget
是Flutter附带的基本解决方案。你通常会有一个StatefulWidget
与State
包裹你的MaterialApp
与InheritedWidget
播放State
到你的屏幕。
scoped_model是围绕InheritedWidget
的薄包装,但基本上提供相同的功能。同样,模型提供者必须包装你的MaterialApp
,使其在所有屏幕上都可用。
BLoC和flutter_redux是更高级的解决方案。