requestAlarmPermission method

  1. @override
Future<String> requestAlarmPermission()
override

Request alarm permission

Implementation

@override
Future<String> requestAlarmPermission() async {
  // Handle alarm permission differently based on platform
  if (Platform.isIOS) {
    // On iOS, we use notifications for alarms
    debugPrint(
      'Using notification permission for alarm functionality on iOS',
    );
    final result = await _invokePermissionMethod(
      'requestNotificationPermission',
    );
    return result;
  } else if (Platform.isAndroid) {
    try {
      final androidVersion = await methodChannel.invokeMethod<int>(
        'getAndroidVersion',
      );

      // Android 12+ has additional restrictions
      if (androidVersion != null && androidVersion >= 31) {
        // For Android 12+, check if the app can schedule exact alarms
        final canScheduleExactAlarms = await methodChannel.invokeMethod<bool>(
          'canScheduleExactAlarms',
        );
        if (canScheduleExactAlarms == false) {
          // If not, we need to direct the user to system settings
          if (_context != null) {
            await _showAlarmPermissionDialog();
          }
          return 'OPEN_SETTINGS';
        }
      }
    } catch (e) {
      debugPrint('Error checking alarm permissions: $e');
    }
  }

  // Default implementation
  return _invokePermissionMethod('requestAlarmPermission');
}