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.

84 lines
2.7KB

  1. import 'package:bloc/bloc.dart';
  2. import 'package:equatable/equatable.dart';
  3. import 'package:farm_tpf/presentation/screens/codes/models/activity_request.dart';
  4. import 'package:farm_tpf/utils/formatter.dart';
  5. import 'package:flutter/material.dart';
  6. import 'package:get/get.dart';
  7. import '../../../../data/api/app_exception.dart';
  8. import '../../../../data/repository/repository.dart';
  9. import '../../../../models/item_dropdown.dart';
  10. import '../../../../utils/utils.dart';
  11. import '../../../custom_widgets/widget_utils.dart';
  12. import '../models/activity_type.dart';
  13. part 'update_activity_state.dart';
  14. class UpdateActivityCubit extends Cubit<UpdateActivityState> {
  15. UpdateActivityCubit() : super(UpdateActivityInitial());
  16. final repository = Repository();
  17. final formKey = GlobalKey<FormState>();
  18. var actionDate = ValueNotifier(DateTime.now());
  19. final descriptionCtl = TextEditingController();
  20. final locationCtl = TextEditingController();
  21. final expiredDateCtl = TextEditingController();
  22. var activityTypeRaws = <ActivityType>[];
  23. var activityTypes = ValueNotifier(<ItemDropDown>[]);
  24. var selectedActivityType = ValueNotifier('');
  25. // var existedUpdateActivity = UpdateUpdateActivity();
  26. void dispose() {
  27. descriptionCtl.dispose();
  28. locationCtl.dispose();
  29. expiredDateCtl.dispose();
  30. }
  31. Future<void> preparedData() async {
  32. try {
  33. await Future.delayed(const Duration(seconds: 0));
  34. emit(UpdateActivityLoading());
  35. activityTypeRaws = await repository.activityTypes();
  36. activityTypes.value = activityTypeRaws
  37. .map(
  38. (e) => ItemDropDown(key: e.id?.toString(), value: e.description),
  39. )
  40. .toList();
  41. emit(UpdateActivityPrepareDataSuccessful());
  42. } catch (e) {
  43. emit(UpdateActivityFailure(AppException.handleError(e)));
  44. }
  45. }
  46. Future<void> onSubmit(String stampCode) async {
  47. if (formKey.currentState!.validate()) {
  48. var requestActivity = ActivityRequest();
  49. var activity = activityTypeRaws.firstWhere(
  50. (e) => selectedActivityType.value == e.id?.toString(),
  51. orElse: () => ActivityType(),
  52. );
  53. requestActivity
  54. ..code = stampCode
  55. ..description = descriptionCtl.text
  56. ..location = locationCtl.text
  57. ..executeDate = actionDate.value.convertLocalDateTimeToStringUtcDateTime()
  58. ..activityTypeId = activity.id;
  59. print(requestActivity.toJson());
  60. UtilWidget.showLoading();
  61. await repository.updateActivity(
  62. (success) {
  63. UtilWidget.hideDialog();
  64. Get.back(result: 'ok');
  65. Utils.showSnackBarSuccess();
  66. },
  67. (errorMessage) {
  68. UtilWidget.hideDialog();
  69. Utils.showSnackBarError();
  70. },
  71. item: requestActivity,
  72. );
  73. }
  74. }
  75. }