Skip to content

Commit

Permalink
Bloc features
Browse files Browse the repository at this point in the history
- Added sequential transformer
- Implemented BlocObserver
  • Loading branch information
hawkkiller committed May 9, 2023
1 parent 0323477 commit 6ab87ff
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 4 deletions.
31 changes: 31 additions & 0 deletions lib/src/core/bloc/observer.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:l/l.dart';
import 'package:sizzle_starter/src/core/utils/extensions/string_extension.dart';

class AppBlocObserver extends BlocObserver {
@override
void onTransition(Bloc<Object?, Object?> bloc, Transition<Object?, Object?> transition) {
final buffer = StringBuffer()
..writeln('Bloc: ${bloc.runtimeType} | ${transition.event.runtimeType}')
..write('Transition: ${transition.currentState.runtimeType}')
..writeln(' -> ${transition.nextState.runtimeType}')
..writeln('New State: ${transition.nextState.toString().limit(100)}');
l.i(buffer.toString());
super.onTransition(bloc, transition);
}

@override
void onEvent(Bloc<Object?, Object?> bloc, Object? event) {
final buffer = StringBuffer()
..writeln('Bloc: ${bloc.runtimeType} | ${event.runtimeType}')
..writeln('Event: ${event.toString().limit(100)}');
l.i(buffer.toString());
super.onEvent(bloc, event);
}

@override
void onError(BlocBase<Object?> bloc, Object error, StackTrace stackTrace) {
l.e('Bloc: ${bloc.runtimeType} | $error', stackTrace);
super.onError(bloc, error, stackTrace);
}
}
3 changes: 3 additions & 0 deletions lib/src/core/utils/extensions/string_extension.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
extension StringExtension on String {
String limit(int length) => length < this.length ? substring(0, length) : this;
}
6 changes: 2 additions & 4 deletions lib/src/core/utils/logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,15 @@ mixin Logger {

/// Helper static method to log a flutter error [FlutterError.onError]
/// like widget overflow, etc.
///
/// it isn't sent to the sentry
///
///
static void logFlutterError(
FlutterErrorDetails details,
) {
final stack = details.stack;
l.e(_formatError('Flutter', details.exceptionAsString(), stack), stack);
}

/// Helper static method to log a platform dispatcher error
/// like native code errors
static bool logPlatformDispatcherError(Object exception, StackTrace stackTrace) {
l.e(
_formatError('PlatformDispatcher', exception.toString(), stackTrace),
Expand Down
5 changes: 5 additions & 0 deletions lib/src/feature/app/logic/app_runner.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'dart:ui';

import 'package:bloc_concurrency/bloc_concurrency.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:sizzle_starter/src/core/bloc/observer.dart';
import 'package:sizzle_starter/src/core/utils/logger.dart';
import 'package:sizzle_starter/src/feature/app/widget/app.dart';
import 'package:sizzle_starter/src/feature/initialization/logic/initialization_processor.dart';
Expand All @@ -16,6 +19,8 @@ class AppRunner with InitializationSteps, InitializationProcessor, Initializatio
final bindings = WidgetsFlutterBinding.ensureInitialized()..deferFirstFrame();
FlutterError.onError = Logger.logFlutterError;
PlatformDispatcher.instance.onError = Logger.logPlatformDispatcherError;
Bloc.observer = AppBlocObserver();
Bloc.transformer = sequential();

final result = await processInitialization(
steps: initializationSteps,
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ dependencies:
# Helpers
pure: 0.2.0
platform_info: ^3.2.0
bloc_concurrency: ^0.2.1

dev_dependencies:
# Testing
Expand Down

0 comments on commit 6ab87ff

Please sign in to comment.