【问题标题】:Firebase problems getting uid within Flutter function在 Flutter 函数中获取 uid 的 Firebase 问题
【发布时间】:2020-10-22 16:23:05
【问题描述】:

您好,我已经查看了以前对类似问题的回答(例如 here),但它们并没有解决我的问题。

我有一个应用程序,其中用户记录和音频 sn-p 然后上传到 firebase 存储。一切正常,但目前没有文件夹结构(因此所有用户文件都将保存到同一顶层)。因此,我试图调用一个用户 uid 来创建一个唯一的用户文件夹。由于用户还首先登录到 Firestore DB,因此我有一个指定的 user.uid

我有调用当前用户的方法

Future getCurrentUser() async {
final FirebaseUser user = await _auth.currentUser();  # _auth is instance of FirebaseAuth
return user;

如果我将它附加到按钮的 onPressed 事件中,我会得到以下信息

flutter: user Information is
flutter: D3sR4sKXXXXYToYQrmkkxmBNGvWq1

但是,如果我在“停止”录制函数中调用相同的函数,我会得到不同的结果。

Stop recording () async {
// some audio commands....
var folder = _auth.getCurrentUser().toString();
print('Folder name is: ' + folder);

这给了我

flutter: folder name is: Instance of 'Future<dynamic>'

我不知道这是否相关,但我注意到与一些较旧的在线教程相比,firestore 响应存在一些差异。例如,如果我按照其他 StackOverflow 示例(例如 here )中的建议将当前用户方法更改为

Future getCurrentUser() async {
final FirebaseUser user = await _auth.currentUser();
return user.uid;

无论是在代码中调用还是通过 onPressed(尽管命令完成),我都会收到以下异常,

flutter: user Information is
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: Class    'String' has no instance getter 'uid'.
Receiver: "D3sR4sKXXXXYToYQrmkkxmBNGvWq1"

当直接从用户初始 Firestore 登录的响应中调用 user.uid 时,我没有收到此消息。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    这个:

    Stop recording () async {
    // some audio commands....
    var folder = _auth.getCurrentUser().toString();
    print('Folder name is: ' + folder);
    

    给你一个Future,因为你创建的方法返回一个Future,这意味着它是异步的,这就是你使用async/await从未来操作中获取数据的原因:

    Future<FirebaseUser> getCurrentUser() async {
     return await _auth.currentUser();
    }
    

    现在,当您调用此方法时,您可以执行以下操作:

    FirebaseUser userResult = await getCurrentUser();
    print(userResult.uid);
    

    基本上currentUser() 返回一个Future&lt;FirebaseUser&gt;,而FirebaseUser 类扩展了包含属性uid 的类UserInfo

    https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/lib/src/user_info.dart

    【讨论】:

    • 谢谢 - 我认为因为我在 getCurrentUser 函数中有 await,所以我在 stop 调用中不需要它。现在它的工作似乎很明显......发生的方式很有趣!
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2018-09-02
    • 2021-02-09
    • 2020-03-08
    • 1970-01-01
    • 2023-04-02
    • 2021-02-26
    相关资源
    最近更新 更多