v10.3.0
·
120 commits
to develop
since this release
Android
- Added
AndroidBiometricTypeenum andbiometricTypeoption toAndroidOptionsto control which authentication methods are accepted during biometric prompts (requiresKeyCipherAlgorithm.AES_GCM_NoPadding).AndroidBiometricType.biometricOrDeviceCredential(default) accepts Class 3 biometrics or device credentials (PIN/pattern/password), preserving previous behaviour.AndroidBiometricType.strongBiometricOnlyrestricts authentication to Class 3 (strong) biometrics only; device credentials are explicitly rejected.
- Fully enforced on Android 11+ (API 30+) via
setAllowedAuthenticatorsonBiometricPromptandsetUserAuthenticationParameterson the KeyStore key. On earlier API levels the system may still permit device credentials. - Added
biometricPromptNegativeButtonoption toAndroidOptionsto customise the dismiss button label on the biometric prompt. Required when usingstrongBiometricOnlyor on Android 10 and lower.
iOS / macOS
- Fixed
secStoreAvailabilitySinknot being called when protected data availability changes. - Fixed
kSecUseDataProtectionKeychainbeing added to Keychain queries unconditionally; it is now only set whenuseDataProtectionKeychainis explicitly enabled.
Windows
- Fixed
deleteAllandcontainsKeynot acquiring the mutex lock, which could cause data races under concurrent access.
If you are on Dart >=3.10.0, this fix is applied automatically. Otherwise, pinflutter_secure_storage_windows: ^4.2.2in yourpubspec.yamlto opt in and make sure your constraint is set for minimum of Dart >=3.10.0.
Linux
- Fixed
deleteKeyringstoring the string"null"instead of an empty JSON object{}. - Fixed non-UTF-8 error messages from libsecret causing a
FormatExceptionon the Dart side; messages are now sanitised before being sent through the method channel. - Fixed locked or unavailable keyring now surfacing as a catchable
PlatformExceptionwith codeKeyringLocked. - Fixed JSON parse errors and other C++ exceptions now surfacing as a
PlatformExceptionwith codeStorageErrorinstead of sending malformed bytes through the channel.