firebase - 如何使用 Flutter/Dart 在 FirebaseDatabase 中获取值的键?

标签 firebase flutter dart firebase-realtime-database

我正在尝试获取已从数据库返回的 child 的 key 。在下面的示例中,我将用户选为 Carlos Sainz,我正在尝试获取“csainz”,但是下面的代码返回“email”。

    DatabaseReference keyRef = FirebaseDatabase.instance.reference();
    await keyRef.child('users')
        .child('email')
        .equalTo(userList[0].email) // userList[0].email returns Carlos' email
        .once()
        .then((DataSnapshot dataSnapshot) {
          String newKey = dataSnapshot.key;
          print(newKey);
    });

这是我的数据库的设置方式:
enter image description here

最佳答案

两个问题:

  • 要对每个子节点的特定属性进行排序/过滤,您需要使用 orderByChild(...)而不仅仅是child(...) .现在你的代码是 /users/email ,这是不存在的。
  • 当您对 Firebase 数据库执行查询时,可能会有多个结果。所以快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
    您的代码不处理列表,但打印执行查询的位置的键:users .

  • 所以修复两者看起来像这样:
    DatabaseReference keyRef = FirebaseDatabase.instance.reference();
    await keyRef.child('users')
        .orderByChild('email')
        .equalTo(userList[0].email)
        .onChildAdded.listen((Event event) {
          print('${event.snapshot.key}');
        }, onError: (Object o) {
          final DatabaseError error = o;
          print('Error: ${error.code} ${error.message}');
        });
    });
    
    您也可以使用.once().then(...)但随后将转换 dataSnapshot.value到 map ,并显示该 map 中的键。不检查,但应该是这样的:
    DatabaseReference keyRef = FirebaseDatabase.instance.reference();
    await keyRef.child('users')
        .orderByChild('email')
        .equalTo(userList[0].email)
        .once()
        .then((DataSnapshot dataSnapshot) {
          String newKey = dataSnapshot.value.keys[0];
          print(newKey);
        });
    

    关于firebase - 如何使用 Flutter/Dart 在 FirebaseDatabase 中获取值的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62183648/

    相关文章:

    firebase - 从回收者 View 中选择用户数据后,将其加载到新事件中

    javascript - 尝试加载Firebase时与Electron发生内容安全冲突

    javascript - Vuex 和 Firebase 存储状态错误

    ios - 构建iOS应用程序(Flutter)时出错,Android运行顺利。 STRIPEAPPLEPAY Pod 错误

    flutter - 我想将数据从第二屏幕传递到第一屏幕

    android - 有没有办法将我的文档 ID 映射到 toObject?

    flutter - Flutter中API获取数据后如何导航到新屏幕?

    firebase - Flutter Firebase child 数量

    flutter - 如何通过单击不同的按钮将不同的元素添加到ListView.builder?

    android - Flutter Listview 在使用 FutureBuilder 加载缩略图时卡住