如何在颤振 sdk 1.2.1 上获取当前位置
Posted
技术标签:
【中文标题】如何在颤振 sdk 1.2.1 上获取当前位置【英文标题】:How to get current location on flutter sdk 1.2.1 【发布时间】:2019-07-22 09:58:57 【问题描述】:如何使用颤振在 android 设备上获取当前位置。我已经尝试了Location 和GeoLocator 插件,GeoLocator 3.0.0 在调试时显示此错误:
Launching lib\main.dart on Android SDK built for x86 in debug mode...
FAILURE:构建失败并出现异常。
出了什么问题: 任务“:app:preDebugBuild”执行失败。Android 依赖 'android.arch.lifecycle:runtime' 对于编译 (1.0.0) 和运行时 (1.1.0) 类路径有不同的版本。您应该通过 DependencyResolution 手动设置相同的版本
Location 2.0.0 也会在调试时引发错误。还有一个名为 geoLocation 的插件可用,但它与 dart 2.0 不兼容。 在这种情况下,我如何获得位置(经度和纬度)[一次]? 任何帮助将不胜感激。
【问题讨论】:
您是否在 AndroidManifest.xml 中添加了<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
权限?
是的。权限没有问题。我还使用了适用于 Android 6+ 设备的 uses_permission 插件来明确请求权限。
【参考方案1】:
按照这些步骤在 ios 和 Android 中获取位置。
-
在您的 pubspec.yaml 文件中添加
geolocator: ^4.0.3
依赖项:标签
在您需要获取位置的 dart 文件中添加 import 'package:geolocator/geolocator.dart';
为了获取 android 的位置,在 android 项目清单文件中添加以下权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
对于 IOS,您需要在 IOS 项目中 <dict>
下的 info.plist 文件中添加以下行
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
获取位置的功能
void getLocation() async Position position = await Geolocator .getCurrentPosition(desiredAccuracy: LocationAccuracy.high); print(position);
干杯!
【讨论】:
对我来说它仍然失败。收到此错误。 E/location_permissions(24439): Flutter 结果对象为空。 仍然没有得到当前位置【参考方案2】:在 pubsec.yamlgeolocator: ^6.0.0
运行 flutter pub get
在 app/src/main/AndroidManifest.xml 中为 Android 添加位置权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
-
对于 iOS,在 info.plist 中添加以下键
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location when open.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location when in the background.</string>
-
获取用户当前位置的创建函数:
LatLng currentPostion;
void _getUserLocation() async
var position = await GeolocatorPlatform.instance
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
setState(()
currentPostion = LatLng(position.latitude, position.longitude);
);
-
在您的 googlemap 中使用 currentPostion。 (定义 Latlag currentPosition);
GoogleMap(
// onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: currentPostion,
zoom: 10,
),
),
【讨论】:
3 号为我工作!我之前只尝试过一个,而不是同时尝试三个:)...谢谢!【参考方案3】:到目前为止,您可能已经找到了解决方案,但我仍在添加此解决方案,以便其他人可以获得帮助
使用地理定位器获取当前位置
在 pubsec.yaml 中
geolocator: '^2.0.1'
在你的飞镖文件中
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
void main() => runApp(MapScreen());
class MapScreen extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
title: "Map",
home: MapActivity(),
);
class MapActivity extends StatefulWidget
@override
_MapActivityState createState() => _MapActivityState();
class _MapActivityState extends State<MapActivity>
LatLng _center ;
Position currentLocation;
@override
void initState()
// TODO: implement initState
super.initState();
getUserLocation();
Future<Position> locateUser() async
return Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
getUserLocation() async
currentLocation = await locateUser();
setState(()
_center = LatLng(currentLocation.latitude, currentLocation.longitude);
);
print('center $_center');
希望对你有帮助
【讨论】:
谢谢。由于库冲突,我遇到了这个问题,将我的项目更新到 Android x 库解决了这个错误。【参考方案4】:我安装的 geoLocator 插件使用的是 Android x jetpack 库,而我的项目正在使用支持库,所以这个冲突导致了问题,当我更新我的项目以使用 Android x 库时,问题得到了解决。
【讨论】:
以上是关于如何在颤振 sdk 1.2.1 上获取当前位置的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在颤振应用程序中从谷歌地图获取特定位置的照片[关闭]
安装flutter时如何修复“在此位置找不到Android SDK”错误?