proxibuy/lib/presentation/offer/bloc/offer_bloc.dart

42 lines
1.6 KiB
Dart

// lib/presentation/offer/bloc/offer_bloc.dart
import 'package:bloc/bloc.dart';
import 'package:proxibuy/presentation/offer/bloc/offer_event.dart';
import 'package:proxibuy/presentation/offer/bloc/offer_state.dart';
class OffersBloc extends Bloc<OffersEvent, OffersState> {
OffersBloc() : super(OffersInitial()) {
on<OffersReceivedFromMqtt>(_onOffersReceivedFromMqtt);
on<ClearOffers>(_onClearOffers); // رویداد جدید برای پاک کردن دیتا
}
void _onOffersReceivedFromMqtt(
OffersReceivedFromMqtt event,
Emitter<OffersState> emit,
) {
// فقط در صورتی که لیست جدید خالی نباشد، آن را جایگزین کن
if (event.offers.isNotEmpty) {
emit(OffersLoadSuccess(event.offers));
}
// اگر لیست جدید خالی بود، و قبلا دیتایی داشتیم، حالت را تغییر نده
// این کار از نمایش صفحه خالی جلوگیری می‌کند
else if (state is! OffersLoadSuccess) {
// اگر اولین بار است و لیست خالی است، حالت موفقیت با لیست خالی را نشان بده
emit(const OffersLoadSuccess([]));
}
}
// برای زمانی که مثلا کاربر GPS را خاموش می‌کند
void _onClearOffers(ClearOffers event, Emitter<OffersState> emit) {
emit(OffersInitial());
}
}
// مدیریت رویداد جدید
void _onOffersReceivedFromMqtt(
OffersReceivedFromMqtt event,
Emitter<OffersState> emit,
) {
// جایگزین کردن لیست پیشنهادها با داده‌های جدید
emit(OffersLoadSuccess(event.offers));
}