@@ -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
}
@@ -295,6 +300,26 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
295
300
return const Left (LocalAuthFailure .unknown);
296
301
}
297
302
303
+ @override
304
+ Future <bool > isCorrectPin ({required Pin pin}) async {
305
+ final isEnabled = await isPinAuthenticationEnabled ();
306
+ if (! isEnabled) {
307
+ return true ;
308
+ }
309
+ if (await _isLockedDueToTooManyAttempts ()) {
310
+ return false ;
311
+ }
312
+
313
+ final userPin = await _repository.getPin (forUser: userId);
314
+ if (userPin? .value != pin.value) {
315
+ await _repository.addFailedAttempt (DateTime .now (), forUser: userId);
316
+ return false ;
317
+ }
318
+ await _repository.resetFailedAttempts (ofUser: userId);
319
+ _repository.clearLastPausedTimestamp ();
320
+ return true ;
321
+ }
322
+
298
323
/// -- Helpers --
299
324
300
325
Future <bool > _supportsBiometricAuthentication () {
@@ -316,15 +341,21 @@ class AuthenticatorImpl with WidgetsBindingObserver implements Authenticator {
316
341
if (! isEnabled) {
317
342
_lockController.unlock ();
318
343
} else {
319
- final biometric = await getBiometricAuthenticationAvailability ();
320
- if (biometric is Available ) {
321
- _lockController.lock (
322
- availableMethods: biometric.isEnabled ? await getAvailableBiometricMethods () : const [],
323
- );
324
- }
325
- if (biometric is Unavailable ) {
326
- _lockController.lock (availableMethods: const []);
327
- }
344
+ _lockWithBiometricMethods ();
345
+ }
346
+ }
347
+
348
+ Future <void > _lockWithBiometricMethods () async {
349
+ final biometric = await getBiometricAuthenticationAvailability ();
350
+ if (biometric is Available ) {
351
+ _lockController.lock (
352
+ availableMethods: biometric.isEnabled
353
+ ? await getAvailableBiometricMethods ()
354
+ : const [],
355
+ );
356
+ }
357
+ if (biometric is Unavailable ) {
358
+ _lockController.lock (availableMethods: const []);
328
359
}
329
360
}
330
361
}
0 commit comments