import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:permission_handler/permission_handler.dart'; class BeaconPermissions { static Future requestPermissions() async { try { // Request location permission (required for Bluetooth scanning) final locationStatus = await Permission.locationWhenInUse.request(); debugPrint('[BeaconPermissions] Location: $locationStatus'); bool bluetoothGranted = true; if (Platform.isIOS) { // iOS uses a single Bluetooth permission final bluetoothStatus = await Permission.bluetooth.request(); debugPrint('[BeaconPermissions] Bluetooth (iOS): $bluetoothStatus'); bluetoothGranted = bluetoothStatus.isGranted; } else { // Android 12+ requires separate scan/connect permissions final bluetoothScan = await Permission.bluetoothScan.request(); final bluetoothConnect = await Permission.bluetoothConnect.request(); debugPrint('[BeaconPermissions] BluetoothScan: $bluetoothScan, BluetoothConnect: $bluetoothConnect'); bluetoothGranted = bluetoothScan.isGranted && bluetoothConnect.isGranted; } final allGranted = locationStatus.isGranted && bluetoothGranted; if (allGranted) { debugPrint('[BeaconPermissions] ✅ All permissions granted'); } else { debugPrint('[BeaconPermissions] ❌ Permissions denied'); } return allGranted; } catch (e) { debugPrint('[BeaconPermissions] Error requesting permissions: $e'); return false; } } static Future checkPermissions() async { final locationStatus = await Permission.locationWhenInUse.status; bool bluetoothGranted = true; if (Platform.isIOS) { final bluetoothStatus = await Permission.bluetooth.status; bluetoothGranted = bluetoothStatus.isGranted; } else { final bluetoothScan = await Permission.bluetoothScan.status; final bluetoothConnect = await Permission.bluetoothConnect.status; bluetoothGranted = bluetoothScan.isGranted && bluetoothConnect.isGranted; } return locationStatus.isGranted && bluetoothGranted; } static Future openSettings() async { await openAppSettings(); } }