استفاده از BLoC با Http:
1. ساخت بلاک استیت: تعریف وضعیتهای مختلف مانند Loading, Loaded, Error
2. ساخت بلاک ایونت: تعریف رویدادها مانند FetchUserEvent.
3. پیادهسازی بلاک: اتصال Event و State با استفاده از پکیج BLoC.
جزئیات Event:
- هر Event میتواند وضعیت (State) را تغییر دهد.
- در Event میتوان به ریپازیتوری و ورودیهای فانکشن (event) دسترسی داشت.
- Event دو متغیر دارد:
- emit: مقداردهی به وضعیت جدید.
- event: ورودی دادهای مربوط به رویداد.
عملکرد emit:
- هر وضعیت جدید با استفاده از emit به UI ارسال میشود.
سازوکار BLoC:
- Event ورودی رویدادها را مدیریت میکند.
- State وضعیتهای جاری برنامه را نمایش میدهد.
- BLoC مسئول اتصال Event و State است و وضعیت جدید را با emit ارسال میکند.
نمونه پیادهسازی:
```dart
class UserBloc extends Bloc<UserEvent, UserState> {
final UserRepository userRepository;
UserBloc(this.userRepository) : super(UserInitial()) { // به کلاس state دادن ورودی به کلاس و دادن اولین
حالا میتونیم ایونت هارو صدا بزنیم داخل این اسکوپ //
برای مثال : //
on<FetchUserEvent>((event, emit) async {
emit(UserLoading()); // (تغییر وضعیت (وضعیت قبلی پاک و وضعیت جدید جایگزین میشه
try {
final user = await userRepository.fetchUser(event.userId);
emit(UserLoaded(user)); // تغییر وضعیت
} catch (e) {
emit(UserError(e.toString())); // تغییر وضعیت
}
});
}
}