【问题标题】:Unable to find if a node exists in realtime database无法查找节点是否存在于实时数据库中
【发布时间】:2022-01-02 14:01:08
【问题描述】:

我有一个 firebase 实时树,它在用户在线时设置了一个特定的节点 New Ride,当用户离线时,节点 New Ride 被删除。这第一次可以正常工作,当用户尝试再次上网时,我无法设置节点。如果不添加,我想检查节点是否已经存在于树中。

这是我目前的代码

DatabaseReference rideRequestRef = FirebaseDatabase(databaseURL: firebaseUrl)
    .reference()
    .child("Drivers")
    .child(currentFirebaseUser.uid)
    .child("New Ride");
var ref = FirebaseDatabase(databaseURL: firebaseUrl)
        .reference()
        .child("Drivers")
        .child(currentFirebaseUser.uid);

    await ref
        //.child(currentFirebaseUser.uid)
        .child("New Ride")
        .once()
        .then((DataSnapshot dataSnapshot) {
      if (dataSnapshot == null) {
       
        rideRequestRef.set("searching");
      } else {
        rideRequestRef.set("searching");
       
      }
    });
   
    rideRequestRef.onValue.listen((event) {});
  }

【问题讨论】:

  • 您使解决方案过于复杂。为什么要删除节点?相反,覆盖它;它会更简单,成本更低。将 new_ride_status 的节点设置为 search 或相反,检查其状态,如果状态发生变化,则使用 set 覆盖任何其他详细信息。然后可以将侦听器附加到状态,并且每次删除节点时都不必重新设置。

标签: flutter firebase-realtime-database


【解决方案1】:

这里给出你的代码:

await ref
    //.child(currentFirebaseUser.uid)
    .child("New Ride")
    .once()
    .then((DataSnapshot dataSnapshot) {
  if (dataSnapshot == null) {       
    rideRequestRef.set("searching");
  } else {
    rideRequestRef.set("searching");       
  }
});

似乎节点是否存在对您的操作没有影响。那么为什么不用这个替换整个片段呢?

rideRequestRef.set("searching");       

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多