You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
2.4KB

  1. import 'dart:async';
  2. import 'package:bloc/bloc.dart';
  3. import 'package:equatable/equatable.dart';
  4. import 'package:farm_tpf/data/api/app_exception.dart';
  5. import 'package:farm_tpf/data/repository/repository.dart';
  6. import 'package:meta/meta.dart';
  7. part 'plot_parameter_event.dart';
  8. part 'plot_parameter_state.dart';
  9. class PlotParameterBloc extends Bloc<PlotParameterEvent, PlotParameterState> {
  10. final Repository repository;
  11. PlotParameterBloc({@required this.repository})
  12. : super(PlotParameterInitial());
  13. static int pageSize = 20;
  14. @override
  15. Stream<PlotParameterState> mapEventToState(
  16. PlotParameterEvent event,
  17. ) async* {
  18. if (event is DataFetched &&
  19. !(state is PlotParameterSuccess &&
  20. (state as PlotParameterSuccess).hasReachedMax)) {
  21. try {
  22. if (state is PlotParameterInitial) {
  23. yield PlotParameterLoading();
  24. final response = await repository.getEnvironmentParameters(
  25. cropId: event.cropId, page: 0, size: pageSize);
  26. yield PlotParameterSuccess(
  27. items: response,
  28. page: 0,
  29. hasReachedMax: response.length < pageSize ? true : false);
  30. }
  31. //TODO: check paging api
  32. // if (state is PlotParameterSuccess) {
  33. // final currentState = state as PlotParameterSuccess;
  34. // int page = currentState.page + 1;
  35. // final response = await repository.getEnvironmentParameters(
  36. // cropId: event.cropId, page: page, size: pageSize);
  37. // yield response.isEmpty
  38. // ? currentState.copyWith(hasReachedMax: true)
  39. // : PlotParameterSuccess(
  40. // items: currentState.items + response,
  41. // page: currentState.page + 1,
  42. // hasReachedMax: false);
  43. // }
  44. } catch (e) {
  45. var errorString = AppException.handleError(e);
  46. yield PlotParameterFailure(errorString: errorString);
  47. }
  48. }
  49. if (event is OnRefresh) {
  50. try {
  51. yield PlotParameterLoading();
  52. final response = await repository.getEnvironmentParameters(
  53. cropId: event.cropId, page: 0, size: pageSize);
  54. yield PlotParameterSuccess(
  55. items: response,
  56. page: 0,
  57. hasReachedMax: response.length < pageSize ? true : false);
  58. } catch (e) {
  59. yield PlotParameterFailure(errorString: AppException.handleError(e));
  60. }
  61. }
  62. }
  63. }