Flutter 在颤振中清理架构和用户登录-如何存储用户信息?

Flutter 在颤振中清理架构和用户登录-如何存储用户信息?,flutter,authentication,architecture,state,clean-architecture,Flutter,Authentication,Architecture,State,Clean Architecture,我一直在尝试使用鲍勃叔叔干净的建筑 我的应用程序连接到API,大多数请求(除了登录)都需要身份验证令牌。 此外,在登录时,接收用户配置文件信息(例如名称和配置文件图片) 我需要一种在登录时保存此数据的方法,并在将来的API请求和我的应用程序的UI中使用它 由于我不熟悉Bob叔叔的干净体系结构,我不太确定这些数据属于哪里。以下是我提出的想法,所有这些想法都涉及将数据存储在用户对象中: 将用户存储在存储库层的身份验证功能目录中。其他存储库级别的方法可以将其传递给相应的数据源方法。 这似乎是最有意义的

我一直在尝试使用鲍勃叔叔干净的建筑

我的应用程序连接到API,大多数请求(除了登录)都需要身份验证令牌。 此外,在登录时,接收用户配置文件信息(例如名称和配置文件图片)

我需要一种在登录时保存此数据的方法,并在将来的API请求和我的应用程序的UI中使用它

由于我不熟悉Bob叔叔的干净体系结构,我不太确定这些数据属于哪里。以下是我提出的想法,所有这些想法都涉及将数据存储在
用户
对象中:

  • 用户
    存储在存储库层的
    身份验证
    功能目录中。其他存储库级别的方法可以将其传递给相应的数据源方法。

    这似乎是最有意义的;调用其他API调用的其他存储库级方法可以轻松地使用存储的
    用户
    ,将其传递给数据源层中的方法

    如果是这样的话,我不太确定其他功能(使用API)将如何访问
    用户
    ——让一个存储库依赖另一个存储库并将
    身份验证
    存储库传递给新的功能存储库可以吗

  • 用户
    存储在存储库层的
    身份验证
    功能目录中。其他(非登录)用例既依赖于此存储库,也依赖于与它们自己的特性相关的存储库,将
    用户
    传递给它们的存储库方法。

    这也打破了垂直特性的障碍,但它可能比idea 1更干净

  • 对于这两种想法,我的存储库是这样的:

    抽象类身份验证存储库{
    ///当前用户。
    用户获取当前用户;
    ///如果已登录,则为True。
    布尔得到洛格丁;
    ///登录,保存[用户]。
    未来登录(AuthenticationParams params);
    ///注销,处理[用户]。
    将来注销();
    ///与[注销]相同,但注销所有设备。
    未来logoutAll();
    ///检索存储的登录凭据。
    未来检索或重新定义();
    }
    

    这些想法“有效”吗?有没有更好的方法呢?

    你是如何做到的?每个想法的利弊如何?我还考虑在
    核心
    中实现
    数据
    层时,使用一个专用的身份验证功能,只实现登录和注册页面作为
    演示
    ,这样我就可以轻松地从所有其他功能触发身份验证用例(例如,注销按钮)。这可能是在会话刷新失败时抛出失败的域层中的用例。所有用例都应该扩展一个类,该类实际上应该实现检查和刷新访问令牌的任务。您找到了更好的方法吗?我也被困在这里面了。