如何用 google_maps_flutter 添加标记?
How add marker with google_maps_flutter?
我正在使用google_maps_flutter,我想知道如何在点击地图某处时添加标记。我是 flutter 新手。
import 'dart:async';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class SearchGaragesInMapScreenMap extends StatefulWidget {
@override
State<SearchGaragesInMapScreenMap> createState() =>
SearchGaragesInMapScreenMapState();
}
class SearchGaragesInMapScreenMapState
extends State<SearchGaragesInMapScreenMap> {
final Completer<GoogleMapController> _controller = Completer();
LatLng _myPosition = const LatLng(-12.0316827, -77.0492965);
BitmapDescriptor _markerIcon = BitmapDescriptor.defaultMarker;
@override
void initState() {
super.initState();
_getMyPosition();
}
@override
Widget build(BuildContext context) {
return GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: _myPosition, zoom: 15),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: {
_positionMarker(
'1',
_myPosition.latitude,
_myPosition.longitude,
/*AppMarkers.myMarker, 55, 35*/
)
},
zoomControlsEnabled: false,
);
}
Marker _positionMarker(String id, double latitude, double longitude,
[String iconUrl, double iconWidth = 18, double iconHeight = 40]) {
_setMarkerIcon(iconUrl, iconWidth, iconHeight);
log('$_markerIcon');
return Marker(
markerId: MarkerId(id),
position: LatLng(latitude, longitude),
icon: _markerIcon);
}
void _getMyPosition() async {
final Position _position = await _determinePosition();
setState(() {
_myPosition = LatLng(_position.latitude, _position.longitude);
});
}
void _setMarkerIcon(
[String iconUrl, double iconWidth, double iconHeight]) async {
if (iconUrl != null) {
final BitmapDescriptor _icon = await BitmapDescriptor.fromAssetImage(
ImageConfiguration(size: Size(iconWidth, iconHeight)), iconUrl);
setState(() {
_markerIcon = _icon;
});
}
}
}
Future<Position> _determinePosition() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator
.isLocationServiceEnabled(); // Verifica si este disp. tiene los servicios de ubicacion habilitados
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission =
await Geolocator.checkPermission(); // El usuario de permisos de ubicación
if (permission == LocationPermission.deniedForever) {
return Future.error(
'Location permissions are permantly denied, we cannot request permissions.');
}
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission != LocationPermission.whileInUse &&
permission != LocationPermission.always) {
return Future.error(
'Location permissions are denied (actual value: $permission).');
}
}
return await Geolocator.getCurrentPosition();
}
这是我的代码,我从 pub.dev 页面获得的代码。如果它给我显示了设备上的地图,那么就没有问题了。
第一次在flutter中使用地图,有点迷茫。
如果您有任何文档、教程或视频,那将非常有帮助。
您可以使用 onTap
回调。
Set<Marker> markers = { _positionMarker(
'1',
_myPosition.latitude,
_myPosition.longitude,
/*AppMarkers.myMarker, 55, 35*/
)};
Widget build(BuildContext context) {
return GoogleMap(
onTap: (position) => createCurrentMarker(position),
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: _myPosition, zoom: 15),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: markers,
zoomControlsEnabled: false,
);
}
//this is your add marker function
void createCurrentMarker(LatLng position) async {
setState(() {
markers.add(Marker(markerId: MarkerId('new location'), position: position
));
});
}
我正在使用google_maps_flutter,我想知道如何在点击地图某处时添加标记。我是 flutter 新手。
import 'dart:async';
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class SearchGaragesInMapScreenMap extends StatefulWidget {
@override
State<SearchGaragesInMapScreenMap> createState() =>
SearchGaragesInMapScreenMapState();
}
class SearchGaragesInMapScreenMapState
extends State<SearchGaragesInMapScreenMap> {
final Completer<GoogleMapController> _controller = Completer();
LatLng _myPosition = const LatLng(-12.0316827, -77.0492965);
BitmapDescriptor _markerIcon = BitmapDescriptor.defaultMarker;
@override
void initState() {
super.initState();
_getMyPosition();
}
@override
Widget build(BuildContext context) {
return GoogleMap(
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: _myPosition, zoom: 15),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: {
_positionMarker(
'1',
_myPosition.latitude,
_myPosition.longitude,
/*AppMarkers.myMarker, 55, 35*/
)
},
zoomControlsEnabled: false,
);
}
Marker _positionMarker(String id, double latitude, double longitude,
[String iconUrl, double iconWidth = 18, double iconHeight = 40]) {
_setMarkerIcon(iconUrl, iconWidth, iconHeight);
log('$_markerIcon');
return Marker(
markerId: MarkerId(id),
position: LatLng(latitude, longitude),
icon: _markerIcon);
}
void _getMyPosition() async {
final Position _position = await _determinePosition();
setState(() {
_myPosition = LatLng(_position.latitude, _position.longitude);
});
}
void _setMarkerIcon(
[String iconUrl, double iconWidth, double iconHeight]) async {
if (iconUrl != null) {
final BitmapDescriptor _icon = await BitmapDescriptor.fromAssetImage(
ImageConfiguration(size: Size(iconWidth, iconHeight)), iconUrl);
setState(() {
_markerIcon = _icon;
});
}
}
}
Future<Position> _determinePosition() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator
.isLocationServiceEnabled(); // Verifica si este disp. tiene los servicios de ubicacion habilitados
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission =
await Geolocator.checkPermission(); // El usuario de permisos de ubicación
if (permission == LocationPermission.deniedForever) {
return Future.error(
'Location permissions are permantly denied, we cannot request permissions.');
}
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission != LocationPermission.whileInUse &&
permission != LocationPermission.always) {
return Future.error(
'Location permissions are denied (actual value: $permission).');
}
}
return await Geolocator.getCurrentPosition();
}
这是我的代码,我从 pub.dev 页面获得的代码。如果它给我显示了设备上的地图,那么就没有问题了。
第一次在flutter中使用地图,有点迷茫。 如果您有任何文档、教程或视频,那将非常有帮助。
您可以使用 onTap
回调。
Set<Marker> markers = { _positionMarker(
'1',
_myPosition.latitude,
_myPosition.longitude,
/*AppMarkers.myMarker, 55, 35*/
)};
Widget build(BuildContext context) {
return GoogleMap(
onTap: (position) => createCurrentMarker(position),
mapType: MapType.normal,
initialCameraPosition: CameraPosition(target: _myPosition, zoom: 15),
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
},
markers: markers,
zoomControlsEnabled: false,
);
}
//this is your add marker function
void createCurrentMarker(LatLng position) async {
setState(() {
markers.add(Marker(markerId: MarkerId('new location'), position: position
));
});
}