مدیریت وضعیت پیچیده با استفاده از Bloc در فلاتر
یکی از چالشهای اصلی توسعه اپلیکیشنهای موبایل، مدیریت وضعیت (State Management) است. زمانی که یک اپلیکیشن بزرگتر و پیچیدهتر میشود، کنترل وضعیت به یکی از مهمترین مسائل تبدیل میشود. در فلاتر، Bloc به عنوان یکی از محبوبترین کتابخانهها برای مدیریت وضعیت، مورد توجه قرار گرفته است.
Bloc چیست؟
Bloc که مخفف Business Logic Component است، یک معماری مدیریت وضعیت مبتنی بر الگوی Streams و Reactive Programming میباشد. این کتابخانه امکان جدا کردن منطق تجاری (Business Logic) از رابط کاربری (UI) را فراهم کرده و کدها را قابل تستتر و خواناتر میکند.
چرا Bloc؟
- کاهش پیچیدگی: Bloc به شما اجازه میدهد تا منطق برنامه خود را از UI جدا کنید.
- قابلیت تست بالا: با جدا کردن منطق تجاری، تست واحد آسانتر میشود.
- معماری انعطافپذیر: امکان پیادهسازی راحت پروژههای بزرگ با معماری واضح.
نحوه نصب Bloc
برای شروع استفاده از Bloc، ابتدا باید پکیجهای لازم را نصب کنید. کافی است خطوط زیر را به فایل pubspec.yaml
پروژه خود اضافه کنید:
dependencies:
flutter_bloc: ^8.0.0
bloc: ^8.0.0
سپس دستور flutter pub get
را اجرا کنید تا پکیجها نصب شوند.
ساختار Bloc
Bloc شامل سه بخش اصلی است:
- Event: رویدادهایی که کاربران یا سیستم ایجاد میکنند.
- State: حالتهایی که اپلیکیشن بر اساس Event تغییر میکند.
- Bloc: کلاس مرکزی که Eventها را دریافت کرده و State جدید تولید میکند.
مثال ساده
فرض کنید یک شمارنده داریم که با کلیک روی دکمه افزایش یا کاهش پیدا کند. ابتدا یک کلاس Event تعریف میکنیم:
abstract class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class DecrementEvent extends CounterEvent {}
سپس کلاس State تعریف میکنیم:
class CounterState {
final int counter;
CounterState(this.counter);
}
و در نهایت، کلاس Bloc:
class CounterBloc extends Bloc{
CounterBloc() : super(CounterState(0));
@override
Stream mapEventToState(CounterEvent event) async* {
if (event is IncrementEvent) {
yield CounterState(state.counter + 1);
} else if (event is DecrementEvent) {
yield CounterState(state.counter - 1);
}
}
}
اتصال Bloc به UI
BLoC به راحتی قابل اتصال به ویجتهاست. برای این کار از BlocProvider
, BlocBuilder
, یا BlocListener
. استفاده کنید.