Skip to content

Commit 53f5bcd

Browse files
authored
fix: login loading (fireship-io#10)
* refactor: rename initial login state * feat(shared): add `GoogleSignInCancelledFailure` * fix(user_repository): handle google signin cancellation * refactor: rename logOut to signOut * fix: handle google signin cancellation
1 parent 50a79f6 commit 53f5bcd

File tree

8 files changed

+30
-19
lines changed

8 files changed

+30
-19
lines changed

lib/app/cubit/app_cubit.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class AppCubit extends Cubit<AppState> {
2727

2828
Future<void> logOut() async {
2929
try {
30-
await _userRepository.logOut();
30+
await _userRepository.signOut();
3131
} on AppFailure catch (failure) {
3232
_onAppFailed(failure);
3333
}

lib/app/view/app.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ class _AppView extends StatelessWidget {
5252
context.showSnackBar(l10n.authFailureMessage);
5353
return;
5454
}
55-
if (failure is LogOutFailure) {
56-
context.showSnackBar(l10n.logOutFailureMessage);
55+
if (failure is SignOutFailure) {
56+
context.showSnackBar(l10n.signOutFailureMessage);
5757
return;
5858
}
5959
context.showSnackBar(l10n.unknownFailureMessage);

lib/l10n/arb/app_en.arb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
"@authFailureMessage": {
99
"description": "`AuthFailure` message"
1010
},
11-
"logOutFailureMessage": "There's been an error while logging out, please try again!",
12-
"@logOutFailureMessage": {
11+
"signOutFailureMessage": "There's been an error while logging out, please try again!",
12+
"@signOutFailureMessage": {
1313
"description": "`LogOutFailure` message"
1414
},
1515
"anonymousSignInFailureMessage": "You can't sign in as a guest at the moment, please try again later!",

lib/login/cubit/login_cubit.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ part 'login_state.dart';
88
class LoginCubit extends Cubit<LoginState> {
99
LoginCubit({required UserRepository userRepository})
1010
: _userRepository = userRepository,
11-
super(const LoginState.pure());
11+
super(const LoginState.initial());
1212

1313
final UserRepository _userRepository;
1414

@@ -25,6 +25,8 @@ class LoginCubit extends Cubit<LoginState> {
2525
try {
2626
emit(const LoginState.signingInWithGoogle());
2727
await _userRepository.signInWithGoogle();
28+
} on GoogleSignInCancelledFailure {
29+
emit(const LoginState.initial());
2830
} on AppFailure catch (failure) {
2931
_onLoginFailed(failure);
3032
}
@@ -41,6 +43,6 @@ class LoginCubit extends Cubit<LoginState> {
4143

4244
void _onLoginFailed(AppFailure failure) {
4345
emit(LoginState.failure(failure));
44-
emit(const LoginState.pure());
46+
emit(const LoginState.initial());
4547
}
4648
}

lib/login/cubit/login_state.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
part of 'login_cubit.dart';
22

3-
enum LoginStatus { pure, signingIn, failure }
3+
enum LoginStatus { initial, signingIn, failure }
44

55
extension LoginStatusExtensions on LoginStatus {
66
bool get isSigningIn => this == LoginStatus.signingIn;
@@ -16,12 +16,12 @@ extension SignInMethodExtensions on SignInMethod {
1616

1717
class LoginState extends Equatable {
1818
const LoginState._({
19-
this.status = LoginStatus.pure,
19+
this.status = LoginStatus.initial,
2020
this.signInMethod = SignInMethod.none,
2121
this.failure = AppFailure.none,
2222
});
2323

24-
const LoginState.pure() : this._();
24+
const LoginState.initial() : this._();
2525

2626
const LoginState.signingInAnonymously()
2727
: this._(

packages/shared/lib/src/failures.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ class AppFailure implements Exception {
22
const AppFailure._();
33

44
factory AppFailure.fromAuth() => const AuthFailure();
5-
factory AppFailure.fromLogOut() => const LogOutFailure();
5+
factory AppFailure.fromSignOut() => const SignOutFailure();
66
factory AppFailure.fromAnonymousSignIn() => const AnonymousSignInFailure();
77
factory AppFailure.fromGoogleSignIn() => const GoogleSignInFailure();
8+
factory AppFailure.fromGoogleSignInCancelled() =>
9+
const GoogleSignInCancelledFailure();
810
factory AppFailure.fromAppleSignIn() => const AppleSignInFailure();
911
factory AppFailure.fromSignInWithAppleNotSupported() =>
1012
const AppleSignInNotSupportedFailure();
@@ -24,8 +26,8 @@ class AuthFailure extends AppFailure {
2426
const AuthFailure() : super._();
2527
}
2628

27-
class LogOutFailure extends AppFailure {
28-
const LogOutFailure() : super._();
29+
class SignOutFailure extends AppFailure {
30+
const SignOutFailure() : super._();
2931
}
3032

3133
class AnonymousSignInFailure extends AppFailure {
@@ -36,6 +38,10 @@ class GoogleSignInFailure extends AppFailure {
3638
const GoogleSignInFailure() : super._();
3739
}
3840

41+
class GoogleSignInCancelledFailure extends AppFailure {
42+
const GoogleSignInCancelledFailure() : super._();
43+
}
44+
3945
class AppleSignInFailure extends AppFailure {
4046
const AppleSignInFailure() : super._();
4147
}

packages/user_repository/lib/src/firebase_user_repository.dart

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class FirebaseUserRepository implements UserRepository {
4444
try {
4545
final googleSignInAccount = await _googleSignIn.signIn();
4646
if (googleSignInAccount == null) {
47-
return;
47+
throw AppFailure.fromGoogleSignInCancelled();
4848
}
4949
final googleSignInAuth = await googleSignInAccount.authentication;
5050

@@ -103,11 +103,14 @@ class FirebaseUserRepository implements UserRepository {
103103
}
104104

105105
@override
106-
Future<void> logOut() async {
106+
Future<void> signOut() async {
107107
try {
108-
await _firebaseAuth.signOut();
109-
} on FirebaseAuthException {
110-
throw AppFailure.fromLogOut();
108+
await Future.wait([
109+
_googleSignIn.signOut(),
110+
_firebaseAuth.signOut(),
111+
]);
112+
} on Exception {
113+
throw AppFailure.fromSignOut();
111114
}
112115
}
113116

packages/user_repository/lib/src/user_repository.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ abstract class UserRepository {
3030
Future<void> signInWithApple();
3131

3232
/// Logs out the current user.
33-
Future<void> logOut();
33+
Future<void> signOut();
3434

3535
/// Marks a quiz as completed.
3636
///

0 commit comments

Comments
 (0)