diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md index eee5a932cf6..17f98cbaa1d 100644 --- a/packages/google_sign_in/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md @@ -1,5 +1,7 @@ -## NEXT +## 6.3.0 +* Adds a sign-in field to allow Android clients to explicitly specify an account name. This + capability is only available within Android for the underlying libraries. * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. ## 6.2.2 diff --git a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart index ed11f0f512e..93565ad052b 100644 --- a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart +++ b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart @@ -187,6 +187,7 @@ class GoogleSignIn { this.clientId, this.serverClientId, this.forceCodeForRefreshToken = false, + this.forceAccountName, }) { // Start initializing. if (kIsWeb) { @@ -263,6 +264,9 @@ class GoogleSignIn { /// Force the authorization code to be valid for a refresh token every time. Only needed on Android. final bool forceCodeForRefreshToken; + /// Explicitly specifies the account name to be used in sign-in. Must only be set on Android. + final String? forceAccountName; + final StreamController _currentUserController = StreamController.broadcast(); @@ -317,6 +321,7 @@ class GoogleSignIn { clientId: clientId, serverClientId: serverClientId, forceCodeForRefreshToken: forceCodeForRefreshToken, + forceAccountName: forceAccountName, )); unawaited(GoogleSignInPlatform.instance.userDataEvents diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml index 9f52c627db3..c256a4e6105 100644 --- a/packages/google_sign_in/google_sign_in/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/pubspec.yaml @@ -3,11 +3,11 @@ description: Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account. repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22 -version: 6.2.2 +version: 6.3.0 environment: - sdk: ^3.4.0 - flutter: ">=3.22.0" + sdk: ^3.6.0 + flutter: ">=3.27.0" flutter: plugin: @@ -24,10 +24,10 @@ flutter: dependencies: flutter: sdk: flutter - google_sign_in_android: ^6.1.0 - google_sign_in_ios: ^5.7.0 - google_sign_in_platform_interface: ^2.4.0 - google_sign_in_web: ^0.12.0 + google_sign_in_android: ^6.2.0 + google_sign_in_ios: ^5.8.1 + google_sign_in_platform_interface: ^2.5.0 + google_sign_in_web: ^0.12.4+4 dev_dependencies: build_runner: ^2.1.10 diff --git a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart index 9ca4124157f..0853691f6ba 100644 --- a/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart +++ b/packages/google_sign_in/google_sign_in/test/google_sign_in_test.dart @@ -113,6 +113,17 @@ void main() { verify(mockPlatform.signIn()); }); + test('forceAccountName sent with init method call', () async { + final GoogleSignIn googleSignIn = + GoogleSignIn(forceAccountName: 'fakeEmailAddress@example.com'); + + await googleSignIn.signIn(); + + _verifyInit(mockPlatform, + forceAccountName: 'fakeEmailAddress@example.com'); + verify(mockPlatform.signIn()); + }); + test('signOut', () async { final GoogleSignIn googleSignIn = GoogleSignIn(); @@ -447,6 +458,7 @@ void _verifyInit( String? clientId, String? serverClientId, bool forceCodeForRefreshToken = false, + String? forceAccountName, }) { verify(mockSignIn.initWithParams(argThat( isA() @@ -479,6 +491,11 @@ void _verifyInit( (SignInInitParameters p) => p.forceCodeForRefreshToken, 'forceCodeForRefreshToken', forceCodeForRefreshToken, + ) + .having( + (SignInInitParameters p) => p.forceAccountName, + 'forceAccountName', + forceAccountName, ), ))); }