part of 'index.dart'; /// ----------------------------------------------- /// [DocumentPageBloc] /// ----------------------------------------------- class DocumentPageBloc extends Bloc { final DocumentPageModel model; static DocumentPageBloc? _singleton; factory DocumentPageBloc(DocumentPageModel model) { _singleton ??= DocumentPageBloc._internal(model); return _singleton!; } DocumentPageBloc._internal(this.model) : super(DocumentPageState()) { on(_selectDocument); on(_unselectDocument); on(_filterCategoryEvent); } Future _filterCategoryEvent( FilterCategoryEvent event, Emitter emit) async { _selectCategory(event, emit); state.isCategorySelected ? _unselectCategory(event, emit) : _selectCategory(event, emit); } Future _selectCategory( FilterCategoryEvent event, Emitter emit) async { log('filterItems A: ${event.query}'); emit(state.copyWith( isCategorySelected: true, )); final listViewState = model.vihicleScreenManager.currentState!; listViewState.widget.bodyItems = (await model.generateBodyItems( 1, 10, event.query)) as BodyItemsBuilder; } Future _unselectCategory( FilterCategoryEvent event, Emitter emit) async { emit(state.copyWith( isCategorySelected: false, )); final listViewState = model.vihicleScreenManager.currentState!; listViewState.widget.bodyItems = (await model.generateBodyItems( 1, 10, null)) as BodyItemsBuilder; } 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 { emit( state.copyWith( currentDocument: null, isDocumentSelected: false, ), ); } } /// ----------------------------------------------- /// [DocumentPageEvent] /// ----------------------------------------------- abstract class DocumentPageEvent {} class SelectDocumentEvent extends DocumentPageEvent { final Document document; SelectDocumentEvent( this.document, ); } class UnselectDocumentEvent extends DocumentPageEvent {} class FilterCategoryEvent extends DocumentPageEvent { final Query query; FilterCategoryEvent(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; const DocumentPageState({ this.query, this.count, this.page, this.uri, this.currentDocument, this.isCategorySelected = false, 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, // currentDocument: currentDocument ?? this.currentDocument, isDocumentSelected: isDocumentSelected ?? this.isDocumentSelected, // currentCategory: currentCategory ?? this.currentCategory, isCategorySelected: isCategorySelected ?? this.isCategorySelected, ); } }