【问题标题】:Access FirebaseUser in all state flutter在所有状态下访问 FirebaseUser
【发布时间】:2020-04-30 10:35:39
【问题描述】:

我想知道在所有应用程序中访问已登录用户的最佳做法是什么。 并且不要在所有初始化状态下执行FirebaseAuth.instance.currentUser().then((result) {...});

我有两个想法,创建一个在我启动应用程序时初始化的单例。 并听onAuthStateChanged

class GlobalDataAppli {
  static final GlobalDataAppli _appData = new GlobalDataAppli._internal();

  FirebaseUser user;
  IdTokenResult userToken;
  List<Post> myListPost;

  factory GlobalDataAppli() {
    return _appData;
  }

  GlobalDataAppli._internal();
}
final globalData = GlobalDataAppli;

或者我看到了继承的小部件。但这只会共享我的子小部件的用户,而不是在更改视图时。

我还想在整个应用程序中分享帖子列表。事实上,同一篇文章可以在多个页面中看到,所以我想将当前显示的所有文章保存在内存中,以便每个文章小部件都基于相同的变量。因此,对视图上的帖子的修改会反映在显示该帖子的每个视图上。 (目前我已将此列表作为每个视图的参数传递,它可以工作,但我知道这不是正确的做法)。

有人知道这方面的最佳做法吗?

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    最常见的选项是:

    1. 使用FirebaseAuth.instance.currentUser()。虽然您明确表示不想这样做,但实际上我建议将其作为第一个实现,因为它最有可能为您提供最新的身份验证状态。

    2. 收听onAuthStateChanged stream,这可确保您在用户退出时也能接收到信息(例如:如果您在 Firebase 控制台中禁用了他们的帐户)。不过,这比获得currentUser() 要多一些工作。

    3. SharedPreferences 中传递当前用户值。我不太喜欢这种方法,因为它需要我编写 Firebase 已经完成的状态管理代码。

    如果您倾向于不使用前两种方法中的任何一种,您需要仔细思考为什么会这样,并验证这些假设。例如:这两种方法都在第一次调用后从本地身份验证状态工作,这意味着性能将与您自己实现的任何替代方法一样好。

    【讨论】:

    • 好的,谢谢弗兰克。我将在每个小部件父级中获取 currentUser() 实例,并使用继承的小部件传播给子级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2017-06-22
    • 2020-04-19
    • 2020-10-22
    • 2012-03-12
    • 2019-12-24
    • 2018-08-14
    相关资源
    最近更新 更多