Skip to content

Commit cd6a3d5

Browse files
authored
refactor: failures (fireship-io#14)
* feat: add base failure * refactor: rename failure widget * refactor: make `handleFailure` generic * refactor: move user failures to user repository * refactor: move topic failures to topics repository * refactor: move quiz failures to quizzes repository
1 parent e1b9fe3 commit cd6a3d5

File tree

22 files changed

+131
-119
lines changed

22 files changed

+131
-119
lines changed

lib/app/cubit/app_cubit.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class AppCubit extends Cubit<AppState> {
2828
Future<void> logOut() async {
2929
try {
3030
await _userRepository.signOut();
31-
} on AppFailure catch (failure) {
31+
} on UserFailure catch (failure) {
3232
_onAppFailed(failure);
3333
}
3434
}
@@ -43,7 +43,7 @@ class AppCubit extends Cubit<AppState> {
4343
}
4444
}
4545

46-
void _onAppFailed(AppFailure failure) {
46+
void _onAppFailed(UserFailure failure) {
4747
final _state = state;
4848
emit(AppState.failure(failure: failure, user: _state.user));
4949
if (failure.requiresReauthentication) {

lib/app/cubit/app_state.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class AppState extends Equatable {
1818
const AppState._({
1919
required this.status,
2020
this.user = User.none,
21-
this.failure = AppFailure.none,
21+
this.failure = UserFailure.none,
2222
});
2323

2424
const AppState.unauthenticated() : this._(status: AppStatus.unauthenticated);
@@ -36,7 +36,7 @@ class AppState extends Equatable {
3636
);
3737

3838
const AppState.failure({
39-
required AppFailure failure,
39+
required UserFailure failure,
4040
required User user,
4141
}) : this._(
4242
status: AppStatus.failure,
@@ -46,7 +46,7 @@ class AppState extends Equatable {
4646

4747
final AppStatus status;
4848
final User user;
49-
final AppFailure failure;
49+
final UserFailure failure;
5050

5151
@override
5252
List<Object?> get props => [status, user, failure];

lib/app/view/app.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,13 @@ class _AppView extends StatelessWidget {
6161
if (state.isFailure) {
6262
final failure = state.failure;
6363
final l10n = context.l10n;
64-
if (failure is AuthFailure) {
64+
if (failure is AuthUserChangesFailure) {
6565
context.showSnackBar(l10n.authFailureMessage);
66-
return;
67-
}
68-
if (failure is SignOutFailure) {
66+
} else if (failure is SignOutFailure) {
6967
context.showSnackBar(l10n.signOutFailureMessage);
70-
return;
68+
} else {
69+
context.showSnackBar(l10n.unknownFailureMessage);
7170
}
72-
context.showSnackBar(l10n.unknownFailureMessage);
7371
}
7472
},
7573
child: FlowBuilder(

lib/login/cubit/login_cubit.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class LoginCubit extends Cubit<LoginState> {
1616
try {
1717
emit(const LoginState.signingInAnonymously());
1818
await _userRepository.signInAnonymously();
19-
} on AppFailure catch (failure) {
19+
} on UserFailure catch (failure) {
2020
_onLoginFailed(failure);
2121
}
2222
}
@@ -27,7 +27,7 @@ class LoginCubit extends Cubit<LoginState> {
2727
await _userRepository.signInWithGoogle();
2828
} on GoogleSignInCancelledFailure {
2929
emit(const LoginState.initial());
30-
} on AppFailure catch (failure) {
30+
} on UserFailure catch (failure) {
3131
_onLoginFailed(failure);
3232
}
3333
}
@@ -36,12 +36,12 @@ class LoginCubit extends Cubit<LoginState> {
3636
try {
3737
emit(const LoginState.signingInWithApple());
3838
await _userRepository.signInWithApple();
39-
} on AppFailure catch (failure) {
39+
} on UserFailure catch (failure) {
4040
_onLoginFailed(failure);
4141
}
4242
}
4343

44-
void _onLoginFailed(AppFailure failure) {
44+
void _onLoginFailed(UserFailure failure) {
4545
emit(LoginState.failure(failure));
4646
emit(const LoginState.initial());
4747
}

lib/login/cubit/login_state.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class LoginState extends Equatable {
1818
const LoginState._({
1919
this.status = LoginStatus.initial,
2020
this.signInMethod = SignInMethod.none,
21-
this.failure = AppFailure.none,
21+
this.failure = UserFailure.none,
2222
});
2323

2424
const LoginState.initial() : this._();
@@ -41,15 +41,15 @@ class LoginState extends Equatable {
4141
signInMethod: SignInMethod.apple,
4242
);
4343

44-
const LoginState.failure(AppFailure failure)
44+
const LoginState.failure(UserFailure failure)
4545
: this._(
4646
status: LoginStatus.failure,
4747
failure: failure,
4848
);
4949

5050
final LoginStatus status;
5151
final SignInMethod signInMethod;
52-
final AppFailure failure;
52+
final UserFailure failure;
5353

5454
@override
5555
List<Object> get props => [status, signInMethod, failure];

lib/quiz/view/start_view.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class StartView extends StatelessWidget {
3030
return NoContent(context.l10n.noQuizDataMessage);
3131
}
3232
if (state.isFailure) {
33-
return Failure(context.l10n.getQuizFailureMessage);
33+
return FailureText(context.l10n.getQuizFailureMessage);
3434
}
3535
return const Loader();
3636
},

lib/topics/view/topics_page.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class TopicsGrid extends StatelessWidget {
5252
return NoContent(context.l10n.noTopicsMessage);
5353
}
5454
if (state.isFailure) {
55-
return Failure(context.l10n.getTopicsFailureMessage);
55+
return FailureText(context.l10n.getTopicsFailureMessage);
5656
}
5757
return const Loader();
5858
},
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
library quizzes_repository;
22

3+
export 'src/failures.dart';
34
export 'src/models/models.dart';
45
export 'src/quizzes_repository.dart';
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'package:shared/shared.dart';
2+
3+
class QuizzesFailure extends Failure {
4+
const QuizzesFailure._();
5+
6+
factory QuizzesFailure.fromGetQuiz() => const GetQuizFailure();
7+
8+
static const none = QuizzesNoFailure();
9+
}
10+
11+
class QuizzesNoFailure extends QuizzesFailure {
12+
const QuizzesNoFailure() : super._();
13+
}
14+
15+
class GetQuizFailure extends QuizzesFailure {
16+
const GetQuizFailure() : super._();
17+
}

packages/quizzes_repository/lib/src/quizzes_repository.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:data_providers/data_providers.dart';
2-
import 'package:shared/shared.dart';
2+
import 'package:quizzes_repository/src/failures.dart';
33

44
import 'package:quizzes_repository/src/models/models.dart';
55

0 commit comments

Comments
 (0)