diff --git a/packages/local_auth/local_auth_ios/CHANGELOG.md b/packages/local_auth/local_auth_ios/CHANGELOG.md index d826cc8032e5..ccacae986d51 100644 --- a/packages/local_auth/local_auth_ios/CHANGELOG.md +++ b/packages/local_auth/local_auth_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.2 + +* Adds support `localizedFallbackTitle` in authenticateWithBiometrics on iOS. + ## 1.0.1 * BREAKING CHANGE: Changes `stopAuthentication` to always return false instead of throwing an error. diff --git a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m index d4d0e0d0f79f..ffd1dd2a869d 100644 --- a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m +++ b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m @@ -181,6 +181,7 @@ - (void)handleAuthReplyWithSuccess:(BOOL)success case LAErrorTouchIDNotAvailable: case LAErrorTouchIDNotEnrolled: case LAErrorTouchIDLockout: + case LAErrorUserFallback: [self handleErrors:error flutterArguments:arguments withFlutterResult:result]; return; case LAErrorSystemCancel: diff --git a/packages/local_auth/local_auth_ios/lib/types/auth_messages_ios.dart b/packages/local_auth/local_auth_ios/lib/types/auth_messages_ios.dart index 8a776243d242..b3236a7ff66e 100644 --- a/packages/local_auth/local_auth_ios/lib/types/auth_messages_ios.dart +++ b/packages/local_auth/local_auth_ios/lib/types/auth_messages_ios.dart @@ -16,6 +16,7 @@ class IOSAuthMessages extends AuthMessages { this.goToSettingsButton, this.goToSettingsDescription, this.cancelButton, + this.localizedFallbackTitle, }); /// Message advising the user to re-enable biometrics on their device. @@ -35,6 +36,10 @@ class IOSAuthMessages extends AuthMessages { /// Maximum 30 characters. final String? cancelButton; + /// The localized title for the fallback button in the dialog presented to + /// the user during authentication. + final String? localizedFallbackTitle; + @override Map get args { return { @@ -43,6 +48,8 @@ class IOSAuthMessages extends AuthMessages { 'goToSettingDescriptionIOS': goToSettingsDescription ?? iOSGoToSettingsDescription, 'okButton': cancelButton ?? iOSOkButton, + if (localizedFallbackTitle != null) + 'localizedFallbackTitle': localizedFallbackTitle!, }; } @@ -54,14 +61,16 @@ class IOSAuthMessages extends AuthMessages { lockOut == other.lockOut && goToSettingsButton == other.goToSettingsButton && goToSettingsDescription == other.goToSettingsDescription && - cancelButton == other.cancelButton; + cancelButton == other.cancelButton && + localizedFallbackTitle == other.localizedFallbackTitle; @override int get hashCode => lockOut.hashCode ^ goToSettingsButton.hashCode ^ goToSettingsDescription.hashCode ^ - cancelButton.hashCode; + cancelButton.hashCode ^ + localizedFallbackTitle.hashCode; } // Default Strings for IOSAuthMessages plugin. Currently supports English. diff --git a/packages/local_auth/local_auth_ios/pubspec.yaml b/packages/local_auth/local_auth_ios/pubspec.yaml index 537b1a64d003..9e69dc7a6617 100644 --- a/packages/local_auth/local_auth_ios/pubspec.yaml +++ b/packages/local_auth/local_auth_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_ios description: iOS implementation of the local_auth plugin. repository: https://github.com/flutter/plugins/tree/master/packages/local_auth/local_auth_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.0.1 +version: 1.0.2 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/local_auth/local_auth_ios/test/local_auth_test.dart b/packages/local_auth/local_auth_ios/test/local_auth_test.dart index 180383bc258c..aa94b8aa48b8 100644 --- a/packages/local_auth/local_auth_ios/test/local_auth_test.dart +++ b/packages/local_auth/local_auth_ios/test/local_auth_test.dart @@ -135,6 +135,29 @@ void main() { ); }); + test('authenticate with `localizedFallbackTitle`', () async { + await localAuthentication.authenticate( + authMessages: [ + const IOSAuthMessages(localizedFallbackTitle: 'Enter PIN'), + ], + localizedReason: 'Needs secure', + ); + expect( + log, + [ + isMethodCall('authenticate', + arguments: { + 'localizedReason': 'Needs secure', + 'useErrorDialogs': true, + 'stickyAuth': false, + 'sensitiveTransaction': true, + 'biometricOnly': false, + 'localizedFallbackTitle': 'Enter PIN', + }..addAll(const IOSAuthMessages().args)), + ], + ); + }); + test('authenticate with no sensitive transaction.', () async { await localAuthentication.authenticate( authMessages: [const IOSAuthMessages()],