location_helper.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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, {String provinceName})
  8. _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. _instance._onLocationChanged(lat, lng, cityName,
  19. provinceName: provinceName);
  20. }
  21. });
  22. }
  23. return _instance;
  24. }
  25. LocationHelper._internal();
  26. Future<bool> requestPermission() async {
  27. final permissions = await PermissionHandler()
  28. .requestPermissions([PermissionGroup.location]);
  29. if (permissions[PermissionGroup.location] == PermissionStatus.granted) {
  30. return true;
  31. } else {
  32. toasts('需要定位权限!');
  33. return false;
  34. }
  35. }
  36. void getLocation(
  37. Function(String lat, String lng, String cityName)
  38. onLocationChanged) async {
  39. if (await requestPermission()) {
  40. _locationPlugin.startLocation();
  41. print('LocationHelper.getLocation ==== ');
  42. _onLocationChanged = onLocationChanged;
  43. }
  44. }
  45. stopGettingLocation() {
  46. _locationPlugin.stopLocation();
  47. }
  48. // destroyPlugin() {
  49. // if (null != _locationPlugin) {
  50. // _locationPlugin.destroy();
  51. // _locationPlugin = null;
  52. // }
  53. // }
  54. }