【发布时间】:2021-09-12 07:14:33
【问题描述】:
我正在尝试从从 firebase 读取的坐标中添加多个标记。它读取所有坐标并存储在列表中。我创建了 addMarker 函数来将标记添加到地图中。但它只打印一个标记,读取最后一个标记坐标。谁能帮我解决这个问题,因为我是新手。
import 'package:flutter/material.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'dart:async';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final textcontroller = TextEditingController();
final databaseRef = FirebaseDatabase.instance.reference();
Completer<GoogleMapController> _controller = Completer();
Map<MarkerId, Marker> markers = <MarkerId, Marker>{};
double latitude = 0;
double longitude = 0;
var myList = [];
List<LatLng> list = [];
void initState() {
super.initState();
setState(() {
firebaseRead();
});
}
void firebaseRead() {
databaseRef.child('Locations').onValue.listen((Event event) {
myList = event.snapshot.value;
setState(() {
for (int x = 0; x < myList.length; x++) {
double latitude = myList[x]['lat'];
double longitude = myList[x]['long'];
LatLng location = new LatLng(latitude, longitude);
if (list.contains(location)) {
list.clear();
list.add(location);
} else {
list.add(location);
}
addMarker(list[x]);
}
});
});
//print(list);
}
void addMarker(loc) {
final MarkerId markerId = MarkerId('Marker 1');
final Marker marker = Marker(
markerId: markerId,
position: LatLng(loc.latitude, loc.longitude),
infoWindow: InfoWindow(title: 'test'),
);
setState(() {
// adding a new marker to map
markers[markerId] = marker;
//print(marker);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Firebase Demo"),
),
body: GoogleMap(
mapType: MapType.normal,
markers: Set.of(markers.values),
initialCameraPosition:
CameraPosition(target: LatLng(6.9271, 79.8612), zoom: 15),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
firebaseRead();
},
label: const Text('Refresh'),
icon: const Icon(Icons.refresh),
backgroundColor: Colors.blueAccent,
),
);
}
}
【问题讨论】:
-
这是因为您只有一个
MarkerId,所以在调用markers[markerId] = marker;后,地图markers将始终只有一个项目 -
你能告诉我为所有坐标点添加markerId的方法吗?
-
final MarkerId markerId = MarkerId(loc.toString());也许? (假设loc.toString()返回有效的唯一String) -
谢谢。它有效。
标签: android firebase flutter google-maps google-maps-markers