flutter定位简单工具类

dart 复制代码
import 'package:permission_handler/permission_handler.dart';

class PermissionUtil {
  /// 获取用户定位权限
  static Future<bool> getLocationStatus() async {
    Map<Permission, PermissionStatus> statuses = await [
      Permission.location,
    ].request();

    return statuses[Permission.location].isGranted;
  }

  //判断是否已经获取了位置权限授权
  static Future<bool> judgeLocationAuth() async {
    var status = await Permission.locationWhenInUse.status;
    if (status == PermissionStatus.granted) {
      return true;
    }else {
      return false;
    }
  }

//判断手机是否开启了定位服务
 static Future<bool> serviceEnabled() async {
   bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
   return serviceEnabled;
  }

//1.获取位置信息
Future<Position> _determinePosition() async {
    bool serviceEnabled;
    LocationPermission permission;

    //判断手机是否开启定位服务
    serviceEnabled = await Geolocator.isLocationServiceEnabled();
    //位置服务是否启用
    if (!serviceEnabled) {

      return Future.error('Location services are disabled.');
    }

    //获取位置位置权限

    /*bool locationAuth = await _locationAuthDialog();
    if(locationAuth){

    }*/
    permission = await Geolocator.checkPermission();
    if (permission == LocationPermission.denied) {
      permission = await Geolocator.requestPermission();
      if (permission == LocationPermission.denied) {
        return Future.error('Location permissions are denied');
      }
    }
    //位置权限是否永久拒绝
    if (permission == LocationPermission.deniedForever) {
      return Future.error(
          'Location permissions are permanently denied, we cannot request permissions.');
    }

    return await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.best,forceAndroidLocationManager: true);
  }

//2.从经纬度编码成地址
getAddressFromLatLng() async{
    Position position = await _determinePosition();
    print('纬度:${position.latitude}   经度:${position.longitude} ');
    List<Placemark> placeMark = await placemarkFromCoordinates(position.latitude, position.longitude);
    print('地址:${placeMark[0].administrativeArea} ${placeMark[0].locality}  ${placeMark[0].subLocality} ${placeMark[0].subAdministrativeArea} ${placeMark[0].thoroughfare} ${placeMark[0].subThoroughfare} ${placeMark[0].name} ${placeMark[0].name}');
    CommonConfig.lat = position.latitude;
    CommonConfig.lng = position.longitude;
    CommonConfig.currentCityName = placeMark[0].locality;
    return {
      "provinceName": placeMark[0].administrativeArea,
      "cityName": placeMark[0].locality,
      "districtName": placeMark[0].subLocality,
    };
  }

}
相关推荐
ujainu2 小时前
护眼又美观:Flutter + OpenHarmony 鸿蒙记事本一键切换夜间模式(四)
android·flutter·harmonyos
ujainu2 小时前
让笔记触手可及:为 Flutter + OpenHarmony 鸿蒙记事本添加实时搜索(二)
笔记·flutter·openharmony
一只大侠的侠2 小时前
Flutter开源鸿蒙跨平台训练营 Day 13从零开发注册页面
flutter·华为·harmonyos
一只大侠的侠2 小时前
Flutter开源鸿蒙跨平台训练营 Day19自定义 useFormik 实现高性能表单处理
flutter·开源·harmonyos
恋猫de小郭3 小时前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
一只大侠的侠8 小时前
Flutter开源鸿蒙跨平台训练营 Day 10特惠推荐数据的获取与渲染
flutter·开源·harmonyos
renke336411 小时前
Flutter for OpenHarmony:色彩捕手——基于HSL色轮与感知色差的交互式色觉训练系统
flutter
子春一13 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏
铅笔侠_小龙虾14 小时前
Flutter 实战: 计算器
开发语言·javascript·flutter
微祎_15 小时前
Flutter for OpenHarmony:构建一个 Flutter 重力弹球游戏,2D 物理引擎、手势交互与关卡设计的工程实现
flutter·游戏·交互