如何使用Flutter获取Android设备上的当前位置。我已经尝试过Location和GeoLocator插件,GeoLocator 3.0.0在调试时显示此错误:
Launching lib\main.dart on Android SDK built for x86 in debug mode...
失败:构建失败,并出现异常。
Android依赖项“ android.arch.lifecycle:runtime”对于编译(1.0.0)和运行时(1.1.0)类路径具有不同的版本。您应该通过DependencyResolution手动设置相同的版本
位置2.0.0 也会在调试时引发错误。还有另一个名为 geoLocation 的插件,但与dart 2.0不兼容。 在这种情况下,如何获得位置(经度和纬度)[一次]? 任何帮助将不胜感激。
答案 0 :(得分:1)
可能直到现在您可能已经找到了解决方案,但我仍在添加此解决方案,以便其他人可以获取帮助
使用geolocator获取当前位置
在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');
}
}
希望这会有所帮助
答案 1 :(得分:0)
当我的项目使用支持库时,我安装的geoLocator插件正在使用Android x jetpack库,因此此冲突导致了问题,当我将项目更新为使用Android x库时,问题得以解决。
答案 2 :(得分:0)
请按照以下步骤在IOS和Android中获取位置。
import _ from 'lodash'
class SomeClass extends React.Component {
constructor(props){
super(props)
this.someArray = []
}
static getDerivedStateFromProps(props, state){
if (!_.isEqual(props.data, state.prevData)) {
this.someArray = 'somevalue' // how to set this variable in static function
return {data: props.data, prevData: state.data }
}
}
}
:标记geolocator: ^4.0.3
import 'package:geolocator/geolocator.dart';
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
对于IOS,您需要在IOS项目中<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION" />
下的info.plist文件中添加以下行
<dict>
<key>NSLocationWhenInUseUsageDescription</key>
获取位置的功能
<string>This app needs access to location when open.</string>
干杯!
答案 3 :(得分:0)
在 pubsec.yaml 中添加地理位置插件
geolocator: ^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" />
<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(
// onMapCreated: _onMapCreated,
initialCameraPosition: CameraPosition(
target: currentPostion,
zoom: 10,
),
),