从 Firebase 实时数据库检索标记并显示在地图上

问题描述 投票:0回答:1

我的数据存储在 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)'.

我正在尝试在地图上显示多个标记。

flutter firebase dart firebase-realtime-database google-maps-flutter
1个回答
0
投票

解决了。

  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;
  }
© www.soinside.com 2019 - 2024. All rights reserved.