import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../core/api/api_exception.dart'; import '../data/rating_repository.dart'; import 'rating_state.dart'; class RatingCubit extends Cubit { RatingCubit(this._repo) : super(const RatingState()); final RatingRepository _repo; void attach(PendingRating pending) => emit(RatingState(pending: pending)); void setStars(int stars) => emit(state.copyWith(stars: stars)); void setComment(String comment) => emit(state.copyWith(comment: comment)); Future submit() async { final pending = state.pending; if (pending == null || !state.canSubmit) return; emit(state.copyWith(status: RatingStatus.submitting)); try { await _repo.rate( pending.tripId, state.stars, comment: state.comment.trim().isEmpty ? null : state.comment.trim(), ); emit(state.copyWith(status: RatingStatus.done)); } on ApiException catch (e) { // 400 هنا = تقييم مزدوج، وهو نجاحٌ من منظور المستخدم: الرحلة مُقيَّمة // فعلاً، فلا يُحبس في شاشة لا مخرج منها. emit(state.copyWith( status: e.statusCode == 400 ? RatingStatus.alreadyRated : RatingStatus.failed, )); } } }