location_helper.dart 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'package:amap_location_flutter_plugin/amap_location_flutter_plugin.dart';
  2. import 'package:liftmanager/utils/toast.dart';
  3. import 'package:permission_handler/permission_handler.dart';
  4. class LocationHelper {
  5. static LocationHelper _instance;
  6. AmapLocationFlutterPlugin _locationPlugin = AmapLocationFlutterPlugin();
  7. Function(String lat, String lng, String cityName,
  8. {String provinceName, String address}) _onLocationChanged;
  9. factory LocationHelper() {
  10. if (_instance == null) {
  11. _instance = LocationHelper._internal();
  12. _instance._locationPlugin.onLocationChanged().listen((event) {
  13. if (_instance._onLocationChanged != null) {
  14. var lat = event["latitude"];
  15. var lng = event["longitude"];
  16. var cityName = event['city'];
  17. var provinceName = event['province'];
  18. var address = event['address'];
  19. _instance._onLocationChanged(lat, lng, cityName,
  20. provinceName: provinceName, address: address);
  21. }
  22. });
  23. }
  24. return _instance;
  25. }
  26. LocationHelper._internal();
  27. Future<bool> requestPermission() async {
  28. final permissions = await PermissionHandler()
  29. .requestPermissions([PermissionGroup.location]);
  30. if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
  31. return true;
  32. } else {
  33. toasts('需要定位权限!');
  34. return false;
  35. }
  36. }
  37. void getLocation(
  38. Function(String lat, String lng, String cityName)
  39. onLocationChanged) async {
  40. if (await requestPermission()) {
  41. _locationPlugin.startLocation();
  42. print('LocationHelper.getLocation ==== ');
  43. _onLocationChanged = onLocationChanged;
  44. }
  45. }
  46. stopGettingLocation() {
  47. _locationPlugin.stopLocation();
  48. }
  49. // destroyPlugin() {
  50. // if (null != _locationPlugin) {
  51. // _locationPlugin.destroy();
  52. // _locationPlugin = null;
  53. // }
  54. // }
  55. }