Files
paperless-mobile/lib/core/bloc/my_bloc_observer.dart

42 lines
1.3 KiB
Dart

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:paperless_mobile/core/bloc/transient_error.dart';
import 'package:paperless_mobile/core/translation/error_code_localization_mapper.dart';
import 'package:paperless_mobile/features/logging/data/logger.dart';
import 'package:paperless_mobile/helpers/message_helpers.dart';
import 'package:paperless_mobile/routing/navigation_keys.dart';
class MyBlocObserver extends BlocObserver {
@override
void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
if (error is TransientError) {
_handleTransientError(bloc, error, stackTrace);
}
super.onError(bloc, error, stackTrace);
}
void _handleTransientError(
BlocBase bloc,
TransientError error,
StackTrace stackTrace,
) {
assert(rootNavigatorKey.currentContext != null);
final message = switch (error) {
TransientPaperlessApiError(code: var code) => translateError(
rootNavigatorKey.currentContext!,
code,
),
TransientMessageError(message: var message) => message,
};
final details = switch (error) {
TransientPaperlessApiError(details: var details) => details,
_ => null,
};
showSnackBar(
rootNavigatorKey.currentContext!,
message,
details: details,
);
}
}