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.0

2. **تعریف 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` نمایش داده می‌شود. همچنین، مقدار شمارنده در مرکز صفحه نمایش داده می‌شود و با فشار دادن دکمه شناور افزایش می‌یابد.

مقالات مرتبط

نرم افزار مدیریت باسکول ( هوشمند )
نرم افزار مدیریت باسکول ( هوشمند )

سیستم مدیریت باسکول بارگو – هوشمندسازی توزین در کارخانه‌ها و معادن پشتیبانی از حالت آفلاین و آنلاین حتی در شرایط قطع اینترنت، سیستم بدون وقفه به کار خود ادامه داده و پس از برقراری ارتباط، اطلاعات را به‌طور کامل با سرور آنلاین همگام‌سازی می‌کند. قابلیت اتصال به انواع باسکول‌ها سازگاری کامل با باسکول‌های دیجیتال و آنالوگ، بدون نیاز به تغییرات سخت‌افزاری. تعاریف و تنظیمات پیشرفته امکان تعریف کالاها، مشتریان، رانندگان، وسایل نقلیه و اپراتورها با دسترسی‌های متفاوت. گزارش‌گیری دقیق و متنوع گزارشات وزنی روزانه، هفتگی و ماهانه گزارشات مالی و حسابداری گزارشات سفارشی بر اساس بازه زمانی و نوع کالا رابط کاربری ساده و کاربرپسند طراحی به گونه‌ای که اپراتور باسکول بتواند در کمترین زمان عملیات توزین را انجام دهد. هوش مصنوعی و پلاک‌خوان خودکار شناسایی لحظه‌ای پلاک خودرو هنگام ورود به باسکول ذخیره تصویر خودرو و پلاک در سیستم کاهش خطا و جلوگیری از ورود اطلاعات نادرست

3 ماه قبل نوشته شده

دیدگاهی برای این مطلب ثبت نشده است.