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.

73 lines
2.7KB

  1. import 'dart:async';
  2. import 'package:bloc/bloc.dart';
  3. import 'package:equatable/equatable.dart';
  4. import 'package:farm_tpf/custom_model/Environment.dart';
  5. import 'package:farm_tpf/custom_model/EnvironmentParameter.dart';
  6. import 'package:farm_tpf/data/api/app_exception.dart';
  7. import 'package:farm_tpf/data/repository/repository.dart';
  8. import 'package:meta/meta.dart';
  9. part 'plot_parameter_event.dart';
  10. part 'plot_parameter_state.dart';
  11. class PlotParameterBloc extends Bloc<PlotParameterEvent, PlotParameterState> {
  12. final Repository repository;
  13. PlotParameterBloc({required this.repository}) : super(PlotParameterInitial());
  14. static int pageSize = 100;
  15. StreamSubscription? _periodicSubscription;
  16. @override
  17. Stream<PlotParameterState> mapEventToState(
  18. PlotParameterEvent event,
  19. ) async* {
  20. if (event is DataFetched) {
  21. try {
  22. if (state is PlotParameterInitial) {
  23. yield PlotParameterLoading();
  24. final response = await repository.getEnvironmentParameters(cropId: event.cropId, page: 0, size: pageSize);
  25. List<EnvironmentParameter> updatedList = <EnvironmentParameter>[];
  26. response.forEach((element) {
  27. updatedList.add(EnvironmentParameter.clone(element));
  28. });
  29. yield PlotParameterSuccess(items: updatedList, page: 0, hasReachedMax: response.length < pageSize ? true : false);
  30. }
  31. if (state is PlotParameterSuccess) {
  32. if (_periodicSubscription == null) {
  33. //TODO: open when release
  34. // _periodicSubscription ??=
  35. // Stream.periodic(const Duration(seconds: 5), (x) => x).listen(
  36. // (_) => add(OnRefresh(cropId: event.cropId)),
  37. // onError: (error) => print("Do something with $error"));
  38. } else {
  39. _periodicSubscription?.resume();
  40. }
  41. }
  42. } catch (e) {
  43. var errorString = AppException.handleError(e);
  44. yield PlotParameterFailure(errorString: errorString);
  45. }
  46. }
  47. if (event is OnRefresh) {
  48. try {
  49. final response = await repository.getEnvironmentParameters(cropId: event.cropId, page: 0, size: pageSize);
  50. List<EnvironmentParameter> updatedList = <EnvironmentParameter>[];
  51. response.forEach((element) {
  52. updatedList.add(EnvironmentParameter.clone(element));
  53. });
  54. yield PlotParameterSuccess(items: response, page: 0, hasReachedMax: response.length < pageSize ? true : false);
  55. } catch (e) {
  56. yield PlotParameterFailure(errorString: AppException.handleError(e));
  57. }
  58. }
  59. }
  60. @override
  61. Future<void> close() async {
  62. await _periodicSubscription?.cancel();
  63. _periodicSubscription = null;
  64. print('closed subscription');
  65. return super.close();
  66. }
  67. }