似乎一切都写得正确,但我不明白为什么它不能在地图上显示我的位置。
为什么不显示我的位置?
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MyMap extends StatefulWidget {
@override
MyMapState createState() => MyMapState();
}
class MyMapState extends State<MyMap> {
GoogleMapController mapController;
final LatLng _center = const LatLng(50.006406, 36.236484);
void _onMapCreated(GoogleMapController controller) {
mapController = controller;
mapController.addMarker(
MarkerOptions(
position: LatLng(50.006406, 36.236484),
infoWindowText: InfoWindowText('My Location', 'Office'),
icon: BitmapDescriptor.defaultMarker,
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Map'),
backgroundColor: Colors.green[700],
),
body: GoogleMap(
onMapCreated: _onMapCreated,
options: GoogleMapOptions(
scrollGesturesEnabled: true,
tiltGesturesEnabled: true,
rotateGesturesEnabled: true,
myLocationEnabled: true,
compassEnabled: true,
cameraPosition: CameraPosition(
target: _center,
zoom: 11.0,
),
),
),
);
}
}
答案 0 :(得分:2)
您需要使用Flutter的location包来跟踪用户的位置,并且需要将此功能添加到代码中
_getLocation() async {
var location = new Location();
try {
currentLocation = await location.getLocation();
print("locationLatitude: ${currentLocation["latitude"]}");
print("locationLongitude: ${currentLocation["longitude"]}");
setState(
() {}); //rebuild the widget after getting the current location of the user
} on Exception {
currentLocation = null;
}
}
应在您的initState()
函数中按如下所示调用此函数
@override
void initState() {
_getLocation();
super.initState();
}
并且不要忘记将位置信息包导入到您的代码中,
import 'package:location/location.dart';
请按照位置包的安装指南进行操作,因为您需要在AndroidManifest.xml
(对于Android)和info.plist
(对于iphone)中添加位置许可
位置包将负责在运行时向用户请求位置权限
希望有帮助,祝你好运
答案 1 :(得分:1)
您必须提供对当前位置的访问权限 ios:Info.plist
<key>NSLocationWhenInUseUsageDescription</key>
<string>Application needs to access your current location</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Application needs to access your current location</string>
android:AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
答案 2 :(得分:1)
如果您想在地图上查看您的当前位置,并启用右下角的 FAB 功能,请确保您拥有该属性在您的GoogleMap小部件上将myLocationEnabled 设置为 true 。
[...]
body: GoogleMap(
myLocationEnabled: true,
[...]
)
答案 3 :(得分:0)
我建议使用以下方法。首先,将LocationData设置为currentLocation; var location = new Location();在global中创建第二个方法,然后创建myCurrentLocation()方法,最后使用它initState()或单击按钮。不要忘记在AndroidMainfest.xml和此类路径'com.google.gms:google-services:4.3.2'android中导入/build.gradle。
LocationData currentLocation;
var location = new Location();
myCurrentLocation() async{
try {
currentLocation = await location.getLocation();
print("locationLatitude: ${currentLocation.latitude.toString()}");
print("locationLongitude: ${currentLocation.longitude.toString()}");
} on PlatformException catch (e) {
if (e.code == 'PERMISSION_DENIED') {
String error = 'Permission denied';
print(error);
}
currentLocation = null;
}}
答案 4 :(得分:0)
GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: _center,
zoom: 13.0,
),
myLocationEnabled: true,
onCameraMove: _onCameraMove,
myLocationButtonEnabled: true,
答案 5 :(得分:0)
不仅 myLocationButtonEnabled 足够你还需要
myLocationEnabled: true,