如何在请求后更改块状态数据而不再次发送请求?

时间:2020-12-30 14:58:45

标签: flutter flutter-web bloc state-management

我是 flutter 的新手,我在使用 bloc 进行数据管理时遇到了一些问题。我正在构建一个应用程序,它使用 bloc 发出请求(get_things)并接收对象列表作为响应(例如:{"things": [{"id": 1, "color" : "green"},{" id":2 , "color":"blue"},...]).

通过这个响应,我构建了一个使用 blocState 呈现这些“事物”的小部件。然后我创建另一个页面,调用相同的块来创建一个类似的小部件,但在这个页面中,我们可以创建、修改或删除“事物”,并在数据库 (modify_things) 上发出更改它们的请求。

问题是我希望两个页面在更改后都更新列表,而不需要向后端发出请求以使用修改后的列表重建列表。

我的解决方案是将初始请求的 blocState 数据保存在某处,然后在本地使用它来更改小部件(列表)。我的意思是,我删除一个“东西”并发送修改数据库的请求,同时我在本地修改保存的 blocState 列表以反映此更改。这样我只需要使用一次 get_things 和 modify_things 仅当我对列表进行更改时。

这是一个好方法吗?这种方法看起来很麻烦,但由于我对 flutter 还很陌生,所以我想不出其他任何东西。

至于我需要减少请求并在本地管理它,这是因为我被告知将来这些“东西”会变得非常大,并且每次我需要查看小部件最终可能会成为性能问题。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您将 [{"id": 1, "color" : "green"},{"id":2 , "color":"blue"},...] 发送到页面 A,然后您想在页面 B 上使用相同的数据。

我想,干净的方法是在页面 A 上添加一个带有 myBloc.add([{"id": 1, "color" : "green"},{"id":2 , "color":"blue"},...] ) 的事件,这也会触发页面 B 加载。然后 myBloc 产生一个包含该状态和可能更多数据的状态,显示页面 B。

但当然你也可以在 myBloc 中声明一个 PageADisplayState storedState;,然后在产生状态之前通过 storedState = things; yield PageADisplayState(things); 存储它