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