我在Flutter应用程序中使用Stacked架构。
我有两个视图-ScoresPage和NewScorePage,每个视图都有自己的ViewModel。分数被存储在本地数据库中,但也被发送到API。
ScoresPage显示所有分数,NewScorePage收集信息并要求其ViewModel创建新分数。
我通过Navigator.push调用从ScoresPage转到NewScorePage,然后使用Navigator.php返回ScoresPage。
我想在弹出NewScorePage后添加新分数时刷新ScoresPage。做这件事最好的方法是什么?
您可以查看此页面https://pub.dev/packages/stacked提到了用新更新的ViewModel状态重建UI
您可以使用Navigator.pop将数据从NewScoresPage返回到ScoresPage,请阅读此示例。还要检查返回的数据是否为null,因为用户可以在不创建新结果的情况下返回。获取数据后,您可以在本地更新数据,也可以调用一个函数从API获取数据并更新视图。
堆叠包的作者Dane Mackier提到了这个问题,下面是他提出的3个解决方案。
-
从服务回调:提供一种方法来设置服务上的回调,当服务上的任何内容都已更新并需要刷新时,该回调将被调用。
-
内置在BaseModel中:有一个内部消息服务,可以公开流供任何人收听。当帖子更新时,通过该服务进行广播。在模型或基本模型中,侦听消息,并在任何消息到达时调用notify监听器。
-
再次广播所有帖子:在PostsService上显示模型可以订阅的帖子流。当我们更改任何内容时,我们广播新的帖子。
链接