首页 > 解决方案 > 如何从 Flutter 中的 firebase 实时数据库中检索当前用户名

问题描述

我想从firebase的实时数据库中获取当前登录的用户名。我存储了注册用户的信息。我使用了 Future Builder,它也在终端上打印名称,但我无法在导航抽屉上显示用户名。由于我是 Flutter 的新手,请帮助我找出哪里做错了。先感谢您!

功能代码:

Future<String> getUsername() async {
    final ref = FirebaseDatabase.instance.reference();
    User cuser = await firebaseAuth.currentUser;

    ref.child('User_data').child(cuser.uid).once().then((DataSnapshot snap) {
      final String userName = snap.value['name'].toString();
      print(userName);
      return userName;
    });
  }

我使用过Builder的代码:

Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    FutureBuilder<String>(
                      future: getUsername(),
                      builder: (context, snapshot) {
                        if (snapshot.hasData) {
                          return Text(
                            snapshot.data,
                            style: TextStyle(
                              fontFamily: 'Montserrat',
                              fontSize: 13,
                              color: const Color(0xff000000),
                              fontWeight: FontWeight.w700,
                            ),
                            textAlign: TextAlign.left,
                          );
                        } else {
                          return Text(
                            "Loading data...",
                            style: TextStyle(
                              fontFamily: 'Montserrat',
                              fontSize: 13,
                              color: const Color(0xff000000),
                              fontWeight: FontWeight.w700,
                            ),
                            textAlign: TextAlign.left,
                          );
                        }
                      },
                    ),

我的屏幕图片:

在此处输入图像描述

我存储信息的数据库:

我想从数据库中获取第二个用户名:Hania Salman

在此处输入图像描述

标签: firebaseflutterdartfirebase-realtime-database

解决方案


您没有从 getUsername() 函数返回用户名。您编写的返回用户名是针对 then() 内部的函数,而不是针对 getUsername()。所以应该是这样的

Future<String> getUsername() async {
    final ref = FirebaseDatabase.instance.reference();
    User cuser = await firebaseAuth.currentUser;

    return ref.child('User_data').child(cuser.uid).once().then((DataSnapshot snap) {
      final String userName = snap.value['name'].toString();
      print(userName);
      return userName;
    });
  }

推荐阅读