Skip to content

Commit f1dae73

Browse files
authored
fix(ui): fix sign out issue on desktop and web (#8331)
1 parent 982bdfb commit f1dae73

File tree

7 files changed

+56
-24
lines changed

7 files changed

+56
-24
lines changed

packages/flutterfire_ui/lib/src/auth/oauth/oauth_providers.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ abstract class OAuthProvider {
6767
return credential;
6868
}
6969

70+
Future<void> logOutProvider();
7071
Future<void> signOut() async {}
7172
}
7273

packages/flutterfire_ui/lib/src/auth/oauth/providers/apple_provider.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ class AppleProviderImpl extends AppleProvider {
7272

7373
@override
7474
dynamic get firebaseAuthProvider => null;
75+
76+
@override
77+
Future<void> logOutProvider() {
78+
return SynchronousFuture(null);
79+
}
7580
}
7681

7782
class AppleProviderConfiguration

packages/flutterfire_ui/lib/src/auth/oauth/providers/facebook_provider.dart

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@ import 'package:desktop_webview_auth/facebook.dart';
88
import 'package:flutterfire_ui/auth.dart';
99

1010
import '../../widgets/internal/oauth_provider_button_style.dart';
11-
import '../../oauth/provider_resolvers.dart';
11+
import '../provider_resolvers.dart';
1212
import '../../auth_flow.dart';
1313
import '../oauth_providers.dart';
1414

15+
import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';
16+
1517
abstract class FacebookProvider extends OAuthProvider {}
1618

