我想在使用 geofire (Flutter) 创建的实时数据库节点中放置额外信息

I want to Put extra information at realtime database node created using geofire (Flutter)

我想将额外的数据放在数据库中的节点上,这个节点是使用 geofire 创建的,当我尝试将此信息显示在数据库中时,然后像下面这样隐藏,

availableDrivers
   3gDKSbnMEBYZsZDwL6lmiQerP9P2
       g: 
         "stq5ncg7kr"
       l
        0: 30.0688058
        1: 31.2387825

我想添加额外的信息,例如

availableDrivers
   3gDKSbnMEBYZsZDwL6lmiQerP9P2
       g: 
         "stq5ncg7kr"
       l
        0: 30.0688058
        1: 31.2387825
      name: bishoy
      age: 24

他们在我的代码下方添加但随后隐藏或删除。

主要


DatabaseReference adminRef = FirebaseDatabase.instance.reference().child("admin");
DatabaseReference driversRef = FirebaseDatabase.instance.reference().child("drivers");
DatabaseReference newRequestRef = FirebaseDatabase.instance.reference().child("Ride Request");
DatabaseReference rideRequestRef = FirebaseDatabase.instance.reference().child("drivers").child(currentfirebaseUser!.uid).child("newRide");
DatabaseReference availableDriver = FirebaseDatabase.instance.reference().child("availableDrivers").child(currentfirebaseUser!.uid);

生成可用驱动程序的函数,我把我的额外信息放在它们

 void makeDriverOnlineNow() async
  {
    Position position = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    currentPosition = position;

    Map<String, dynamic> driverMap = {
      "name" : driversInformation!.name,
      "phone" : driversInformation!.phone,
    };

    Geofire.initialize("availableDrivers");
    Geofire.setLocation(currentfirebaseUser!.uid, currentPosition!.latitude, currentPosition!.longitude);
    await availableDriver.update(driverMap);

    rideRequestRef.set("searching");
    rideRequestRef.onValue.listen((event) {

    });
  }

void getLocationLiveUpdates()
  {
    homeTabPageStreamSubscription = Geolocator.getPositionStream().listen((Position position)
    {
      currentPosition = position;
      if(isDriverAvailable == true)
      {
        Geofire.setLocation(currentfirebaseUser!.uid, position.latitude, position.longitude);
      }
      LatLng latLng = LatLng(position.latitude, position.longitude);
      newcontrollerGoogleMap!.animateCamera(CameraUpdate.newLatLng(latLng));
    });
  }

似乎无法在 flutter_geofire 中将您自己的数据添加到它管理的节点。在 Firebase 本身提供的 GeoFire 实现中,只有 Android 库允许您将自己的数据添加到地理定位节点,我承认我不是它的忠实粉丝。

要保留您自己的数据,请像这样设置您的数据库:

driverLocations: {
  // geolocation data, managed by geofire
  "3gDKSbnMEBYZsZDwL6lmiQerP9P2": {
    "g": "stq5ncg7kr",
    "l": [30.0688058, 31.2387825]
  }
},
drivers: {
  // driver properties, managed by you
  "3gDKSbnMEBYZsZDwL6lmiQerP9P2": {
    name: "bishoy",
    age: 24
  }
  }
}

现在很清楚哪些数据由谁管理,您通常只会通过 GeoFire 访问 driverLocations 数据。从 GeoFire 获得驱动程序的密钥后,您可以从 /drivers/$key 中查找它们的属性。对多个驱动程序执行此操作并不像您最初预期的那么慢,因为 通过单个 WebSocket 连接。