part of 'index.dart'; /// ----------------------------------------------- /// [DocumentPageBloc] /// ----------------------------------------------- class DocumentPageBloc extends Bloc { final DocumentPageModel model; DocumentPageBloc._(this.model, DocumentPageState initialState) : super(initialState) { on(_selectDocument); on(_unselectDocument); on(_selectCategory); on(_unselectCategory); } static DocumentPageBloc create(DocumentPageModel model) { final initialState = DocumentPageState( categories: [], documents: [], ); return DocumentPageBloc._(model, initialState); } Future _selectCategory( SelectCategoryEvent event, Emitter emit) async { print('select: ${event.query}'); final docs = await model.generateDocuments(state.page, event.query); final bool isSelected = !state.isCategorySelected; emit(state.copyWith( isCategorySelected: isSelected, documents: isSelected ? docs.$2 : state.documents, )); } Future _unselectCategory( UnselectCategoryEvent event, Emitter emit) async { emit(state); } Future _selectDocument( SelectDocumentEvent event, Emitter emit) async { print('-> select'); emit(state.copyWith( uri: await GetPDF().call(event.document.id), currentDocument: event.document, isDocumentSelected: true, )); } Future _unselectDocument( UnselectDocumentEvent event, Emitter emit) async { final docs = await model.generateDocuments(state.page, state.query); final cats = await model.generateCategories(); emit( state.copyWith( currentDocument: null, isDocumentSelected: false, documents: docs.$2, categories: cats, ), ); } } /// ----------------------------------------------- /// [DocumentPageEvent] /// ----------------------------------------------- abstract class DocumentPageEvent {} class SelectDocumentEvent extends DocumentPageEvent { final Document document; SelectDocumentEvent( this.document, ); } class UnselectDocumentEvent extends DocumentPageEvent {} class UnselectCategoryEvent extends DocumentPageEvent {} class SelectCategoryEvent extends DocumentPageEvent { final Query query; SelectCategoryEvent(this.query); } /// ----------------------------------------------- /// [DocumentPageState] /// ----------------------------------------------- class DocumentPageState { final bool isCategorySelected; final bool isDocumentSelected; final Document? currentDocument; final Category? currentCategory; final Uri? uri; final int? count; final dynamic page; final Query? query; final List documents; final List categories; const DocumentPageState({ this.query, this.count, this.page, this.uri, required this.documents, this.currentDocument, this.isCategorySelected = false, required this.categories, this.currentCategory, this.isDocumentSelected = false, }); DocumentPageState copyWith({ Uri? uri, Query? query, int? count, dynamic page, List? documents, Document? currentDocument, bool? isDocumentSelected, List? categories, Category? currentCategory, bool? isCategorySelected, }) { return DocumentPageState( uri: uri ?? this.uri, query: query ?? this.query, count: count ?? this.count, page: page ?? this.page, // documents: documents ?? this.documents, currentDocument: currentDocument ?? this.currentDocument, isDocumentSelected: isDocumentSelected ?? this.isDocumentSelected, // categories: categories ?? this.categories, currentCategory: currentCategory ?? this.currentCategory, isCategorySelected: isCategorySelected ?? this.isCategorySelected, ); } }