فهرست مطالب
پکیج flutter_bloc یکی از پرکاربردترین و معروفترین پکیجها برای مدیریت وضعیت در برنامههای فلاتر (Flutter) است. این پکیج به شما کمک میکند تا وضعیتهای مختلف برنامهی شما را به شیوهای سازماندهی شده و قابلپیشبینی مدیریت کنید. این رویکرد به نام "بلوک" (Bloc) معروف است.
بلوک یک الگوی معماری است که به شما کمک میکند تا برنامههایتان را به چندین بخش تقسیم کرده و هر بخش را به شیوهای جداگانه مدیریت کنید. در اینجا چند مفهوم اصلی در flutter_bloc توضیح داده شدهاند:
Bloc (بلوک): بلوک مسئول مدیریت وضعیت بخشهای مختلف برنامه است. یک بلوک معمولاً شامل دو قسمت اصلی است: ورودیها (Events) و خروجیها (States).
Event (رویداد): وقایعی هستند که تغییر وضعیت بلوک را ایجاد میکنند. مثلاً یک رویداد میتواند "دکمه فشرده شد" یا "اطلاعات جدید دریافت شد" باشد.
State (وضعیت): وضعیت فعلی بلوک را نمایش میدهد. هر وضعیت ممکن است ویژگیهای مختلفی از برنامه را نمایش دهد.
BlocProvider: یک ویجت در flutter_bloc که مسئول ایجاد و فراهم کردن بلوکها به قسمتهای مختلف برنامه است.
مثال کاربردی از flutter_bloc:
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
// 1. تعریف رویدادها
enum CounterEvent { increment, decrement }
// 2. تعریف بلوک
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0);
@override
Stream<int> mapEventToState(CounterEvent event) async* {
switch (event) {
case CounterEvent.increment:
yield state + 1;
break;
case CounterEvent.decrement:
yield state - 1;
break;
}
}
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BlocProvider(
create: (context) => CounterBloc(),
child: MyHomePage(),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Bloc Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
BlocBuilder<CounterBloc, int>(
builder: (context, state) {
return Text('Counter: $state');
},
),
SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
// 3. ارسال رویداد به بلوک
context.read<CounterBloc>().add(CounterEvent.increment);
},
child: Icon(Icons.add),
),
SizedBox(width: 20),
ElevatedButton(
onPressed: () {
context.read<CounterBloc>().add(CounterEvent.decrement);
},
child: Icon(Icons.remove),
),
],
),
],
),
),
);
}
}
در این مثال، یک بلوک CounterBloc تعریف شده است که وضعیت را مدیریت میکند. برنامه شامل یک صفحه (MyHomePage) است که از BlocBuilder برای نمایش وضعیت بلوک و از دکمهها برای ارسال رویداد به بلوک استفاده میکند.
نظرات
دیدگاهی برای این مطلب ثبت نشده است.