firebase - 加入两个节点的 flutter firebase_database

标签 firebase plugins firebase-realtime-database dart flutter

通常,您可以在 javascript 中使用 map 函数来更新返回的数据。我似乎无法在 Dart Streams 中找到允许这样做的方法。

例子 https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html

var fb = new Firebase("https://examples-sql-queries.firebaseio.com/");
fb.child('user/123').once('value', function(userSnap) {
   fb.child('media/123').once('value', function(mediaSnap) {
       // extend function: https://gist.github.com/katowulf/6598238
       console.log( extend({}, userSnap.val(), mediaSnap.val()) );
   });
});

我正在尝试使用 flutter firebase_database。

  var _fireFollower =FirebaseDatabase.instance.reference()
      .child('followers/' + auth.currentUser.uid);
  _fireFollower.onValue.map((snap){
    print(snap.snapshot.key);
  });

但是 map 函数永远不会被调用,所以当它从 Firebase 获取时我无法加入任何其他数据。

此外,我尝试使用的是 FirebaseAnimatedList,所以如果我不做 map ,我该如何传递查询?

new FirebaseAnimatedList(
query: _fireFollower,
  sort: (a, b) => b.key.compareTo(a.key),
  padding: new EdgeInsets.all(8.0),
  reverse: false,
  itemBuilder: (_, DataSnapshot snapshot,
    Animation<double> animation) {
    return new Activity(
     snapshot: snapshot, animation: animation);
    },
    ),

最佳答案

在Flutter中,DatabaseReference.onValue是一个Stream,所以你必须调用Stream.listen听完之后取消 StreamSubscription。如果您只想获取一个值事件,则应改为调用 once() 来获取表示快照值的 Future。完成后,您将获得快照。

Future.wait([fb.child('media/123').once(), fb.child('user/123').once()])
  .then((snapshots) => print("Snapshots are ${snapshots[0]} ${snapshots[1]}"));

如果您在 async 函数中执行此操作,这会更简单,因为您只需调用 await 即可获得 once() 的结果>:

print("Snapshots are ${await ref1.once()} ${await ref2.once()}");

关于firebase - 加入两个节点的 flutter firebase_database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44185979/

相关文章:

android - 超出 Firebase 实时数据库限制

java - 如何在数据库中检索唯一 ID 键

ruby-on-rails - HAML 如何识别 block 的结尾?

android - Android 平台上的浏览器插件查询(Froyo 2.2.1 版本)

javascript - Firebase 持久性 - onDisconnect 与多个浏览器窗口

firebase - Cloud Functions for Firebase - 获取当前用户 ID

c++ - C++11 的 Vim 语法高亮显示不会混淆其他高亮显示。例如,类/命名空间范围

java - 与 Firebase 数据库集成的 Spring 代码在 IDE 上运行良好,但在 Tomcat 上运行不佳

java - Firestore 查询文档以字符串开头

javascript - 处理 ListView 的嵌套 JSON 数据