Files
Finlytic/FinlyticApp/lib/features/calendar/bloc/calendar_bloc.dart
T

66 lines
2.1 KiB
Dart

import 'dart:async';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:finlytic_app/features/calendar/repositories/calendar_repository.dart';
import 'calendar_event.dart';
import 'calendar_state.dart';
export 'calendar_event.dart';
export 'calendar_state.dart';
class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
final CalendarRepository repository;
CalendarBloc({required this.repository}) : super(CalendarInitial()) {
on<FetchCalendarEvents>(_onFetchEvents);
on<FilterCategoryChanged>(_onFilterCategoryChanged);
on<FilterDateSelected>(_onFilterDateSelected);
on<MonthChanged>(_onMonthChanged);
}
Future<void> _onFetchEvents(FetchCalendarEvents event, Emitter<CalendarState> emit) async {
emit(CalendarLoading());
try {
final events = await repository.fetchEvents();
emit(CalendarLoaded(
allEvents: events,
currentMonth: DateTime.now(),
));
} catch (e) {
emit(const CalendarError("Fehler beim Laden des Kalenders."));
}
}
void _onFilterCategoryChanged(FilterCategoryChanged event, Emitter<CalendarState> emit) {
if (state is CalendarLoaded) {
final current = state as CalendarLoaded;
emit(current.copyWith(selectedCategory: event.category));
}
}
void _onFilterDateSelected(FilterDateSelected event, Emitter<CalendarState> emit) {
if (state is CalendarLoaded) {
final current = state as CalendarLoaded;
if (event.date == null) {
emit(current.copyWith(clearSelectedDate: true));
} else if (current.selectedDate != null &&
current.selectedDate!.year == event.date!.year &&
current.selectedDate!.month == event.date!.month &&
current.selectedDate!.day == event.date!.day) {
emit(current.copyWith(clearSelectedDate: true));
} else {
emit(current.copyWith(selectedDate: event.date));
}
}
}
void _onMonthChanged(MonthChanged event, Emitter<CalendarState> emit) {
if (state is CalendarLoaded) {
final current = state as CalendarLoaded;
emit(current.copyWith(
currentMonth: event.newMonth,
clearSelectedDate: true,
));
}
}
}