dart 从Firebase实时数据库中提取标记并显示在Map上

nkkqxpd9  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(112)

我有数据存储在实时数据库上的Firebase.我想显示这些标记在我的Map.我使用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,
                ),


我得到这个错误
无法将参数类型“FunctionFunction(DataSnapshot)”分配给参数类型“FutureOr Function(DatabaseEvent)”。
我试图让多个标记显示在Map上。

dzhpxtsq

dzhpxtsq1#

解决了

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;
  }

字符串

相关问题