【发布时间】:2021-02-26 15:38:31
【问题描述】:
我在地图中心显示谷歌地图和简单的标记。我需要做的是我需要在标记所在的位置打印更新的 long 和 lat 值。我只需要打印值。
我的代码
class MapSample extends StatefulWidget {
@override
State<MapSample> createState() => MapSampleState();
}
class MapSampleState extends State<MapSample> {
Completer<GoogleMapController> _controller = Completer();
LatLng currentPostion;
bool showMap = false;
Map<MarkerId, Marker> _markers = <MarkerId, Marker>{};
int _markerIdCounter = 0;
Completer<GoogleMapController> _mapController = Completer();
@override
void initState() {
_getUserLocation();
}
void _onMapCreated(GoogleMapController controller) async {
_mapController.complete(controller);
if (currentPostion != null) {
MarkerId markerId = MarkerId(_markerIdVal());
LatLng position = currentPostion;
Marker marker = Marker(
markerId: markerId,
position: position,
draggable: false,
);
setState(() {
_markers[markerId] = marker;
});
Future.delayed(Duration(seconds: 1), () async {
GoogleMapController controller = await _mapController.future;
controller.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: position,
zoom: 17.0,
),
),
);
});
}
}
String _markerIdVal({bool increment = false}) {
String val = 'marker_id_$_markerIdCounter';
if (increment) _markerIdCounter++;
print(val);
return val;
}
void _getUserLocation() async {
var position = await GeolocatorPlatform.instance
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
setState(() {
currentPostion = LatLng(position.latitude, position.longitude);
showMap = true;
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text(
'Select Location',
style: Theme.of(context).textTheme.headline4,
).tr(),
),
body: showMap
? Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: GoogleMap(
markers: Set<Marker>.of(_markers.values),
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: currentPostion,
zoom: 18.0,
),
myLocationEnabled: true,
onCameraMove: (CameraPosition position) {
if (_markers.length > 0) {
MarkerId markerId = MarkerId(_markerIdVal());
Marker marker = _markers[markerId];
Marker updatedMarker = marker.copyWith(
positionParam: position.target,
);
setState(() {
_markers[markerId] = updatedMarker;
});
}
},
),
)
: Center(
child: SpinKitWave(
color: kPrimaryColor, type: SpinKitWaveType.center)),
);
}
}
我只需要在标记所在的位置打印更新后的经纬度。它工作正常标记正在改变它的位置,但没有给出价值,或者我不知道我该怎么做。我不想使用可拖动指针选项,所以尝试这种方式。
【问题讨论】:
-
您想在调用
onCameraMove时打印这些值吗?如果是这样,position.target的类型为LatLng,因此您可以访问其上的latitude和longitude属性。