import 'dart:async'; import 'package:flutter/material.dart'; import 'package:geolocator/geolocator.dart'; import 'package:permission_handler/permission_handler.dart'; class LocationUtilities { static void havePermission(Function(bool) callback) { Geolocator.checkPermission().then((value) async { if (value == LocationPermission.denied || value == LocationPermission.deniedForever) { value = await Geolocator.requestPermission(); callback(![LocationPermission.denied, LocationPermission.deniedForever].contains(value)); } else { callback(true); } }); } static void isEnabled(Function(bool) callback) { Geolocator.isLocationServiceEnabled().then((value) => callback(value)); } static bool _listeningSettingChange = true; static void listenGPS({bool change = true, Function(bool) ?onChange}) async { _listeningSettingChange = change; if (change == false) return; Future.doWhile(() async { await Future.delayed(const Duration(milliseconds: 1000)); var enable = await Geolocator.isLocationServiceEnabled(); onChange!(enable); return _listeningSettingChange; }); } static void locationFun(Function(bool) completion, BuildContext context) { Permission.location.isGranted.then((isGranted) { if (!isGranted) { Permission.location.request().then((granted) { completion(granted == PermissionStatus.granted); }); } completion(isGranted); }); } static void getCurrentLocation(Function(Position position, bool isMocked) callback, Function errorCallBack, BuildContext context) { void done(Position position) { //AppStorage.sp.saveLocation(position); bool isMocked = position.isMocked; callback(position, isMocked); } locationFun((granted) { if (granted) { Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.medium, timeLimit: const Duration(seconds: 5)).then((value) { done(value); }).catchError((err) { errorCallBack(); }); } else { // AppPermissions } }, context); } }