import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:focusflow_shared/focusflow_shared.dart'; // ── States ───────────────────────────────────────────────────────── sealed class RewardState extends Equatable { const RewardState(); @override List get props => []; } class RewardIdle extends RewardState {} class RewardShowing extends RewardState { final Reward reward; const RewardShowing(this.reward); @override List get props => [reward]; } class RewardDismissed extends RewardState {} // ── Cubit ────────────────────────────────────────────────────────── /// Manages the reward overlay display lifecycle. /// /// Flow: /// 1. After a task is completed, call [showReward]. /// 2. The UI renders [RewardPopup] when state is [RewardShowing]. /// 3. User taps dismiss -> call [dismiss]. class RewardCubit extends Cubit { RewardCubit() : super(RewardIdle()); /// Show a reward to the user. void showReward(Reward reward) { emit(RewardShowing(reward)); } /// Dismiss the current reward and return to idle. void dismiss() { emit(RewardDismissed()); // Brief delay then return to idle so the cubit is ready for the next reward. Future.delayed(const Duration(milliseconds: 300), () { if (!isClosed) emit(RewardIdle()); }); } }