我的数据存储在 Firebase 的实时数据库中。我想在我的地图上显示这些标记。我正在使用 Flutter,google_maps_flutter 包。我必须将这些纬度和经度坐标显示为标记位置。
Firebase RTB
{
"Rooms": {
"-NlRyq2YpbOVTbI2G4nb": {
"latitude": "12.901715224349228",
"longitude": "74.98462345451117",
"roomLocation": "new",
"roomName": "new"
},
"-NlRz4ZDgp5IUOLA9J4w": {
"latitude": "12.899229153743564",
"longitude": "74.9857271835208",
"roomLocation": "right",
"roomName": "right"
}
}
}
我哪里出错了?
final databaseReference = FirebaseDatabase.instance.ref().child('Rooms');
@override
void initState() {
super.initState();
_fetchMarkers();
}
void _fetchMarkers() {
databaseReference.child('Rooms').once().then((DataSnapshot snapshot) {
Map<dynamic, dynamic> values = snapshot.value as Map<dynamic, dynamic>;
values.forEach((key, values) {
markers.add(Marker(
markerId: MarkerId(key),
position: LatLng(
double.parse(values['latitude'].toString()),
double.parse(values['longitude'].toString()),
),
infoWindow: InfoWindow(
title: values['roomName'].toString(),
snippet: values['roomLocation'].toString(),
),
));
});
setState(() {});
});
}
小部件构建
GoogleMap(
onMapCreated: onMapCreated,
initialCameraPosition: _kGooglePlex,
myLocationButtonEnabled: true,
myLocationEnabled: true,
// markers: Set.from(_markers),
markers: markers,
),
我收到此错误
The argument type 'Null Function(DataSnapshot)' can't be assigned to the parameter type 'FutureOr<dynamic> Function(DatabaseEvent)'.
我正在尝试在地图上显示多个标记。
解决了。
DatabaseReference databaseReference = FirebaseDatabase.instance.ref();
Set<Marker> markers = {};
@override
void initState() {
super.initState();
_fetchMarkers();
}
_fetchMarkers() {
databaseReference.child('Rooms').get().then((DataSnapshot snapshot) {
Map<dynamic, dynamic> values = snapshot.value as Map<dynamic, dynamic>;
values.forEach((key, values) {
markers.add(Marker(
markerId: MarkerId(key),
position: LatLng(
double.parse(values['latitude'].toString()),
double.parse(values['longitude'].toString()),
),
infoWindow: InfoWindow(
title: values['roomName'].toString(),
snippet: values['roomLocation'].toString(),
),
));
});
setState(() {
// markers = markers;
});
});
return markers;
}