forked from eatvio/eatvio_app
43 lines
1.5 KiB
Dart
43 lines
1.5 KiB
Dart
import 'dart:developer';
|
||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||
|
||
/// Базовый класс для всех Cubit'ов с унифицированной обработкой ошибок
|
||
abstract class BaseCubit<State> extends Cubit<State> {
|
||
BaseCubit(super.initialState);
|
||
|
||
/// Унифицированная обработка ошибок
|
||
void handleError(Object error, [StackTrace? stackTrace]) {
|
||
log('Error in $runtimeType: $error', stackTrace: stackTrace);
|
||
// Здесь можно добавить отправку ошибок в Sentry или другую систему мониторинга
|
||
}
|
||
|
||
/// Безопасное выполнение асинхронных операций
|
||
Future<T?> safeExecute<T>(Future<T> Function() operation) async {
|
||
try {
|
||
return await operation();
|
||
} catch (error, stackTrace) {
|
||
handleError(error, stackTrace);
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/// Безопасное выполнение асинхронных операций с обработкой состояния
|
||
Future<T?> safeExecuteWithState<T>(
|
||
Future<T> Function() operation, {
|
||
required State loadingState,
|
||
required State Function(T result) successState,
|
||
required State Function(Object error) errorState,
|
||
}) async {
|
||
try {
|
||
emit(loadingState);
|
||
final result = await operation();
|
||
emit(successState(result));
|
||
return result;
|
||
} catch (error, stackTrace) {
|
||
handleError(error, stackTrace);
|
||
emit(errorState(error));
|
||
return null;
|
||
}
|
||
}
|
||
}
|