import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:farm_tpf/data/api/app_exception.dart'; import 'package:farm_tpf/data/repository/repository.dart'; import 'package:meta/meta.dart'; part 'plot_parameter_event.dart'; part 'plot_parameter_state.dart'; class PlotParameterBloc extends Bloc { final Repository repository; PlotParameterBloc({@required this.repository}) : super(PlotParameterInitial()); static int pageSize = 20; @override Stream mapEventToState( PlotParameterEvent event, ) async* { if (event is DataFetched && !(state is PlotParameterSuccess && (state as PlotParameterSuccess).hasReachedMax)) { try { if (state is PlotParameterInitial) { yield PlotParameterLoading(); final response = await repository.getEnvironmentParameters( cropId: event.cropId, page: 0, size: pageSize); yield PlotParameterSuccess( items: response, page: 0, hasReachedMax: response.length < pageSize ? true : false); } //TODO: check paging api // if (state is PlotParameterSuccess) { // final currentState = state as PlotParameterSuccess; // int page = currentState.page + 1; // final response = await repository.getEnvironmentParameters( // cropId: event.cropId, page: page, size: pageSize); // yield response.isEmpty // ? currentState.copyWith(hasReachedMax: true) // : PlotParameterSuccess( // items: currentState.items + response, // page: currentState.page + 1, // hasReachedMax: false); // } } catch (e) { var errorString = AppException.handleError(e); yield PlotParameterFailure(errorString: errorString); } } if (event is OnRefresh) { try { yield PlotParameterLoading(); final response = await repository.getEnvironmentParameters( cropId: event.cropId, page: 0, size: pageSize); yield PlotParameterSuccess( items: response, page: 0, hasReachedMax: response.length < pageSize ? true : false); } catch (e) { yield PlotParameterFailure(errorString: AppException.handleError(e)); } } } }