You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dart SDK: Minimum SDK bumped to >=3.0.0 <4.0.0 (Dart 3 with sound null safety)
Flutter: Minimum Flutter version bumped to >=3.10.0
Android: Minimum SDK bumped to API 23 (Android 6.0)
iOS: Minimum deployment target bumped to iOS 12.0
Internal platform-specific methods are now private (_checkBiometricIOS, _checkBiometricAndroid)
New Features
onBiometricChanged stream β β Real-time biometric monitoring via native EventChannel on both iOS and Android. No Dart-side polling or lifecycle hacks needed.
Both platforms implement distinctUntilChanged natively β Dart only receives events when status actually changes
Swift Package Manager support (Issue #9) β Added Package.swift for SPM compatibility, migrating the iOS plugin to Pure Swift Architecture and resolving module conflicts.
Android face recognition note (Issue #7) β Clarified that Android KeyStore invalidation natively detects Face Recognition changes only if the device manufacturer implements it as a Class 3 (Strong) biometric (e.g. Pixel 4).
Persistent AuthLocalStatus binding (Feature Request) β The AuthLocalStatus.changed state now stays bound (locked) across app restarts until explicitly released by calling the new acknowledgeChange() API.
iOS check method β iOS now supports the same check MethodChannel call as Android, enabling consistent cross-platform one-shot checks
iOS BiometricStreamHandler β Full native FlutterStreamHandler implementation with lifecycle observation, baseline token tracking, and automatic cleanup
Bug Fixes
Fixed Android plugin running unreachable code after result.success() / result.error()
Fixed iOS authenticateBiometric using deprecated base64EncodedData() instead of base64EncodedString()
Fixed example app missing dispose() for WidgetsBindingObserver (memory leak)
Fixed example app typo HomwPage β HomePage
Improvements
Platform-agnostic Dart code: Both iOS and Android now emit through the same EventChannel with identical status strings β the Dart layer is completely platform-agnostic
No more WidgetsBindingObserver: All lifecycle monitoring is handled natively (Kotlin + Swift), eliminating Dart-side workarounds
Added comprehensive dartdoc comments throughout the API
Added @visibleForTesting annotation for methodChannel and eventChannel
Used Dart 3 switch expressions instead of switch statements
Used typed invokeMethod<String> calls for type safety
Upgraded Android Kotlin from 1.6.10 β 1.9.22
Upgraded Android Gradle Plugin from 4.1.0 β 7.4.2
Upgraded Android compileSdk from 31 β 34
Upgraded Android Java target from 1.8 β 17
Added Kotlin Coroutines 1.7.3 and AndroidX Lifecycle 2.7.0 dependencies
Added namespace in build.gradle (required by AGP 7+)
Removed deprecated package attribute from AndroidManifest.xml