42 lines
1.6 KiB
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));
|
|
}
|