gpt4 book ai didi

flutter - 全局依赖 flutter_bloc

转载 作者:行者123 更新时间:2023-12-04 11:45:21 25 4
gpt4 key购买 nike

我在使用 flutter_bloc 在 Flutter 上实现应用程序时遇到问题.我理解核心概念,但我发现了一个“边缘情况”,其中没有示例或指南(至少我能找到):

(我会简化问题)我有一个叫 AuthBloc 的集团管理 App .如果状态是 NotAuthenticated那么应用程序应该显示 LoginScreen但如果是 Authenticated该应用程序应显示 HomeScreen .内HomeScreen我有 4 个集团,每个集团都有自己的状态和事件,但它们都依赖于不同的 Repositories从 API 获取一些数据。

所有 Repositories需要一个 token 来发出 API 请求。第一个问题就到这里了。如何从所有存储库中获取 token ?如果我使用 UserRepository要存储 token ,我需要将它作为依赖项传递给每个存储库(可能有效,但我认为这不是正确的方法)。那么,什么是管理这个的正确方法呢?

第二个问题是:

如果以某种方式我可以在所有存储库查询中获取 token ,那么当 token 被撤销时会发生什么?该应用程序应返回到 LoginScreen为此,我需要通知 AuthBloc通过事件(例如 InvalidTokenEvent )。和 AuthBloc应该将其状态更改为 NotAuthenticated这将重建 LoginScreen .但问题是:我如何通知 AuthBloc来自其他集团或存储库?我的第一个想法是通过依赖注入(inject):我可以将 AuthBloc 传递给构造函数中的所有其他块,因此当存储库请求返回 token 过期时,XBloc可调用AuthBloc.add(InvalidTokenEvent) .但同样,如果我有很多集团,我需要在每个集团中都这样做。那么,这样做的正确方法是什么?

感谢您的任何帮助!

最佳答案

All the Repositories need a token to make the API requests. The firstproblem came here. How can I get the token from all the repositories?If I use a UserRepository to store the token, I will need to pass itas dependency to each Repository (probably works but I don't think itsthe right way to do it). So, what can be the right way to manage this?


这不是一个不好的做法(将其添加为依赖项),但为了使其更容易,您可以使用 getIt 和可注入(inject)库来获得适当的依赖项注入(inject)解决方案。
另一种方法是,向您的网络层添加一个拦截器,也就是说,在发出 http 请求之前,您可以拦截您的请求,在该层向您的请求添加 token 并继续请求阶段。
大多数网络库都有请求和响应拦截器,如下所示:
  • Dio
  • Chopper

  • 但这不是 Bloc 库的问题。

    If somehow I can get the token on all the repositories queries, whathappens when the token is revoked?


    您可以添加另一个响应拦截器来检测您是否有未经身份验证的响应,以便您可以注销用户。
    使用 getIt ,您可以从全局依赖项容器和注销用户中获取该块。

    关于flutter - 全局依赖 flutter_bloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61165810/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com