فهرست مطالب
Bloc Consumer در فلاتر چیست؟
در فلاتر، مفهوم **BLoC Consumer** به ویجتهایی اشاره دارد که دادهها و وضعیتهای مدیریت شده توسط BLoC را مصرف میکنند و بر اساس این دادهها بهروزرسانی میشوند. به طور خاص، BLoC Consumer بخشی از الگوی BLoC است که وظیفه آن گوش دادن به Streamها و بازتاب تغییرات در رابط کاربری است.
در کتابخانه flutter_bloc که برای پیادهسازی BLoC استفاده میشود، `BlocConsumer` یک ویجت کاربردی است که ترکیبی از `BlocListener` و `BlocBuilder` است. این ویجت به شما امکان میدهد هم به تغییرات وضعیت گوش دهید و هم رابط کاربری را بر اساس وضعیت فعلی بازسازی کنید.
### مثال استفاده از BlocConsumer
فرض کنید میخواهیم یک شمارنده ساده با استفاده از BLoC پیادهسازی کنیم.
1. **نصب بسته flutter_bloc**:
dependencies:
flutter:
sdk: flutter
flutter_bloc: ^8.0.02. **تعریف BLoC برای شمارنده**:
// counter_bloc.dart
import 'package:flutter_bloc/flutter_bloc.dart';
abstract class CounterEvent {}
class IncrementEvent extends CounterEvent {}
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0);
@override
Stream<int> mapEventToState(CounterEvent event) async* {
if (event is IncrementEvent) {
yield state + 1;
}
}
}3. **استفاده از BlocConsumer در ویجتها**:
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'counter_bloc.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BlocProvider(
create: (context) => CounterBloc(),
child: CounterScreen(),
),
);
}
}
class CounterScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('BlocConsumer Example'),
),
body: BlocConsumer<CounterBloc, int>(
listener: (context, count) {
if (count % 10 == 0 && count != 0) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Counter reached $count')),
);
}
},
builder: (context, count) {
return Center(
child: Text(
'$count',
style: TextStyle(fontSize: 24),
),
);
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
context.read<CounterBloc>().add(IncrementEvent());
},
child: Icon(Icons.add),
),
);
}
}### توضیحات:
- **BlocProvider**: یک ویجت است که BLoC را در اختیار ویجتهای فرزند قرار میدهد.
- **BlocConsumer**: یک ویجت است که دو بخش دارد:
- **listener**: به تغییرات وضعیت گوش میدهد و میتواند برای نمایش پیامها یا انجام عملیات خاص استفاده شود.
- **builder**: وضعیت فعلی را میگیرد و رابط کاربری را بر اساس آن بازسازی میکند.
در این مثال، هر بار که شمارنده به 10 یا یکی از مضربهای آن برسد، یک پیام `SnackBar` نمایش داده میشود. همچنین، مقدار شمارنده در مرکز صفحه نمایش داده میشود و با فشار دادن دکمه شناور افزایش مییابد.
نظرات
دیدگاهی برای این مطلب ثبت نشده است.