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.7KB

  1. import 'package:bloc/bloc.dart';
  2. import 'package:equatable/equatable.dart';
  3. import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
  4. import 'package:farm_tpf/presentation/screens/codes/models/stamp_request.dart';
  5. import 'package:farm_tpf/presentation/screens/codes/models/stamp_type.dart';
  6. import 'package:farm_tpf/utils/formatter.dart';
  7. import 'package:flutter/material.dart';
  8. import 'package:get/get.dart';
  9. import '../../../../data/api/app_exception.dart';
  10. import '../../../../data/repository/repository.dart';
  11. import '../../../../models/item_dropdown.dart';
  12. import '../../../../utils/utils.dart';
  13. part 'create_stamp_state.dart';
  14. class CreateStampCubit extends Cubit<CreateStampState> {
  15. CreateStampCubit() : super(CreateStampInitial());
  16. final repository = Repository();
  17. final formKey = GlobalKey<FormState>();
  18. final descriptionCtl = TextEditingController();
  19. final quantityCtl = TextEditingController();
  20. final expiredDateCtl = TextEditingController();
  21. var stampTypeRaws = <StampType>[];
  22. var stampTypes = ValueNotifier(<ItemDropDown>[]);
  23. var selectedStampType = ValueNotifier('');
  24. // var existedCreateStamp = UpdateCreateStamp();
  25. void dispose() {
  26. descriptionCtl.dispose();
  27. quantityCtl.dispose();
  28. expiredDateCtl.dispose();
  29. }
  30. Future<void> preparedData() async {
  31. try {
  32. await Future.delayed(const Duration(seconds: 0));
  33. emit(CreateStampLoading());
  34. stampTypeRaws = await repository.stampTypes();
  35. stampTypes.value = stampTypeRaws
  36. .map(
  37. (e) => ItemDropDown(key: e.id?.toString(), value: e.exampleStampName),
  38. )
  39. .toList();
  40. emit(CreateStampPrepareDataSuccessful());
  41. } catch (e) {
  42. emit(CreateStampFailure(AppException.handleError(e)));
  43. }
  44. }
  45. Future<void> onSubmit() async {
  46. if (formKey.currentState!.validate()) {
  47. var requestStamp = RequestStamp();
  48. var stamp = stampTypeRaws.firstWhere(
  49. (e) => selectedStampType.value == e.id?.toString(),
  50. orElse: () => StampType(),
  51. );
  52. var expiredDate = DateTime.now().add(Duration(days: int.tryParse(expiredDateCtl.text) ?? 0));
  53. requestStamp
  54. ..description = descriptionCtl.text
  55. ..quantity = int.tryParse(quantityCtl.text) ?? 0
  56. ..expiredDate = expiredDate.convertLocalDateTimeToStringUtcDateTime()
  57. ..tbExampleStampId = int.tryParse(selectedStampType.value);
  58. print(requestStamp.toJson());
  59. UtilWidget.showLoading();
  60. await repository.createStamp(
  61. (success) {
  62. UtilWidget.hideDialog();
  63. Get.back(result: 'ok');
  64. Utils.showSnackBarSuccess();
  65. },
  66. (errorMessage) {
  67. UtilWidget.hideDialog();
  68. Utils.showSnackBarError();
  69. },
  70. item: requestStamp,
  71. );
  72. }
  73. }
  74. }