Skip to content

Commit 8825678

Browse files
authored
Merge pull request #228 from kareemabdeen/enhancement/add-bloc-observer-logging-to-core-of-app
Enhance Application Insights by Integrating BlocObserverLogger for Real-Time Monitoring in main.dart ✅
2 parents 57a4d1a + 50d878b commit 8825678

File tree

2 files changed

+54
-5
lines changed

2 files changed

+54
-5
lines changed

lib/main.dart

+6-5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
1111
import 'package:monumento/presentation/authentication/login_view.dart';
1212
import 'package:monumento/service_locator.dart';
1313
import 'package:monumento/utils/app_colors.dart';
14+
import 'package:monumento/utils/bloc_observer_logger.dart';
1415
import 'package:responsive_framework/responsive_framework.dart';
1516

1617
import 'application/authentication/authentication_bloc.dart';
@@ -28,6 +29,7 @@ void main() async {
2829
}
2930
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
3031
setupLocator();
32+
Bloc.observer = BlocObserverLogger();
3133

3234
// runApp(MyApp());
3335

@@ -85,11 +87,10 @@ class MyApp extends StatelessWidget {
8587
scrollBehavior: NoThumbScrollBehavior().copyWith(scrollbars: false),
8688
title: 'Monumento',
8789
theme: ThemeData(
88-
useMaterial3: false,
89-
tabBarTheme: TabBarTheme(
90-
indicatorColor: AppColor.appPrimary,
91-
)
92-
),
90+
useMaterial3: false,
91+
tabBarTheme: TabBarTheme(
92+
indicatorColor: AppColor.appPrimary,
93+
)),
9394
builder: (context, child) {
9495
return DevicePreview.appBuilder(
9596
context,

lib/utils/bloc_observer_logger.dart

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import 'dart:developer';
2+
3+
import 'package:flutter_bloc/flutter_bloc.dart';
4+
5+
/// A logger for observing and logging state changes and activities in Blocs/Cubits.
6+
class BlocObserverLogger extends BlocObserver {
7+
/// Logs every change in the state of any Bloc/Cubit.
8+
@override
9+
void onChange(BlocBase bloc, Change change) {
10+
super.onChange(bloc, change);
11+
log('onChange: ${bloc.runtimeType}, Prev State: ${change.currentState}, Next State: ${change.nextState}');
12+
}
13+
14+
/// Logs when a Bloc/Cubit is closed.
15+
@override
16+
void onClose(BlocBase bloc) {
17+
super.onClose(bloc);
18+
log('onClose: ${bloc.runtimeType}');
19+
}
20+
21+
/// Logs when a Bloc/Cubit is created.
22+
@override
23+
void onCreate(BlocBase bloc) {
24+
super.onCreate(bloc);
25+
log('onCreate: ${bloc.runtimeType}');
26+
}
27+
28+
/// Logs events added to the Bloc.
29+
@override
30+
void onEvent(Bloc bloc, Object? event) {
31+
super.onEvent(bloc, event);
32+
log('onEvent: ${bloc.runtimeType}, Event: $event');
33+
}
34+
35+
/// Logs errors caught in the Bloc/Cubit.
36+
@override
37+
void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
38+
super.onError(bloc, error, stackTrace);
39+
log('onError: ${bloc.runtimeType}, Error: $error');
40+
}
41+
42+
/// Logs state transitions in the Bloc.
43+
@override
44+
void onTransition(Bloc bloc, Transition transition) {
45+
super.onTransition(bloc, transition);
46+
log('onTransition: ${bloc.runtimeType}, Transition: $transition');
47+
}
48+
}

0 commit comments

Comments
 (0)