Flutter提供者之间的相互依赖性

时间:2019-10-30 11:39:40

标签: flutter dart state

一个“提供者”类如何访问另一个元素?

例如,“ ApiController”需要来自UserInfo Provider的“ userID”和“ sessionToken”。

UserInfo提供程序需要从Shared首选项中加载这些内容,但是,如果这些项目尚未在SharedPreferences中(例如,在用户登录之前),则它将为null,并且UserInfo需要提供它。

UserInfo还需要ApiController来从Api获取有关用户的其他信息,例如Avatar和其他属性。

2 个答案:

答案 0 :(得分:0)

这是自愿不支持的。 提供程序强制执行单向数据流以提高代码质量。

一种可能的解决方案是将ApiController分成多个部分,例如UserController和SomethingController。

答案 1 :(得分:0)

这是我关于如何处理这种特殊情况的建议:

您可以创建一个Splash View,此页面将在登录之前,并且在该页面上,您需要处理是否将数据保存在SharedPreferences中。因此,让我们执行以下操作:您需要在此类中创建一个User DAO,您将包括3个函数(saveUser(),getUser()和removeUser()),因此在API类中,当您记录响应成功时,您将调用saveUser()并将用户数据保存到SharedPreferences中,在getUser()中,检查值是否存在于SharedPreferences中;如果存在,则返回数据,如果不存在则返回消息。稍后在Splash bloc中调用getUser()的值,然后在视图中检查值是否存在并导航到下一页或启动错误消息,这是很多代码,但相信我是最好的方法。我几乎忘了说removeUser()用于注销,并且该函数非常简单,只需从SharedPreferences中删除值即可。