【问题标题】:I want to Put extra information at realtime database node created using geofire (Flutter)我想将额外信息放在使用 geofire (Flutter) 创建的实时数据库节点上
【发布时间】:2022-01-24 23:18:18
【问题描述】:

我想在数据库中的节点上放置额外的数据,这个节点是使用 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 dart firebase-realtime-database geofire


    【解决方案1】:

    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 查找其属性。为多个驱动程序执行此操作并不像您最初预期的那么慢,因为Firebase pipelines the requests 通过单个 WebSocket 连接。

    【讨论】:

    • 首先感谢您的帮助和您的时间,但我的数据现在像您写的那样在数据库中,我想从可用驱动程序中列出一个列表并从驱动程序节点获取一些信息,但我不能这样做,因为我想把这些数据放在可用的位置,因为很容易从可用的驱动程序中创建一个列表
    • 客户端连接确实在代码中更加挑剔,所以如果您在完成这项工作时遇到问题,我建议您创建一个显示 where you got stuck 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2020-11-27
    • 2022-11-27
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多