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.

81 lines
2.8KB

  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})
  14. : super(PlotParameterInitial());
  15. static int pageSize = 100;
  16. StreamSubscription _periodicSubscription;
  17. @override
  18. Stream<PlotParameterState> mapEventToState(
  19. PlotParameterEvent event,
  20. ) async* {
  21. if (event is DataFetched) {
  22. try {
  23. if (state is PlotParameterInitial) {
  24. yield PlotParameterLoading();
  25. final response = await repository.getEnvironmentParameters(
  26. cropId: event.cropId, page: 0, size: pageSize);
  27. List<EnvironmentParameter> updatedList = List<EnvironmentParameter>();
  28. response.forEach((element) {
  29. updatedList.add(EnvironmentParameter.clone(element));
  30. });
  31. yield PlotParameterSuccess(
  32. items: updatedList,
  33. page: 0,
  34. hasReachedMax: response.length < pageSize ? true : false);
  35. }
  36. if (state is PlotParameterSuccess) {
  37. if (_periodicSubscription == null) {
  38. _periodicSubscription ??=
  39. Stream.periodic(const Duration(seconds: 5), (x) => x).listen(
  40. (_) => add(OnRefresh(cropId: event.cropId)),
  41. onError: (error) => print("Do something with $error"));
  42. } else {
  43. _periodicSubscription.resume();
  44. }
  45. }
  46. } catch (e) {
  47. var errorString = AppException.handleError(e);
  48. yield PlotParameterFailure(errorString: errorString);
  49. }
  50. }
  51. if (event is OnRefresh) {
  52. try {
  53. print("loading...");
  54. final response = await repository.getEnvironmentParameters(
  55. cropId: event.cropId, page: 0, size: pageSize);
  56. List<EnvironmentParameter> updatedList = List<EnvironmentParameter>();
  57. response.forEach((element) {
  58. updatedList.add(EnvironmentParameter.clone(element));
  59. });
  60. yield PlotParameterSuccess(
  61. items: response,
  62. page: 0,
  63. hasReachedMax: response.length < pageSize ? true : false);
  64. } catch (e) {
  65. yield PlotParameterFailure(errorString: AppException.handleError(e));
  66. }
  67. }
  68. }
  69. @override
  70. Future<void> close() async {
  71. await _periodicSubscription?.cancel();
  72. _periodicSubscription = null;
  73. return super.close();
  74. }
  75. }