solicitar method
Future<bool>
solicitar({
- required OperacionPermiso operacionPermiso,
- required PermissionDialog onPermanentlyDenied,
Solicita los permisos requeridos para operacionPermiso.
El callback onPermanentlyDenied se invoca solo si existe al menos
un permiso marcado como Permanently Denied.
Devuelve true cuando todos los permisos están concedidos.
Implementation
Future<bool> solicitar({
required OperacionPermiso operacionPermiso,
required PermissionDialog onPermanentlyDenied,
}) async {
if (kIsWeb || !Platform.isAndroid) return true;
final sdk = await _sdkVersion();
if (sdk < 23 || sdk >= 30) return true; // permisos en instalación o SAF
final permisos = _permisosNecesarios(operacionPermiso);
// Filtra los ya concedidos
final pendientes = [
for (final p in permisos)
if (!(await p.status).isGranted) p,
];
if (pendientes.isEmpty) return true;
// Solicita los pendientes
final res = await pendientes.request();
// Permisos permanentemente denegados
final denegados = res.entries
.where((e) => e.value.isPermanentlyDenied)
.map((e) => e.key)
.toList();
if (denegados.isNotEmpty) {
final irAjustes = await onPermanentlyDenied(denegados);
if (irAjustes) await openAppSettings();
return false;
}
return res.values.every((s) => s.isGranted);
}