62 lines
2.0 KiB
Dart
62 lines
2.0 KiB
Dart
import 'package:geolocator/geolocator.dart';
|
|
|
|
/// Kiểm tra xem dịch vụ vị trí có được bật không
|
|
Future<bool> isLocationServiceEnabled() async {
|
|
bool serviceEnabled = await Geolocator.isLocationServiceEnabled();
|
|
if (!serviceEnabled) {
|
|
print('Vui lòng bật dịch vụ vị trí');
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/// Kiểm tra và yêu cầu quyền truy cập vị trí
|
|
Future<LocationPermission> checkAndRequestPermission() async {
|
|
LocationPermission permission = await Geolocator.checkPermission();
|
|
|
|
if (permission == LocationPermission.denied) {
|
|
permission = await Geolocator.requestPermission();
|
|
if (permission == LocationPermission.denied) {
|
|
print('Quyền truy cập vị trí bị từ chối');
|
|
return permission;
|
|
}
|
|
}
|
|
|
|
if (permission == LocationPermission.deniedForever) {
|
|
print('Quyền truy cập vị trí bị từ chối vĩnh viễn. Vui lòng cấp quyền trong cài đặt.');
|
|
return permission;
|
|
}
|
|
|
|
return permission;
|
|
}
|
|
|
|
/// Lấy vị trí hiện tại của người dùng
|
|
Future<Position?> getCurrentPosition() async {
|
|
try {
|
|
Position position = await Geolocator.getCurrentPosition(
|
|
desiredAccuracy: LocationAccuracy.high,
|
|
);
|
|
print('Vị trí hiện tại: ${position.latitude}, ${position.longitude}');
|
|
return position;
|
|
} catch (e) {
|
|
print('Lỗi khi lấy vị trí: $e');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// Hàm chính để xử lý toàn bộ quy trình yêu cầu vị trí
|
|
Future<void> requestLocationPermission() async {
|
|
// Bước 1: Kiểm tra dịch vụ vị trí
|
|
bool isServiceEnabled = await isLocationServiceEnabled();
|
|
if (!isServiceEnabled) {
|
|
return;
|
|
}
|
|
|
|
// Bước 2: Kiểm tra và yêu cầu quyền
|
|
LocationPermission permission = await checkAndRequestPermission();
|
|
|
|
// Bước 3: Nếu quyền được cấp, lấy vị trí
|
|
if (permission == LocationPermission.whileInUse || permission == LocationPermission.always) {
|
|
await getCurrentPosition();
|
|
}
|
|
} |