Skip to content

Commit 677ee83

Browse files
committed
feat: Add AppBlocObserver.
1 parent 2bb35a5 commit 677ee83

6 files changed

Lines changed: 76 additions & 6 deletions

File tree

lib/main_development.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:hydrated_bloc/hydrated_bloc.dart';
77
import 'package:path_provider/path_provider.dart';
88

99
import 'data/constants/strings.dart';
10+
import 'presentation/core/bloc_observer.dart';
1011
import 'presentation/core/main_app.dart';
1112

1213
Future<void> main() async {
@@ -16,10 +17,11 @@ Future<void> main() async {
1617
await _initHive();
1718
final hydratedStorage = await _initHydratedBloc();
1819

19-
// Zone for Hydrated Bloc.
20-
HydratedBlocOverrides.runZoned(
20+
// Zone for Hydrated Bloc and AppBlocObserver.
21+
await HydratedBlocOverrides.runZoned(
2122
() async => runApp(await Codephile.run()),
2223
storage: hydratedStorage,
24+
blocObserver: AppBlocObserver(),
2325
);
2426
}
2527

lib/main_production.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:sentry_flutter/sentry_flutter.dart';
1313

1414
import 'data/config/config.dart';
1515
import 'data/constants/strings.dart';
16+
import 'presentation/core/bloc_observer.dart';
1617
import 'presentation/core/main_app.dart';
1718

1819
void main() {
@@ -28,10 +29,11 @@ void main() {
2829
await _initHive();
2930
final hydratedStorage = await _initHydratedBloc();
3031

31-
// Zone for Hydrated Bloc.
32-
HydratedBlocOverrides.runZoned(
32+
// Zone for Hydrated Bloc and AppBlocObserver.
33+
await HydratedBlocOverrides.runZoned(
3334
() async => runApp(await Codephile.run()),
3435
storage: hydratedStorage,
36+
blocObserver: AppBlocObserver(),
3537
);
3638
},
3739
_onError,
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import 'dart:developer';
2+
3+
import 'package:flutter/foundation.dart';
4+
import 'package:flutter_bloc/flutter_bloc.dart';
5+
import 'package:sentry_flutter/sentry_flutter.dart';
6+
7+
class AppBlocObserver extends BlocObserver {
8+
@override
9+
void onCreate(BlocBase bloc) {
10+
log(
11+
'[BLOC] [CREATE] ${bloc.runtimeType}',
12+
);
13+
super.onCreate(bloc);
14+
}
15+
16+
@override
17+
void onEvent(Bloc bloc, Object? event) {
18+
super.onEvent(bloc, event);
19+
log(
20+
'[BLOC] [EVENT] ${bloc.runtimeType} $event',
21+
);
22+
}
23+
24+
@override
25+
void onChange(BlocBase bloc, Change change) {
26+
super.onChange(bloc, change);
27+
log(
28+
'[BLOC] [CHANGE] ${bloc.runtimeType} '
29+
'{ currentState: ${change.currentState}, '
30+
'nextState: ${change.nextState} }',
31+
);
32+
}
33+
34+
@override
35+
void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
36+
if (kDebugMode) {
37+
log(
38+
'[BLOC] [ERROR] ${bloc.runtimeType}\n'
39+
'Error: $error\n'
40+
'Stacktrace: $stackTrace',
41+
);
42+
} else {
43+
Sentry.captureException(
44+
error,
45+
stackTrace: stackTrace,
46+
hint: bloc.runtimeType.toString(),
47+
);
48+
}
49+
super.onError(bloc, error, stackTrace);
50+
}
51+
52+
@override
53+
void onClose(BlocBase bloc) {
54+
log(
55+
'[BLOC] [CLOSE] ${bloc.runtimeType}',
56+
);
57+
super.onClose(bloc);
58+
}
59+
}

lib/presentation/core/main_app.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ import 'package:flutter/material.dart';
22
import 'package:get/get.dart';
33
import 'package:sentry_flutter/sentry_flutter.dart';
44

5-
import 'router.dart';
6-
75
import '../../data/services/local/storage_service.dart';
86
import '../../data/services/remote/api_service.dart';
7+
import 'router.dart';
98

109
class Codephile extends StatelessWidget {
1110
const Codephile({Key? key}) : super(key: key);

pubspec.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,13 @@ packages:
176176
url: "https://pub.dartlang.org"
177177
source: hosted
178178
version: "4.0.4"
179+
equatable:
180+
dependency: "direct main"
181+
description:
182+
name: equatable
183+
url: "https://pub.dartlang.org"
184+
source: hosted
185+
version: "2.0.3"
179186
fake_async:
180187
dependency: transitive
181188
description:

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ environment:
1010

1111
dependencies:
1212
dio: ^4.0.4
13+
equatable: ^2.0.3
1314
firebase_core: ^1.11.0
1415
firebase_crashlytics: ^2.4.5
1516
firebase_messaging: ^11.2.5

0 commit comments

Comments
 (0)