resolveWithBiometric method
Future<({bool authenticated, bool isConfigured, bool isSupported})>
resolveWithBiometric(
- String reasonMessage, {
- required String signInTitle,
- required String cancelButtonMessage,
- bool fallbackToPin = false,
override
Implementation
@override
Future<({bool authenticated, bool isConfigured, bool isSupported})>
resolveWithBiometric(
String reasonMessage, {
required String signInTitle,
required String cancelButtonMessage,
bool fallbackToPin = false,
}) async {
try {
final result = await _biometricAuthService.getData();
if (result.isBiometricAuthSupported) {
if (result.isBiometricAuthConfigured) {
final biometricAuthData = await _biometricIdentityService
.authenticate(
reasonMessage,
signInTitle: signInTitle,
cancelButtonMessage: cancelButtonMessage,
);
return await biometricAuthData.fold(
(l) async {
return (
authenticated: false,
isConfigured: true,
isSupported: true,
);
},
(r) async {
await _biometricAuthService.setData(
result.copyWith(
hasDeclinedBioMetricAuth: false,
hasDeclinedPinCodeAuth: false,
isBiometricAuthConfigured: true,
isBiometricAuthSupported: true,
lastAuthenticated: DateTime.now(),
),
);
return (
authenticated: true,
isConfigured: true,
isSupported: true,
);
},
);
} else {
final setupResult = await setupBiometric(
reasonMessage,
signInTitle: signInTitle,
cancelButtonMessage: cancelButtonMessage,
fallbackToPin: fallbackToPin,
);
return (
authenticated: setupResult.ok,
isConfigured: setupResult.ok && setupResult.isAvailable,
isSupported: setupResult.isAvailable,
);
}
} else {
return (authenticated: false, isConfigured: false, isSupported: false);
}
} on BiometricAuthException catch (e) {
if (e is BiometricNotSupportedException ||
e is BiometricTypeNotAvailableException) {
await _biometricAuthService.setData(
BiometricAuthData(
hasDeclinedBioMetricAuth: false,
hasDeclinedPinCodeAuth: false,
isBiometricAuthConfigured: false,
isBiometricAuthSupported: false,
),
);
return (authenticated: false, isConfigured: false, isSupported: false);
} else {
return (authenticated: false, isConfigured: true, isSupported: true);
}
}
}