From 70a344485bd0c9b68ac91f72ed23ec5bfa998b09 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期四, 25 十一月 2021 19:30:25 +0800
Subject: [PATCH] 功能完善

---
 lib/utils/location_util.dart |   63 ++++++++++++++++++++++++-------
 1 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/lib/utils/location_util.dart b/lib/utils/location_util.dart
index f22b886..ee415c6 100644
--- a/lib/utils/location_util.dart
+++ b/lib/utils/location_util.dart
@@ -1,13 +1,21 @@
+import 'dart:async';
+
+import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';
 import 'package:flutter_bmflocation/bdmap_location_flutter_plugin.dart';
-import 'package:flutter_bmflocation/flutter_baidu_location.dart';
 import 'package:flutter_bmflocation/flutter_baidu_location_android_option.dart';
 import 'package:flutter_bmflocation/flutter_baidu_location_ios_option.dart';
+import 'package:locations/api/http.dart';
+import 'package:locations/model/map/location_model.dart';
+import 'package:locations/utils/user_util.dart';
 import 'package:permission_handler/permission_handler.dart';
 
-typedef OnLocationCallback = void Function(Map map);
+import 'global.dart';
+
+typedef OnLocationCallback = void Function(LocationState state, Map? map);
 
 class LocationUtil {
-  static LocationFlutterPlugin? _locationFlutterPlugin=LocationFlutterPlugin();
+  static LocationFlutterPlugin? _locationFlutterPlugin =
+      LocationFlutterPlugin();
 
   static Map _getAndroidOption(int scanspan) {
     BaiduLocationAndroidOption androidOption = new BaiduLocationAndroidOption();
@@ -47,7 +55,7 @@
     /// 鍙�夛紝璁剧疆鍙戣捣瀹氫綅璇锋眰鐨勯棿闅旓紝int绫诲瀷锛屽崟浣峬s
     /// 濡傛灉璁剧疆涓�0锛屽垯浠h〃鍗曟瀹氫綅锛屽嵆浠呭畾浣嶄竴娆★紝榛樿涓�0
     /// 濡傛灉璁剧疆闈�0锛岄渶璁剧疆1000ms浠ヤ笂鎵嶆湁鏁�
-    // androidOption.setLocationPurpose(BDLocationPurpose.SignIn);
+    androidOption.setLocationPurpose(BDLocationPurpose.Sport);
 
     /// 鍙�夛紝璁剧疆鍦烘櫙瀹氫綅鍙傛暟锛屽寘鎷鍒板満鏅�佽繍鍔ㄥ満鏅�佸嚭琛屽満鏅紝鍙�夊�煎涓嬶細
     /// 绛惧埌鍦烘櫙: BDLocationPurpose.SignIn
@@ -111,24 +119,41 @@
     return iosOption.getMap();
   }
 
-  static void init(int scanSpan) {
-    _locationFlutterPlugin!.prepareLoc(
-        _getAndroidOption(scanSpan), _getIosOption());
-  }
-
-  static void startLocation(OnLocationCallback callback) async {
+  static Future<StreamSubscription<Map<String, Object>?>?> startLocation(
+      int scanSpan, OnLocationCallback callback) async {
     final status = await requestLocationPermission();
     if (status.isGranted) {
       print("瀹氫綅鏉冮檺鐢宠閫氳繃");
     } else {
       print("瀹氫綅鏉冮檺鐢宠涓嶉�氳繃");
+      callback(LocationState.permission_denied, null);
+      return null;
     }
+
+    StreamSubscription<Map<String, Object>?> subscription =
+        _locationFlutterPlugin!
+            .onResultCallback()
+            .listen((Map<String, Object>? result) {
+      print("瀹氫綅缁撴灉:$result");
+      Global.currentPosition = BMFCoordinate.fromMap(result!);
+      UserUtil.isLogin().then((value) {
+        if (value) {
+          LocationApiUtil.uploadLocation(BaiduLocation.fromJson(result));
+        }
+      });
+
+      callback(LocationState.success, result);
+      if (scanSpan == 0) {
+        stopLocation();
+      }
+    });
+
+    _locationFlutterPlugin!
+        .prepareLoc(_getAndroidOption(scanSpan), _getIosOption());
+
     _locationFlutterPlugin!.startLocation();
-    Stream<Map<String, Object>?> result =
-        _locationFlutterPlugin!.onResultCallback();
-    await for (Map<String, Object>? s in result) {
-      callback(s!);
-    }
+
+    return subscription;
   }
 
   ///璇锋眰瀹氫綅鏉冮檺
@@ -136,4 +161,12 @@
     final status = await Permission.location.request();
     return status;
   }
+
+  static stopLocation() {
+    if (_locationFlutterPlugin != null) {
+      _locationFlutterPlugin!.stopLocation();
+    }
+  }
 }
+
+enum LocationState { success, permission_denied }

--
Gitblit v1.8.0