rating_cubit.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // ignore_for_file: unused_catch_stack
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter_bloc/flutter_bloc.dart';
  4. import 'models/rating_criterion_model.dart';
  5. import 'models/rating_model.dart';
  6. import 'rating_state.dart';
  7. export 'rating_state.dart';
  8. typedef IgnoreForEverCallback = Future<void> Function();
  9. typedef SaveRatingCallback = Future<void> Function(int rate, List<RatingCriterionModel> selectedCriterions);
  10. class RatingCubit extends Cubit<RatingState> {
  11. final IgnoreForEverCallback _ignoreForEverCallback;
  12. final SaveRatingCallback _saveRatingCallback;
  13. final RatingModel model;
  14. RatingCubit(this.model, this._ignoreForEverCallback, this._saveRatingCallback) : super(IdleState());
  15. final selectedCriterions = <RatingCriterionModel>{};
  16. Future<void> ignoreForEver() async {
  17. try {
  18. emit(LoadingState("Cancelando..."));
  19. await _ignoreForEverCallback.call();
  20. emit(CloseDialogState(true));
  21. } catch (ex, stack) {
  22. debugPrint('$ex');
  23. // addError(ex);
  24. emit(CloseDialogState(false));
  25. }
  26. }
  27. void selectedCriterionsUpdate(RatingCriterionModel criterion, bool isAdded) {
  28. if (isAdded) selectedCriterions.add(criterion);
  29. if (!isAdded) selectedCriterions.removeWhere((item) => item.id == criterion.id);
  30. emit(SelectedCriterionsState(selectedCriterions));
  31. }
  32. void saveRate(int rate) async {
  33. try {
  34. emit(LoadingState("Enviando Avaliação..."));
  35. await _saveRatingCallback.call(rate, selectedCriterions.toList());
  36. emit(CloseDialogState(false));
  37. } catch (ex, stack) {
  38. debugPrint('$ex');
  39. // addError(ex);
  40. emit(CloseDialogState(false));
  41. }
  42. }
  43. }