You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:async';
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:geolocator/geolocator.dart';
 | |
| import 'package:mohem_flutter_app/classes/app_permissions.dart';
 | |
| import 'package:mohem_flutter_app/classes/utils.dart';
 | |
| 
 | |
| class Location {
 | |
|   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 Utils.delay(1000);
 | |
|       var enable = await Geolocator.isLocationServiceEnabled();
 | |
|       onChange!(enable);
 | |
|       return _listeningSettingChange;
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   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);
 | |
|     }
 | |
| 
 | |
|     AppPermissions.location((granted) {
 | |
|       if (granted) {
 | |
|         Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.lowest, timeLimit: const Duration(seconds: 10)).then((value) {
 | |
|           done(value);
 | |
|         }).catchError((err) {
 | |
|           errorCallBack();
 | |
|         });
 | |
|       } else {
 | |
|         // AppPermissions
 | |
|       }
 | |
|     }, context);
 | |
|   }
 | |
| }
 |