ensurePermissions method

Future<PermissionsStatus> ensurePermissions({
  1. bool forceRefresh = false,
  2. bool requestNotifications = true,
  3. bool openAccessibilityIfMissing = false,
})

Gestiona la verificación y solicitud de permisos de forma controlada. Evita solicitudes duplicadas en la sesión salvo que forceRefresh sea true.

Implementation

Future<PermissionsStatus> ensurePermissions({
  bool forceRefresh = false,
  bool requestNotifications = true,
  bool openAccessibilityIfMissing = false,
}) async {
  if (_permissionsVerified && !forceRefresh && _cachedPermissions != null) {
    return _cachedPermissions!;
  }

  var status = await NativeBridge.checkPermissions();

  if (requestNotifications && !status.notifications) {
    log('🔔 Solicitando permiso de notificaciones para foreground service...');
    await NativeBridge.requestNotificationPermission();
    status = await NativeBridge.checkPermissions();
  }

  if (openAccessibilityIfMissing && !status.accessibility) {
    log('♿ Accesibilidad no habilitada, abriendo configuración...');
    await NativeBridge.openAccessibilitySettings();
  }

  _cachedPermissions = status;
  _permissionsVerified = true;
  return status;
}