From 68a94d48e8236c65420bd0eb37c5867a7ac5c6e9 Mon Sep 17 00:00:00 2001 From: lonelyhentxi Date: Sun, 5 Jan 2025 01:34:07 +0800 Subject: [PATCH] feat: support windows hello --- lib/src/pages/lock_page.dart | 12 +++++++++--- lib/src/setting/security_setting.dart | 7 +++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/src/pages/lock_page.dart b/lib/src/pages/lock_page.dart index 87f786a9..4cb966d4 100644 --- a/lib/src/pages/lock_page.dart +++ b/lib/src/pages/lock_page.dart @@ -108,7 +108,10 @@ class _LockPageState extends State with WindowListener, WindowWidgetMi Future biometricAuth() async { bool success = await LocalAuthentication().authenticate( - localizedReason: ' ', + /** + * @see [local_auth_windows example](https://github.com/flutter/packages/blob/main/packages/local_auth/local_auth_windows/example/lib/main.dart) + */ + localizedReason: GetPlatform.isWindows ? 'localizedReason'.tr : ' ', authMessages: [ AndroidAuthMessages( signInTitle: 'localizedReason'.tr, @@ -121,9 +124,12 @@ class _LockPageState extends State with WindowListener, WindowWidgetMi ), const WindowsAuthMessages(), ], - options: const AuthenticationOptions( + options: AuthenticationOptions( stickyAuth: true, - biometricOnly: true, + /** + * @see [local_auth_windows](https://github.com/flutter/packages/blob/733869c981a3d0c649d904febc486b47ddb5f672/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart#L54) + */ + biometricOnly: !GetPlatform.isWindows, ), ); diff --git a/lib/src/setting/security_setting.dart b/lib/src/setting/security_setting.dart index 36229211..dea8646f 100644 --- a/lib/src/setting/security_setting.dart +++ b/lib/src/setting/security_setting.dart @@ -58,6 +58,13 @@ class SecuritySetting with JHLifeCircleBeanWithConfigStorage implements JHLifeCi List types = await LocalAuthentication().getAvailableBiometrics(); supportBiometricAuth = types.isNotEmpty; log.debug('Init SecuritySetting.supportBiometricAuth: $supportBiometricAuth'); + } else if (GetPlatform.isWindows) { + List types = await LocalAuthentication().getAvailableBiometrics(); + /** + * @see [local_auth_windows](https://github.com/flutter/packages/blob/733869c981a3d0c649d904febc486b47ddb5f672/packages/local_auth/local_auth_windows/lib/local_auth_windows.dart#L54) + */ + supportBiometricAuth = types.any((t) => t == BiometricType.strong); + log.debug('Init SecuritySetting.supportBiometricAuth: $supportBiometricAuth'); } }