requestPermissions method

Future<bool> requestPermissions()

Implementation

Future<bool> requestPermissions() async {
  // iOS doesn't need runtime permissions for Bluetooth
  if (Platform.isIOS) {
    return true;
  }

  // Android permission handling
  if (Platform.isAndroid) {
    // Get Android SDK version to determine which permissions to request
    final androidInfo = await DeviceInfoPlugin().androidInfo;
    final isAndroid12OrHigher =
        androidInfo.version.sdkInt >= 31; // Android 12 is API 31+

    if (isAndroid12OrHigher) {
      // Android 12+ requires BLUETOOTH_SCAN and BLUETOOTH_CONNECT
      final statuses = await [
        Permission.bluetoothScan,
        Permission.bluetoothConnect,
      ].request();

      return statuses[Permission.bluetoothScan]!.isGranted &&
          statuses[Permission.bluetoothConnect]!.isGranted;
    } else {
      // Android 11 and below requires LOCATION permission for Bluetooth scanning
      final statuses = await [Permission.location].request();
      return statuses[Permission.location]!.isGranted;
    }
  }

  // Default fallback for other platforms
  return true;
}