在所有状态下访问FirebaseUser

在所有状态下访问FirebaseUser,firebase,flutter,firebase-authentication,Firebase,Flutter,Firebase Authentication,我想知道在所有应用程序中访问登录用户的最佳实践是什么。 不要执行FirebaseAuth.instance.currentUser().then((结果){…})处于所有初始状态 我有两个想法,创建一个在启动应用程序时初始化的单例。 然后收听onAuthStateChanged class GlobalDataAppli { static final GlobalDataAppli _appData = new GlobalDataAppli._internal(); Firebase

我想知道在所有应用程序中访问登录用户的最佳实践是什么。 不要执行
FirebaseAuth.instance.currentUser().then((结果){…})处于所有初始状态

我有两个想法,创建一个在启动应用程序时初始化的单例。 然后收听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;
类GlobalDataAppli{
静态最终GlobalDataAppli_appData=新的GlobalDataAppli._internal();
FirebaseUser用户;
IdTokenResult-userToken;
列出我的邮政信箱;
工厂GlobalDataAppli(){
返回appData;
}
GlobalDataAppli._internal();
}
最终全局数据=全局数据应用;
或者我看到了继承的小部件。但这只会在子窗口小部件中共享我的用户,而不会在更改视图时共享

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


有人知道这方面的最佳实践吗?

最常见的选项是:

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

  • 收听,这确保您还可以在用户注销时(例如:如果您在Firebase控制台中禁用了他们的帐户)接收信息。不过,这比仅仅获取
    currentUser()
    要多做一点工作

  • SharedReferences
    中传递当前用户值。我不太喜欢这种方法,因为它需要我为状态管理编写代码,而Firebase已经这样做了


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

    好的,谢谢您,弗兰克。我将在每个小部件的父部件中获取currentUser()实例,并使用继承的小部件传播给子部件。