我想在使用 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 连接。
我想将额外的数据放在数据库中的节点上,这个节点是使用 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
中查找它们的属性。对多个驱动程序执行此操作并不像您最初预期的那么慢,因为