import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:injectable/injectable.dart'; import '../../../../core/utils/logger.dart'; import '../../data/repositories/notification_feed_repository.dart'; import 'notification_event.dart'; import 'notification_state.dart'; @injectable class NotificationBloc extends Bloc { final NotificationFeedRepository _repository; NotificationBloc(this._repository) : super(NotificationInitial()) { on(_onLoadNotificationsRequested); on(_onNotificationMarkedAsRead); } Future _onLoadNotificationsRequested(LoadNotificationsRequested event, Emitter emit) async { emit(NotificationLoading()); try { final items = await _repository.getNotifications(); emit(NotificationLoaded(items: items)); } catch (e, st) { AppLogger.error('NotificationBloc: chargement notifications échoué', error: e, stackTrace: st); emit(NotificationError('Erreur de chargement: $e')); } } Future _onNotificationMarkedAsRead(NotificationMarkedAsRead event, Emitter emit) async { if (state is NotificationLoaded) { final currentState = state as NotificationLoaded; try { await _repository.markAsRead(event.id); final updatedItems = currentState.items.map((item) { if (item.id == event.id) { return NotificationItem( id: item.id, title: item.title, body: item.body, date: item.date, isRead: true, category: item.category, ); } return item; }).toList(); emit(NotificationLoaded(items: updatedItems)); } catch (e, st) { AppLogger.error('NotificationBloc: marquer comme lu échoué', error: e, stackTrace: st); emit(NotificationError('Impossible de marquer comme lu')); } } } }