使用StreamProvider

时间:2020-10-12 12:43:13

标签: flutter authentication dart provider

我对Flutter相当陌生,需要一些建议。我目前正在编写一个与我的自定义后端交互的应用程序。后端API中的所有服务都需要身份验证才能允许调用。身份验证基本上是基于令牌的。

我登录,获取一个令牌,并将该令牌与所有对API的调用一起传递。很基本的东西。我决定使用StreamProvider为UI提供带有后端信息的流。

但是,这意味着所有流都需要访问令牌才能正常运行。那不是那么难处理,但是现在我的主要问题是令牌可以在经过身份验证的“会话”期间更改。例如,用户可以在会话期间“切换” ID,这将要求用户刷新令牌(返回的令牌是不同的令牌)。

因此,提供视图数据的所有流都依赖于此身份验证流,并且在令牌更新时需要刷新。

我尝试了不同的方法,但各有优缺点。目前,我有一个Session对象,该对象包装在ChangeNotifier中,并在令牌更新时通知侦听器。

然后我用这样的Multiprovider创建所有流:

ChangeNotifierProxyProvider<Session, StartpageResource>(
        create: (context) => StartpageResource(),
        update: (context, value, previous) =>
            previous..updateSession(value),
      ),

StartpageResource向UI提供数据,而“ updateSession”处理会话已更新的情况。

现在,我在想,也许会话也应该由流提供(以便在用户注销,身份验证失败或类似情况时允许轻松重建视图),但是我真的看不到另一个流将被设置。

使用StreamProvider和基本的基于令牌的身份验证时,典型的最佳实践是什么?我应该将“会话”作为流提供,并让所有其他流都依赖它吗?我应该考虑让“会话”成为令牌所在的单身人士吗?还是另一种解决方案?

我只想一些有关如何思考的想法?我可以找到的所有示例都非常简单,并且与我的复杂情况完全不符。

0 个答案:

没有答案