biometrics function
Future<bool>
biometrics(- BuildContext context,
- {required bool redirect}
)
Implementation
Future<bool> biometrics(BuildContext context, {required bool redirect}) async {
bool didAuthenticate = false;
final LocalAuthentication localAuthentication = LocalAuthentication();
didAuthenticate = await localAuthentication.canCheckBiometrics;
final List<BiometricType> availableBiometrics =
await localAuthentication.getAvailableBiometrics();
try {
didAuthenticate = await localAuthentication.authenticate(
localizedReason: 'Por favor, autentícate para acceder a la aplicación',
stickyAuth: true,
biometricOnly: availableBiometrics.isNotEmpty,
iOSAuthStrings: const IOSAuthMessages(
cancelButton: 'Cancelar',
goToSettingsButton: 'Ajustes',
goToSettingsDescription:
'La autenticación biométrica no está configurada en su dispositivo. Habilite Touch ID o Face ID en su teléfono.',
lockOut:
'La autenticación biométrica está deshabilitada. Bloquee y desbloquee su pantalla para habilitarla.',
),
androidAuthStrings: const AndroidAuthMessages(
biometricHint: 'Verifique su identidad',
biometricNotRecognized: 'Huella no reconocida, intente de nuevo',
biometricRequiredTitle: 'Biométrico requerido',
biometricSuccess: 'Éxito',
cancelButton: 'Cancelar',
deviceCredentialsRequiredTitle:
'Se requieren las credenciales del dispositivo',
deviceCredentialsSetupDescription:
'Se requieren las credenciales del dispositivo',
goToSettingsButton: 'Ajustes',
goToSettingsDescription:
'La autenticación biométrica no está configurada en su dispositivo. Vaya a \'Configuración > Seguridad\' para agregar autenticación biométrica.',
signInTitle: 'Autenticación requerida',
),
);
if (didAuthenticate && redirect) {
Transitions(
context: context,
child: const HomePage(),
removeUntil: true,
);
} else {
if (redirect) {
await showErrorDialog(
context: context,
text: const <String>[
'No se pudo autenticar, por seguridad deberá iniciar sesión con correo y contraseña',
],
);
}
}
} on PlatformException catch (platformException) {
switch (platformException.code) {
case auth_error.lockedOut:
//Indicates the API lock out due to too many attempts.
await showErrorDialog(
context: context,
text: const <String>[
'Se bloqueo esta función debido a que sobrepaso los intentos permitidos, por seguridad deberá iniciar sesión con correo y contraseña',
],
);
break;
case auth_error.notAvailable:
// Indicates the device does not have a Touch ID/fingerprint scanner.
await showErrorDialog(
context: context,
text: const <String>[
'Las funciones de seguridad no están habilitadas en su dispositivo',
],
);
break;
case auth_error.notEnrolled:
// Indicates the user has not enrolled any fingerprints on the device.
await showErrorDialog(
context: context,
text: const <String>[
'No hay datos biométricos registrados en este dispositivo',
],
);
break;
case auth_error.otherOperatingSystem:
//Indicates the device operating system is not iOS or Android.
await showErrorDialog(
context: context,
text: const <String>[
'El sistema operativo de su dispositivo no es compatible',
],
);
break;
case auth_error.passcodeNotSet:
//Indicates that the user has not yet configured a passcode (iOS) or PIN/pattern/password (Android) on the device.
await showErrorDialog(
context: context,
text: const <String>[
'Usted aún no configuro un PIN, patrón o contraseña de desbloqueo en su dispositivo',
'Por motivos de seguridad, sus datos biométricos deben estar respaldados por uno de esos 3 métodos',
],
);
break;
case auth_error.permanentlyLockedOut:
//Indicates the API being disabled due to too many lock outs. Strong authentication like PIN/Pattern/Password is required to unlock.
await showErrorDialog(
context: context,
text: const <String>[
'Demasiados intentos desactivaron la autenticación con datos biométricos',
'La autenticación fuerte es requerida mediante PIN, patrón o contraseña',
],
);
break;
default:
localAuthentication.stopAuthentication();
await showErrorDialog(
context: context,
iconColor: ApplicationTheme.orange,
text: <String>[
'Se interrumpió el proceso de autenticación, por favor vuelva a intentarlo',
],
buttonText: 'Reintentar',
onTap: () {
biometrics(
context,
redirect: true,
);
Navigator.pop(context);
},
);
}
}
return didAuthenticate;
}