【问题标题】:How Can I Get user id in Flutter with Firebase Authentication?如何使用 Firebase 身份验证在 Flutter 中获取用户 ID?
【发布时间】:2021-04-04 11:45:54
【问题描述】:

我目前正在尝试通过 Firebase 身份验证在 Flutter 中获取用户 ID,并且我正在初始化 initState 中的一个变量,因为我想稍后使用该变量进行 Future 调用,以使用未来的构建器从 Firebase 实时数据库中获取数据. (这不起作用,因为我每次都必须重新加载屏幕,然后获取用户 ID)。 这是我的代码,

  final FirebaseAuth auth = FirebaseAuth.instance;
  User user;
  String currentUId;
  String currentEmail;

  @override
  void initState() {
    super.initState();

    user = auth.currentUser;
    // Future.delayed(Duration(seconds: 5));
    // sleep(Duration(seconds: 5));
    currentUId = user.uid;
    currentEmail = user.email;
    print(currentUId);
}

我尝试使用睡眠,但它不起作用,还有其他地方可以让我进入睡眠,这将使程序等待用户 ID 然后运行程序的其余部分吗?

【问题讨论】:

  • 我不明白为什么它应该起作用。试试FirebaseAuth.instance.currentUser.uid
  • @Andrej 我仍然需要热重新加载应用程序,以便在我提供给 FutureBuilder 时初始化 uid。有没有办法让程序休眠,直到我的变量'currentUId'被初始化然后继续?我已经尝试过 sleep(),但做不到。
  • 你想用 uid 做什么?
  • @Andrej 我想要获取 uid,因为我想从 Firebase 实时数据库中获取数据,并且我存储这些数据的密钥基于用户注册时的 uid。所以现在,当我登录时,我必须先获取 uid,然后将其交给 FutureBuilder 以根据该特定 uid 从数据库中获取数据。
  • 不用等待加载,直接传入FutureBuilder即可。

标签: firebase flutter firebase-authentication


【解决方案1】:

一旦验证了用户的身份验证状态,Firebase 就会自动初始化 auth.currentUser 变量。但由于验证状态可能需要调用服务器,因此在您的 currentUId = user.uid 运行时可能尚未完成。

我建议使用身份验证状态侦听器,而不是尝试通过睡眠调用等待结果,如handling authentication state 上的文档中所示。这为您提供了一个Stream<User>,您可以轻松地将其输入到StreamBuilder

更多示例,另请参见:How to use .currentUser method in flutter

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2017-12-18
    • 2019-03-05
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2022-01-02
    • 2020-03-12
    相关资源
    最近更新 更多