Initial commit: unionflow-mobile-apps
Application Flutter complète (sans build artifacts). Signed-off-by: lions dev Team
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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<NotificationEvent, NotificationState> {
|
||||
final NotificationFeedRepository _repository;
|
||||
|
||||
NotificationBloc(this._repository) : super(NotificationInitial()) {
|
||||
on<LoadNotificationsRequested>(_onLoadNotificationsRequested);
|
||||
on<NotificationMarkedAsRead>(_onNotificationMarkedAsRead);
|
||||
}
|
||||
|
||||
Future<void> _onLoadNotificationsRequested(LoadNotificationsRequested event, Emitter<NotificationState> 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<void> _onNotificationMarkedAsRead(NotificationMarkedAsRead event, Emitter<NotificationState> 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'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user