如何在 google flutter 地图中添加多个标记
How to add multiple markers inside google maps of flutter
我试图在我的 google 地图屏幕中添加多个标记..但我不知道该怎么做..我在一些文章中应用了一些示例..但是我收到一个错误...这是我的部分代码...
GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(...,...),
zoom: 18.0,
),
markers: Set.of([marker]), // here I want to add multiple markers
onMapCreated: _onMapCreated,
)
有添加多个标记的简单方法吗?
这里是标记的代码
void loc(LocationData a) {
LatLng latlng = LatLng(a.latitude, a.longitude);
this.setState(() {
marker = Marker(
markerId: MarkerId("mine"),
position: latlng,
icon: BitmapDescriptor.defaultMarker,
draggable: false,
zIndex: 1,
);
});
}
google_maps_flutter 提供了添加多个标记的示例:place marker,您应该检查一下:
void _add() {
final int markerCount = markers.length;
if (markerCount == 12) {
return;
}
final String markerIdVal = 'marker_id_$_markerIdCounter';
_markerIdCounter++;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position: LatLng(
center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
),
infoWindow: InfoWindow(title: markerIdVal, snippet: '*'),
onTap: () {
_onMarkerTapped(markerId);
},
onDragEnd: (LatLng position) {
_onMarkerDragEnd(markerId, position);
},
);
setState(() {
markers[markerId] = marker;
});
}
更新:
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: const CameraPosition(
target: LatLng(-33.852, 151.211),
zoom: 11.0,
),
// TODO(iskakaushik): Remove this when collection literals makes it to stable.
// https://github.com/flutter/flutter/issues/28312
// ignore: prefer_collection_literals
markers: Set<Marker>.of(markers.values),
),
void loc(LocationData a) {
LatLng latlng = LatLng(a.latitude, a.longitude);
final Marker marker = Marker(
markerId: MarkerId("mine"),
position: latlng,
icon: BitmapDescriptor.defaultMarker,
draggable: false,
zIndex: 1,
);
setState(() {
markers[markerId] = marker;
});
}
我使用 GetX 的实现,但对所有人理解逻辑很有用:
控制器:
class MapController extends GetxController {
Map<MarkerId, Marker> markers = <MarkerId, Marker>{}.obs;
@override
void onInit() {
super.onInit();
generateMarkers();
}
generateMarkers() {
int count = 0;
for (var item in _markers) {
count += 1;
final String markerIdVal = 'marker_id_' + count.toString();
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position: LatLng(
double.parse(item[1].toString()),
double.parse(item[2].toString()),
),
infoWindow:
InfoWindow(title: item[0].toString(), snippet: 'Content'),
);
markers[markerId] = marker;
}
}
final _markers = [
[
'Rektörlük',
40.972877,
29.152653,
'/assets/img/number_1_3.png',
'rektorluk'
],
[
'Mühendislik',
40.972443,
29.151457,
'/assets/img/number_2_3.png',
'muhendislik'
]
// Continues
];
}
查看:
class MapView extends GetView<MapController> {
final Completer<GoogleMapController> _controller = Completer();
static final CameraPosition _kYeditepe =
CameraPosition(target: LatLng(40.971991, 29.152793), zoom: 17, tilt: 17);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: backAppBar(context, 'MAP'.tr),
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _kYeditepe,
markers: Set<Marker>.of(controller.markers.values),
onMapCreated: (GoogleMapController mapController) {
rootBundle.loadString('assets/map_styles.txt').then((string) {
String _mapStyle = string;
mapController.setMapStyle(_mapStyle);
_controller.complete(mapController);
});
},
),
);
}
}
我试图在我的 google 地图屏幕中添加多个标记..但我不知道该怎么做..我在一些文章中应用了一些示例..但是我收到一个错误...这是我的部分代码...
GoogleMap(
initialCameraPosition: const CameraPosition(
target: LatLng(...,...),
zoom: 18.0,
),
markers: Set.of([marker]), // here I want to add multiple markers
onMapCreated: _onMapCreated,
)
有添加多个标记的简单方法吗?
这里是标记的代码
void loc(LocationData a) {
LatLng latlng = LatLng(a.latitude, a.longitude);
this.setState(() {
marker = Marker(
markerId: MarkerId("mine"),
position: latlng,
icon: BitmapDescriptor.defaultMarker,
draggable: false,
zIndex: 1,
);
});
}
google_maps_flutter 提供了添加多个标记的示例:place marker,您应该检查一下:
void _add() {
final int markerCount = markers.length;
if (markerCount == 12) {
return;
}
final String markerIdVal = 'marker_id_$_markerIdCounter';
_markerIdCounter++;
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position: LatLng(
center.latitude + sin(_markerIdCounter * pi / 6.0) / 20.0,
center.longitude + cos(_markerIdCounter * pi / 6.0) / 20.0,
),
infoWindow: InfoWindow(title: markerIdVal, snippet: '*'),
onTap: () {
_onMarkerTapped(markerId);
},
onDragEnd: (LatLng position) {
_onMarkerDragEnd(markerId, position);
},
);
setState(() {
markers[markerId] = marker;
});
}
更新:
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: const CameraPosition(
target: LatLng(-33.852, 151.211),
zoom: 11.0,
),
// TODO(iskakaushik): Remove this when collection literals makes it to stable.
// https://github.com/flutter/flutter/issues/28312
// ignore: prefer_collection_literals
markers: Set<Marker>.of(markers.values),
),
void loc(LocationData a) {
LatLng latlng = LatLng(a.latitude, a.longitude);
final Marker marker = Marker(
markerId: MarkerId("mine"),
position: latlng,
icon: BitmapDescriptor.defaultMarker,
draggable: false,
zIndex: 1,
);
setState(() {
markers[markerId] = marker;
});
}
我使用 GetX 的实现,但对所有人理解逻辑很有用:
控制器:
class MapController extends GetxController {
Map<MarkerId, Marker> markers = <MarkerId, Marker>{}.obs;
@override
void onInit() {
super.onInit();
generateMarkers();
}
generateMarkers() {
int count = 0;
for (var item in _markers) {
count += 1;
final String markerIdVal = 'marker_id_' + count.toString();
final MarkerId markerId = MarkerId(markerIdVal);
final Marker marker = Marker(
markerId: markerId,
position: LatLng(
double.parse(item[1].toString()),
double.parse(item[2].toString()),
),
infoWindow:
InfoWindow(title: item[0].toString(), snippet: 'Content'),
);
markers[markerId] = marker;
}
}
final _markers = [
[
'Rektörlük',
40.972877,
29.152653,
'/assets/img/number_1_3.png',
'rektorluk'
],
[
'Mühendislik',
40.972443,
29.151457,
'/assets/img/number_2_3.png',
'muhendislik'
]
// Continues
];
}
查看:
class MapView extends GetView<MapController> {
final Completer<GoogleMapController> _controller = Completer();
static final CameraPosition _kYeditepe =
CameraPosition(target: LatLng(40.971991, 29.152793), zoom: 17, tilt: 17);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: backAppBar(context, 'MAP'.tr),
body: GoogleMap(
mapType: MapType.normal,
initialCameraPosition: _kYeditepe,
markers: Set<Marker>.of(controller.markers.values),
onMapCreated: (GoogleMapController mapController) {
rootBundle.loadString('assets/map_styles.txt').then((string) {
String _mapStyle = string;
mapController.setMapStyle(_mapStyle);
_controller.complete(mapController);
});
},
),
);
}
}