17-
class FacebookProviderImpl extends FacebookProvider {
18-
final _provider = FacebookAuth.instance;
19+
class FacebookProviderImpl extends FacebookProvider with SignOutMixin {
20+
final provider = FacebookAuth.instance;
1921
final String clientId;
2022
final String redirectUri;
2123

@@ -32,7 +34,7 @@ class FacebookProviderImpl extends FacebookProvider {
3234

3335
@override
3436
Future<OAuthCredential> signIn() async {
35-
final result = await _provider.login();
37+
final result = await provider.login();
3638

3739
switch (result.status) {
3840
case LoginStatus.success:
@@ -49,18 +51,18 @@ class FacebookProviderImpl extends FacebookProvider {
4951
}
5052
}
5153

52-
@override
53-
Future<void> signOut() async {
54-
await _provider.logOut();
55-
}
56-
5754
@override
5855
OAuthCredential fromDesktopAuthResult(AuthResult result) {
5956
return FacebookAuthProvider.credential(result.accessToken!);
6057
}
6158

6259
@override
6360
FacebookAuthProvider get firebaseAuthProvider => FacebookAuthProvider();
61+
62+
@override
63+
Future<void> logOutProvider() async {
64+
await provider.logOut();
65+
}
6466
}
6567

6668
class FacebookProviderConfiguration
@@ -73,7 +75,7 @@ class FacebookProviderConfiguration
7375
this.redirectUri,
7476
});
7577

76-
FacebookProvider get _provider => FacebookProviderImpl(
78+
FacebookProvider get provider => FacebookProviderImpl(
7779
clientId: clientId,
7880
redirectUri: redirectUri ?? defaultRedirectUri,
7981
);
@@ -83,7 +85,7 @@ class FacebookProviderConfiguration
8385

8486
@override
8587
FacebookProvider createProvider() {
86-
return _provider;
88+
return provider;
8789
}
8890

8991
@override

packages/flutterfire_ui/lib/src/auth/oauth/providers/google_provider.dart

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,19 @@ import '../../widgets/internal/oauth_provider_button_style.dart';
1313
import '../oauth_providers.dart';
1414
import '../provider_resolvers.dart';
1515

16+
import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';
17+
1618
const _firebaseAuthProviderParameters = {
1719
'prompt': 'select_account',
1820
};
1921

2022
abstract class GoogleProvider extends OAuthProvider {}
2123

22-
class GoogleProviderImpl extends GoogleProvider {
24+
class GoogleProviderImpl extends GoogleProvider with SignOutMixin {
2325
String clientId;
2426
String redirectUri;
2527

26-
final _provider = GoogleSignIn();
28+
late final provider = GoogleSignIn(clientId: clientId);
2729

2830
@override
2931
final GoogleAuthProvider firebaseAuthProvider = GoogleAuthProvider();
@@ -43,7 +45,7 @@ class GoogleProviderImpl extends GoogleProvider {
4345

4446
@override
4547
Future<OAuthCredential> signIn() async {
46-
final user = await _provider.signIn();
48+
final user = await provider.signIn();
4749

4850
if (user == null) {
4951
throw AuthCancelledException();
@@ -59,19 +61,18 @@ class GoogleProviderImpl extends GoogleProvider {
5961
return credential;
6062
}
6163

62-
@override
63-
Future<void> signOut() async {
64-
await _provider.signOut();
65-
await super.signOut();
66-
}
67-
6864
@override
6965
OAuthCredential fromDesktopAuthResult(AuthResult result) {
7066
return GoogleAuthProvider.credential(
7167
idToken: result.idToken,
7268
accessToken: result.accessToken,
7369
);
7470
}
71+
72+
@override
73+
Future<void> logOutProvider() async {
74+
await provider.signOut();
75+
}
7576
}
7677

7778
class GoogleProviderConfiguration
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import 'dart:io';
2+
3+
import '../oauth_providers.dart';
4+
5+
mixin SignOutMixin on OAuthProvider {
6+
@override
7+
Future<void> signOut() async {
8+
if (Platform.isAndroid || Platform.isIOS) {
9+
await logOutProvider();
10+
}
11+
return super.signOut();
12+
}
13+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import '../oauth_providers.dart';
2+
3+
mixin SignOutMixin on OAuthProvider {}

packages/flutterfire_ui/lib/src/auth/oauth/providers/twitter_provider.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ import 'package:flutter/foundation.dart';
66
import 'package:twitter_login/twitter_login.dart';
77

88
import 'package:flutterfire_ui/auth.dart';
9-
import '../../oauth/provider_resolvers.dart';
9+
import '../provider_resolvers.dart';
1010
import '../../widgets/internal/oauth_provider_button_style.dart';
1111

1212
import '../../auth_flow.dart';
1313
import '../oauth_providers.dart';
1414

15+
import 'sign_out_mixin.dart' if (dart.library.html) 'sign_out_mixin_web.dart';
16+
1517
abstract class TwitterProvider extends OAuthProvider {}
1618

17-
class TwitterProviderImpl extends TwitterProvider {
19+
class TwitterProviderImpl extends TwitterProvider with SignOutMixin {
1820
final String apiKey;
1921
final String apiSecretKey;
2022
final String redirectUri;
@@ -26,7 +28,7 @@ class TwitterProviderImpl extends TwitterProvider {
2628
redirectUri: redirectUri,
2729
);
2830

29-
late final _provider = TwitterLogin(
31+
late final provider = TwitterLogin(
3032
apiKey: apiKey,
3133
apiSecretKey: apiSecretKey,
3234
redirectURI: redirectUri,
@@ -40,7 +42,7 @@ class TwitterProviderImpl extends TwitterProvider {
4042

4143
@override
4244
Future<OAuthCredential> signIn() async {
43-
final result = await _provider.login();
45+
final result = await provider.login();
4446

4547
switch (result.status) {
4648
case null:
@@ -67,6 +69,11 @@ class TwitterProviderImpl extends TwitterProvider {
6769

6870
@override
6971
TwitterAuthProvider get firebaseAuthProvider => TwitterAuthProvider();
72+
73+
@override
74+
Future<void> logOutProvider() {
75+
return SynchronousFuture(null);
76+
}
7077
}
7178

7279
class TwitterProviderConfiguration

0 commit comments

Comments
 (0)