Flutter 地理定位不显示任何内容
Flutter geolocation not showing anything
我是 Flutter 的新手,正在尝试创建地理定位。
但是,对于我的以下代码,屏幕仅显示 'Loading.. Please wait..' 而地图未显示。
我只是想使用依赖项显示当前位置
geolocator: ^6.1.1
使用
中的代码
https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#3
Google地图可以显示成功。所以这不是与 Google Maps Platform 相关的问题。
// home.dart
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool mapToggle = false;
var currentLocation;
GoogleMapController mapController;
@override
void initState() {
// TODO: implement initState
super.initState();
Geolocator.getCurrentPosition().then((currloc) {
setState(() {
currentLocation = currloc;
mapToggle = true;
});
});
}
void _onMapCreated(controller) {
setState(() {
mapController = controller;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Column(children: <Widget>[
Stack(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height - 80.0,
width: double.infinity,
child: mapToggle
? GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: LatLng(currentLocation.latitude,
currentLocation.longitude),
zoom: 10.0))
: Center(
child: Text(
'Loading.. Please wait..',
style: TextStyle(fontSize: 20.0),
)))
],
)
]),
);
}
}
正如@theredcap 在他的评论中已经指出的那样,您很可能没有必要的权限。始终阅读您正在使用的插件的 documentation。
我没看到:
LocationPermission permission = await Geolocator.checkPermission();
我也看不到:
LocationPermission permission = await Geolocator.requestPermission();
在您的代码中,但插件文档清楚地解释了该部分。此外,如果您总体上是 Android 的新手,请查看:https://developer.android.com/training/location/permissions
在你的 AndroidManifest 添加权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化变量
Position _currentPosition;
复制这个函数并在initState中调用这个
_getCurrentLocation() async{
Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
.then((Position position) {
setState(() {
_currentPosition = position;
});
}).catchError((e) {
print(e);
});
}
有关更多信息,请查看他们的 pub.dev 网站 geolocator 使用情况,确保您正确设置了 android 和 ios
我是 Flutter 的新手,正在尝试创建地理定位。 但是,对于我的以下代码,屏幕仅显示 'Loading.. Please wait..' 而地图未显示。
我只是想使用依赖项显示当前位置
geolocator: ^6.1.1
使用
中的代码https://codelabs.developers.google.com/codelabs/google-maps-in-flutter#3
Google地图可以显示成功。所以这不是与 Google Maps Platform 相关的问题。
// home.dart
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
bool mapToggle = false;
var currentLocation;
GoogleMapController mapController;
@override
void initState() {
// TODO: implement initState
super.initState();
Geolocator.getCurrentPosition().then((currloc) {
setState(() {
currentLocation = currloc;
mapToggle = true;
});
});
}
void _onMapCreated(controller) {
setState(() {
mapController = controller;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Column(children: <Widget>[
Stack(
children: <Widget>[
Container(
height: MediaQuery.of(context).size.height - 80.0,
width: double.infinity,
child: mapToggle
? GoogleMap(
onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: LatLng(currentLocation.latitude,
currentLocation.longitude),
zoom: 10.0))
: Center(
child: Text(
'Loading.. Please wait..',
style: TextStyle(fontSize: 20.0),
)))
],
)
]),
);
}
}
正如@theredcap 在他的评论中已经指出的那样,您很可能没有必要的权限。始终阅读您正在使用的插件的 documentation。
我没看到:
LocationPermission permission = await Geolocator.checkPermission();
我也看不到:
LocationPermission permission = await Geolocator.requestPermission();
在您的代码中,但插件文档清楚地解释了该部分。此外,如果您总体上是 Android 的新手,请查看:https://developer.android.com/training/location/permissions
在你的 AndroidManifest 添加权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化变量
Position _currentPosition;
复制这个函数并在initState中调用这个
_getCurrentLocation() async{
Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best)
.then((Position position) {
setState(() {
_currentPosition = position;
});
}).catchError((e) {
print(e);
});
}
有关更多信息,请查看他们的 pub.dev 网站 geolocator 使用情况,确保您正确设置了 android 和 ios