firebase - 在所有状态下访问 FirebaseUser
问题描述
我想知道在所有应用程序中访问登录用户的最佳做法是什么。并且不要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;
或者我看到了继承的小部件。但这只会共享我的子小部件的用户,而不是在更改视图时。
我还想在整个应用程序中分享帖子列表。事实上,同一篇文章可以在多个页面中看到,所以我想将当前显示的所有文章保存在内存中,以便每个文章小部件都基于相同的变量。因此,对视图上的帖子的修改会反映在显示该帖子的每个视图上。(目前我已将此列表作为每个视图的参数传递,并且它有效,但我知道这不是正确的方法)。
有人知道最好的做法吗?
解决方案
最常见的选项是:
使用
FirebaseAuth.instance.currentUser()
. 虽然您明确表示您不想这样做,但实际上我建议将其作为第一个实现,因为它最有可能为您提供最新的身份验证状态。Listen for the
onAuthStateChanged
stream,这可确保您还可以在用户退出时获取信息(例如:如果您在 Firebase 控制台中禁用了他们的帐户)。这比仅仅获得更多的工作currentUser()
。在 中传递当前用户值
SharedPreferences
。我不太喜欢这种方法,因为它需要我编写 Firebase 已经完成的状态管理代码。
如果您倾向于不使用前两种方法之一,则需要仔细考虑为什么会这样,并验证这些假设。例如:这两种方法都在第一次调用后从本地身份验证状态工作,这意味着性能将与您自己实现的任何替代方法一样好。
推荐阅读
- i3 - 在 i3wm 中,如何在启动时打开另一个工作区上的程序?
- python - 为什么使用 ckeditor 和 Django 时 MathJax 预览不显示?
- android - 添加多个回收视图的问题
- symfony - Symfony 5 - 用户登录 - 登录时没有数据库请求,因此 getUser 始终为空
- r - 拟合优度统计 Tobit 模型
- javascript - 如何在回调函数NodeJS之外获取变量值
- python-3.x - 使用 time.sleep 在 python 上进行线程化
- python - 如何在 python 中进行特定组合?
- c# - Xamarin.Forms Android 上的 HttpClient 无响应和冻结(棱镜)
- python - 使用 Pytorch API 和 Fast-ai 进行分类的训练结果不同