|
|
@@ -1,8 +1,9 @@
|
|
|
+import 'dart:async';
|
|
|
import 'dart:convert';
|
|
|
import 'dart:io';
|
|
|
|
|
|
-import 'package:amap_location/amap_location.dart';
|
|
|
-import 'package:amap_location/amap_location_option.dart';
|
|
|
+import 'package:amap_flutter_location/amap_flutter_location.dart';
|
|
|
+import 'package:amap_flutter_location/amap_location_option.dart';
|
|
|
import 'package:bbyyy/beans/coupon_bean_entity.dart';
|
|
|
import 'package:bbyyy/beans/user_bean_entity.dart';
|
|
|
import 'package:bbyyy/https/MyDio.dart';
|
|
|
@@ -35,11 +36,27 @@ class RootPage extends StatefulWidget {
|
|
|
class _RootPageState extends State<RootPage> {
|
|
|
PageController pageController = PageController(initialPage: 0);
|
|
|
DateTime lastPopTime;
|
|
|
+ AMapFlutterLocation _locationPlugin = new AMapFlutterLocation();
|
|
|
+ Map<String, Object> _locationResult;
|
|
|
+
|
|
|
+ StreamSubscription<Map<String, Object>> _locationListener;
|
|
|
|
|
|
@override
|
|
|
void initState() {
|
|
|
super.initState();
|
|
|
MyCookie().initP();
|
|
|
+
|
|
|
+ if (Platform.isIOS) {
|
|
|
+ requestAccuracyAuthorization();
|
|
|
+ }
|
|
|
+ _locationListener = _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {
|
|
|
+ result.forEach((key, value) {
|
|
|
+ print('$key---------------$value');
|
|
|
+ });
|
|
|
+ setState(() {
|
|
|
+ _locationResult = result;
|
|
|
+ });
|
|
|
+ });
|
|
|
getLocation();
|
|
|
Nsq.ConnectServer(
|
|
|
Nsq.handlerMessage, // 接收消息处理逻辑
|
|
|
@@ -65,9 +82,7 @@ class _RootPageState extends State<RootPage> {
|
|
|
setState(() {});
|
|
|
});
|
|
|
EventBus().on('hasNoPay', (arg) {
|
|
|
- setState(() {
|
|
|
-
|
|
|
- });
|
|
|
+ setState(() {});
|
|
|
});
|
|
|
MyData().init(context);
|
|
|
queryPersonalInformation();
|
|
|
@@ -82,7 +97,13 @@ class _RootPageState extends State<RootPage> {
|
|
|
// TODO: implement dispose
|
|
|
EventBus().off('ChangePage');
|
|
|
EventBus().off('hasNoPay');
|
|
|
- AMapLocationClient.stopLocation();
|
|
|
+ ///移除定位监听
|
|
|
+ if (null != _locationListener) {
|
|
|
+ _locationListener?.cancel();
|
|
|
+ }
|
|
|
+
|
|
|
+ ///销毁定位
|
|
|
+ _locationPlugin.destroy();
|
|
|
super.dispose();
|
|
|
}
|
|
|
|
|
|
@@ -124,8 +145,12 @@ class _RootPageState extends State<RootPage> {
|
|
|
child: SafeArea(
|
|
|
top: false,
|
|
|
child: GestureDetector(
|
|
|
- onTap: (){
|
|
|
- MyTools().toPage(context, OrderPage(index: 2,), (then) {
|
|
|
+ onTap: () {
|
|
|
+ MyTools().toPage(
|
|
|
+ context,
|
|
|
+ OrderPage(
|
|
|
+ index: 2,
|
|
|
+ ), (then) {
|
|
|
queryPersonalInformation();
|
|
|
});
|
|
|
},
|
|
|
@@ -193,45 +218,13 @@ class _RootPageState extends State<RootPage> {
|
|
|
await Permission.location.request().then((value) async {
|
|
|
print('Permission.location.request()-----$value');
|
|
|
if (value == PermissionStatus.granted) {
|
|
|
- await AMapLocationClient.startup(new AMapLocationOption(
|
|
|
- desiredAccuracy:
|
|
|
- CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
|
|
|
- await AMapLocationClient.getLocation(true).then((value) async {
|
|
|
- if (Platform.isAndroid) {
|
|
|
- MyCookie().location = MyLocation(
|
|
|
- province: value.province,
|
|
|
- city: value.city,
|
|
|
- formattedAddress: value.formattedAddress,
|
|
|
- district: value.district,
|
|
|
- latitude: value.latitude,
|
|
|
- longitude: value.longitude);
|
|
|
- EventBus().emit('getLocation');
|
|
|
- } else if (Platform.isIOS) {
|
|
|
- getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
|
|
|
- }
|
|
|
- });
|
|
|
+ _setLocationOption();
|
|
|
+ _locationPlugin.startLocation();
|
|
|
}
|
|
|
});
|
|
|
} else if (locationStatus.isGranted) {
|
|
|
- await AMapLocationClient.startup(new AMapLocationOption(
|
|
|
- desiredAccuracy:
|
|
|
- CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
|
|
|
- await AMapLocationClient.getLocation(true).then((value) async {
|
|
|
- if (Platform.isAndroid) {
|
|
|
- MyCookie().location = MyLocation(
|
|
|
- province: value.province,
|
|
|
- city: value.city,
|
|
|
- formattedAddress: value.formattedAddress,
|
|
|
- district: value.district,
|
|
|
- latitude: value.latitude,
|
|
|
- longitude: value.longitude);
|
|
|
- if (value.province != '四川省' || value.city != '成都市') {
|
|
|
- EventBus().emit('getLocation');
|
|
|
- }
|
|
|
- } else if (Platform.isIOS) {
|
|
|
- getAddressByLatitudeAndLongitude(value.latitude, value.longitude);
|
|
|
- }
|
|
|
- });
|
|
|
+ _setLocationOption();
|
|
|
+ _locationPlugin.startLocation();
|
|
|
}
|
|
|
if (cameraStatus.isDenied) {
|
|
|
await Permission.camera.request().then((value) {
|
|
|
@@ -257,4 +250,60 @@ class _RootPageState extends State<RootPage> {
|
|
|
}
|
|
|
}, (error) {});
|
|
|
}
|
|
|
+
|
|
|
+ void requestAccuracyAuthorization() async {
|
|
|
+ AMapAccuracyAuthorization currentAccuracyAuthorization = await _locationPlugin.getSystemAccuracyAuthorization();
|
|
|
+ if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationFullAccuracy) {
|
|
|
+ print("精确定位类型");
|
|
|
+ } else if (currentAccuracyAuthorization == AMapAccuracyAuthorization.AMapAccuracyAuthorizationReducedAccuracy) {
|
|
|
+ print("模糊定位类型");
|
|
|
+ } else {
|
|
|
+ print("未知定位类型");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ void _setLocationOption() {
|
|
|
+ AMapLocationOption locationOption = new AMapLocationOption();
|
|
|
+
|
|
|
+ ///是否单次定位
|
|
|
+ locationOption.onceLocation = true;
|
|
|
+
|
|
|
+ ///是否需要返回逆地理信息
|
|
|
+ locationOption.needAddress = true;
|
|
|
+
|
|
|
+ ///逆地理信息的语言类型
|
|
|
+ locationOption.geoLanguage = GeoLanguage.DEFAULT;
|
|
|
+
|
|
|
+ locationOption.desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.ReduceAccuracy;
|
|
|
+
|
|
|
+ locationOption.fullAccuracyPurposeKey = "AMapLocationScene";
|
|
|
+
|
|
|
+ ///设置Android端连续定位的定位间隔
|
|
|
+ locationOption.locationInterval = 2000;
|
|
|
+
|
|
|
+ ///设置Android端的定位模式<br>
|
|
|
+ ///可选值:<br>
|
|
|
+ ///<li>[AMapLocationMode.Battery_Saving]</li>
|
|
|
+ ///<li>[AMapLocationMode.Device_Sensors]</li>
|
|
|
+ ///<li>[AMapLocationMode.Hight_Accuracy]</li>
|
|
|
+ locationOption.locationMode = AMapLocationMode.Hight_Accuracy;
|
|
|
+
|
|
|
+ ///设置iOS端的定位最小更新距离<br>
|
|
|
+ locationOption.distanceFilter = -1;
|
|
|
+
|
|
|
+ ///设置iOS端期望的定位精度
|
|
|
+ /// 可选值:<br>
|
|
|
+ /// <li>[DesiredAccuracy.Best] 最高精度</li>
|
|
|
+ /// <li>[DesiredAccuracy.BestForNavigation] 适用于导航场景的高精度 </li>
|
|
|
+ /// <li>[DesiredAccuracy.NearestTenMeters] 10米 </li>
|
|
|
+ /// <li>[DesiredAccuracy.Kilometer] 1000米</li>
|
|
|
+ /// <li>[DesiredAccuracy.ThreeKilometers] 3000米</li>
|
|
|
+ locationOption.desiredAccuracy = DesiredAccuracy.Best;
|
|
|
+
|
|
|
+ ///设置iOS端是否允许系统暂停定位
|
|
|
+ locationOption.pausesLocationUpdatesAutomatically = false;
|
|
|
+
|
|
|
+ ///将定位参数设置给定位插件
|
|
|
+ _locationPlugin.setLocationOption(locationOption);
|
|
|
+ }
|
|
|
}
|