@@ -70,10 +70,9 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
70
70
final lastActive = await _repository.getPausedTimestamp ();
71
71
if (lastActive != null ) {
72
72
final now = DateTime .now ();
73
- if (now.millisecondsSinceEpoch - lastActive.millisecondsSinceEpoch > lockAfterDuration.inMilliseconds) {
74
- _lockController.lock (
75
- availableMethods: await getAvailableBiometricMethods (),
76
- );
73
+ if (now.millisecondsSinceEpoch - lastActive.millisecondsSinceEpoch >
74
+ lockAfterDuration.inMilliseconds) {
75
+ _lockWithBiometricMethods ();
77
76
}
78
77
}
79
78
break ;
@@ -209,6 +208,12 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
209
208
case BiometricType .iris:
210
209
methods.add (BiometricMethod .iris);
211
210
break ;
211
+ case BiometricType .weak:
212
+ methods.add (BiometricMethod .weak);
213
+ break ;
214
+ case BiometricType .strong:
215
+ methods.add (BiometricMethod .strong);
216
+ break ;
212
217
default :
213
218
break ;
214
219
}
@@ -298,6 +303,26 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
298
303
return const Left (LocalAuthFailure .unknown);
299
304
}
300
305
306
+ @override
307
+ Future <bool > isCorrectPin ({required Pin pin}) async {
308
+ final isEnabled = await isPinAuthenticationEnabled ();
309
+ if (! isEnabled) {
310
+ return true ;
311
+ }
312
+ if (await _isLockedDueToTooManyAttempts ()) {
313
+ return false ;
314
+ }
315
+
316
+ final userPin = await _repository.getPin (forUser: userId);
317
+ if (userPin? .value != pin.value) {
318
+ await _repository.addFailedAttempt (DateTime .now (), forUser: userId);
319
+ return false ;
320
+ }
321
+ await _repository.resetFailedAttempts (ofUser: userId);
322
+ _repository.clearLastPausedTimestamp ();
323
+ return true ;
324
+ }
325
+
301
326
/// -- Helpers --
302
327
303
328
Future <bool > _supportsBiometricAuthentication () {
@@ -319,15 +344,21 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
319
344
if (! isEnabled) {
320
345
_lockController.unlock ();
321
346
} else {
322
- final biometric = await getBiometricAuthenticationAvailability ();
323
- if (biometric is Available ) {
324
- _lockController.lock (
325
- availableMethods: biometric.isEnabled ? await getAvailableBiometricMethods () : const [],
326
- );
327
- }
328
- if (biometric is Unavailable ) {
329
- _lockController.lock (availableMethods: const []);
330
- }
347
+ _lockWithBiometricMethods ();
348
+ }
349
+ }
350
+
351
+ Future <void > _lockWithBiometricMethods () async {
352
+ final biometric = await getBiometricAuthenticationAvailability ();
353
+ if (biometric is Available ) {
354
+ _lockController.lock (
355
+ availableMethods: biometric.isEnabled
356
+ ? await getAvailableBiometricMethods ()
357
+ : const [],
358
+ );
359
+ }
360
+ if (biometric is Unavailable ) {
361
+ _lockController.lock (availableMethods: const []);
331
362
}
332
363
}
333
364
}
0 commit comments