- Created 8 separate BLoCs (Home, Library, BookDetails, AddBook, Scanner, Categories, Wishlist, Settings) - Each BLoC has its own event, state, and bloc files - Added 70 comprehensive tests covering all BLoC functionality - All tests passing (70/70) - Fixed linting issues and updated deprecated APIs - Improved code organization and maintainability
64 lines
1.7 KiB
Dart
64 lines
1.7 KiB
Dart
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import '../../models/models.dart';
|
|
import 'book_details_event.dart';
|
|
import 'book_details_state.dart';
|
|
|
|
class BookDetailsBloc extends Bloc<BookDetailsEvent, BookDetailsState> {
|
|
BookDetailsBloc() : super(BookDetailsState.initial()) {
|
|
on<LoadBookDetails>(_onLoadBookDetails);
|
|
on<ToggleFavorite>(_onToggleFavorite);
|
|
on<UpdateProgress>(_onUpdateProgress);
|
|
on<UpdateStatus>(_onUpdateStatus);
|
|
on<DeleteBook>(_onDeleteBook);
|
|
}
|
|
|
|
void _onLoadBookDetails(LoadBookDetails event, Emitter<BookDetailsState> emit) {
|
|
emit(state.copyWith(
|
|
book: event.book,
|
|
isLoading: false,
|
|
));
|
|
}
|
|
|
|
void _onToggleFavorite(ToggleFavorite event, Emitter<BookDetailsState> emit) {
|
|
if (state.book == null) return;
|
|
|
|
final updatedBook = state.book!.copyWith(
|
|
isFavorite: !state.book!.isFavorite,
|
|
);
|
|
|
|
emit(state.copyWith(
|
|
book: updatedBook,
|
|
));
|
|
}
|
|
|
|
void _onUpdateProgress(UpdateProgress event, Emitter<BookDetailsState> emit) {
|
|
if (state.book == null) return;
|
|
|
|
final updatedBook = state.book!.copyWith(
|
|
progress: event.progress,
|
|
status: event.progress >= 100 ? BookStatus.done : BookStatus.reading,
|
|
);
|
|
|
|
emit(state.copyWith(
|
|
book: updatedBook,
|
|
));
|
|
}
|
|
|
|
void _onUpdateStatus(UpdateStatus event, Emitter<BookDetailsState> emit) {
|
|
if (state.book == null) return;
|
|
|
|
final updatedBook = state.book!.copyWith(
|
|
status: event.status,
|
|
);
|
|
|
|
emit(state.copyWith(
|
|
book: updatedBook,
|
|
));
|
|
}
|
|
|
|
void _onDeleteBook(DeleteBook event, Emitter<BookDetailsState> emit) {
|
|
emit(state.copyWith(
|
|
isDeleted: true,
|
|
));
|
|
}
|
|
} |