جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

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

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > فلاتر > آموزش BLoC در فلاتر

آموزش BLoC در فلاتر

1403-12-16
ارسال شده توسط آموزنگار
فلاتر
آموزش BLoC در فلاتر

در فلاتر، مدیریت وضعیت (State Management) یکی از مهم‌ترین چالش‌هایی است که توسعه‌دهندگان با آن روبه‌رو هستند. کتابخانه‌های مختلفی برای مدیریت state در فلاتر وجود دارد که یکی از قدرتمندترین آن‌ها، BLoC (Business Logic Component) است. در این مقاله، به بررسی این کتابخانه، نحوه استفاده از آن و مثال‌های عملی می‌پردازیم.

کتابخانه‌های مدیریت State در فلاتر

در فلاتر، روش‌های مختلفی برای مدیریت state وجود دارد که از جمله محبوب‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

  • setState: ساده‌ترین روش مدیریت state برای ویجت‌های کوچک
  • Provider: یک راهکار ساده و کارآمد برای مدیریت وابستگی‌ها
  • GetX: مدیریت state با حداقل کدنویسی و عملکرد بالا
  • Riverpod: نسخه بهبودیافته‌ای از Provider با امکانات بیشتر
  • Redux: معماری یک‌طرفه داده‌ها برای مدیریت پیچیده state
  • BLoC/Cubit: روشی ساختاریافته بر پایه Stream برای مدیریت state

BLoC به دلیل معماری قدرتمند و مقیاس‌پذیر بودن، یکی از بهترین گزینه‌ها برای پروژه‌های متوسط تا بزرگ است.

کاربرد BLoC در فلاتر

BLoC به ما کمک می‌کند تا لایه منطقی کسب‌وکار (Business Logic) را از رابط کاربری جدا کنیم. برخی از مهم‌ترین کاربردهای این روش عبارتند از:

  • مدیریت پیچیده داده‌ها در برنامه‌های بزرگ
  • بهینه‌سازی عملکرد برنامه با استفاده از Streams
  • امکان تست‌نویسی بهتر برای منطق برنامه
  • افزایش خوانایی و نگهداری آسان‌تر کد

آشنایی با Cubit

Cubit یک نسخه ساده‌تر از BLoC است که برای مدیریت state استفاده می‌شود. تفاوت اصلی آن با BLoC این است که Cubit نیازی به Event ندارد و تنها از State برای تغییر وضعیت استفاده می‌کند. این ویژگی باعث ساده‌تر شدن کدنویسی و افزایش سرعت توسعه می‌شود.

نحوه استفاده از BLoC در فلاتر

برای استفاده از BLoC در فلاتر، ابتدا باید پکیج مربوطه را نصب کنیم:

1
flutter_bloc: ^8.1.3

سپس باید BlocProvider را در ویجت اصلی برنامه قرار دهیم تا مدیریت state به درستی انجام شود.

سوالات مصاحبه برنامه نویس فلاتر
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

آشنایی با Stream در فلاتر

Stream یکی از مفاهیم مهم در برنامه‌نویسی Reactive است که امکان ارسال و دریافت داده به‌صورت ناهمزمان را فراهم می‌کند. در BLoC از Stream برای مدیریت state استفاده می‌شود.

آشنایی با Stream Controller

Stream Controller یکی از مهم‌ترین ابزارهای کار با Stream است که به ما امکان کنترل جریان داده‌ها را می‌دهد. در BLoC، از StreamController برای ارسال و دریافت داده‌های مختلف استفاده می‌شود.

مثال عملی با Cubit

در این مثال، یک CounterCubit ایجاد می‌کنیم که مقدار شمارنده را افزایش و کاهش دهد:

1
2
3
4
5
6
7
8
import 'package:flutter_bloc/flutter_bloc.dart';
 
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);
 
  void increment() => emit(state + 1);
  void decrement() => emit(state - 1);
}

سپس در ویجت خود از BlocBuilder استفاده می‌کنیم:

1
2
3
4
5
BlocBuilder<CounterCubit, int>(
  builder: (context, count) {
    return Text('$count');
  },
)

مثال عملی با BLoC و دریافت داده از API

در این مثال، داده‌ای را از API دریافت می‌کنیم و نمایش می‌دهیم.

  1. ایجاد مدل داده:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Post {
  final int id;
  final String title;
 
  Post({required this.id, required this.title});
 
  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['id'],
      title: json['title'],
    );
  }
}

ایجاد BLoC برای دریافت داده:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
 
abstract class PostEvent {}
class FetchPosts extends PostEvent {}
 
abstract class PostState {}
class PostLoading extends PostState {}
class PostLoaded extends PostState {
  final List<Post> posts;
  PostLoaded(this.posts);
}
class PostError extends PostState {}
 
class PostBloc extends Bloc<PostEvent, PostState> {
  PostBloc() : super(PostLoading()) {
    on<FetchPosts>((event, emit) async {
      try {
        final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
        final List data = json.decode(response.body);
        final posts = data.map((e) => Post.fromJson(e)).toList();
        emit(PostLoaded(posts));
      } catch (_) {
        emit(PostError());
      }
    });
  }
}

استفاده از Bloc در ویجت:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BlocBuilder<PostBloc, PostState>(
  builder: (context, state) {
    if (state is PostLoading) {
      return CircularProgressIndicator();
    } else if (state is PostLoaded) {
      return ListView.builder(
        itemCount: state.posts.length,
        itemBuilder: (context, index) {
          return ListTile(title: Text(state.posts[index].title));
        },
      );
    } else {
      return Text("خطا در دریافت داده");
    }
  },
)

نتیجه گیری

کتابخانه Getx در فلاتر
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

در این مقاله، مفهوم BLoC و Cubit را بررسی کردیم و نحوه مدیریت state در فلاتر را با مثال‌های عملی توضیح دادیم. استفاده از BLoC باعث جداسازی منطق کسب‌وکار از UI شده و خوانایی و تست‌پذیری کد را افزایش می‌دهد. در نهایت، برای پروژه‌های بزرگ و پیچیده، BLoC یکی از بهترین روش‌های مدیریت State در فلاتر محسوب می‌شود.

قبلی آموزش توسعه وب با فریمورک Ktor کاتلین
بعدی سیر تا پیاز وردپرس و طراحی سایت وردپرسی

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=13574
  • Afghanistan (+93)
  • Albania (+355)
  • Algeria (+213)
  • American Samoa (+1)
  • Andorra (+376)
  • Angola (+244)
  • Anguilla (+1)
  • Antigua (+1)
  • Argentina (+54)
  • Armenia (+374)
  • Aruba (+297)
  • Australia (+61)
  • Austria (+43)
  • Azerbaijan (+994)
  • Bahrain (+973)
  • Bangladesh (+880)
  • Barbados (+1)
  • Belarus (+375)
  • Belgium (+32)
  • Belize (+501)
  • Benin (+229)
  • Bermuda (+1)
  • Bhutan (+975)
  • Bolivia (+591)
  • Bonaire, Sint Eustatius and Saba (+599)
  • Bosnia and Herzegovina (+387)
  • Botswana (+267)
  • Brazil (+55)
  • British Indian Ocean Territory (+246)
  • British Virgin Islands (+1)
  • Brunei (+673)
  • Bulgaria (+359)
  • Burkina Faso (+226)
  • Burundi (+257)
  • Cambodia (+855)
  • Cameroon (+237)
  • Canada (+1)
  • Cape Verde (+238)
  • Cayman Islands (+1)
  • Central African Republic (+236)
  • Chad (+235)
  • Chile (+56)
  • China (+86)
  • Colombia (+57)
  • Comoros (+269)
  • Cook Islands (+682)
  • Côte d'Ivoire (+225)
  • Costa Rica (+506)
  • Croatia (+385)
  • Cuba (+53)
  • Curaçao (+599)
  • Cyprus (+357)
  • Czech Republic (+420)
  • Democratic Republic of the Congo (+243)
  • Denmark (+45)
  • Djibouti (+253)
  • Dominica (+1)
  • Dominican Republic (+1)
  • Ecuador (+593)
  • Egypt (+20)
  • El Salvador (+503)
  • Equatorial Guinea (+240)
  • Eritrea (+291)
  • Estonia (+372)
  • Ethiopia (+251)
  • Falkland Islands (+500)
  • Faroe Islands (+298)
  • Federated States of Micronesia (+691)
  • Fiji (+679)
  • Finland (+358)
  • France (+33)
  • French Guiana (+594)
  • French Polynesia (+689)
  • Gabon (+241)
  • Georgia (+995)
  • Germany (+49)
  • Ghana (+233)
  • Gibraltar (+350)
  • Greece (+30)
  • Greenland (+299)
  • Grenada (+1)
  • Guadeloupe (+590)
  • Guam (+1)
  • Guatemala (+502)
  • Guernsey (+44)
  • Guinea (+224)
  • Guinea-Bissau (+245)
  • Guyana (+592)
  • Haiti (+509)
  • Honduras (+504)
  • Hong Kong (+852)
  • Hungary (+36)
  • Iceland (+354)
  • India (+91)
  • Indonesia (+62)
  • Iran (+98)
  • Iraq (+964)
  • Ireland (+353)
  • Isle Of Man (+44)
  • Israel (+972)
  • Italy (+39)
  • Jamaica (+1)
  • Japan (+81)
  • Jersey (+44)
  • Jordan (+962)
  • Kazakhstan (+7)
  • Kenya (+254)
  • Kiribati (+686)
  • Kuwait (+965)
  • Kyrgyzstan (+996)
  • Laos (+856)
  • Latvia (+371)
  • Lebanon (+961)
  • Lesotho (+266)
  • Liberia (+231)
  • Libya (+218)
  • Liechtenstein (+423)
  • Lithuania (+370)
  • Luxembourg (+352)
  • Macau (+853)
  • Macedonia (+389)
  • Madagascar (+261)
  • Malawi (+265)
  • Malaysia (+60)
  • Maldives (+960)
  • Mali (+223)
  • Malta (+356)
  • Marshall Islands (+692)
  • Martinique (+596)
  • Mauritania (+222)
  • Mauritius (+230)
  • Mayotte (+262)
  • Mexico (+52)
  • Moldova (+373)
  • Monaco (+377)
  • Mongolia (+976)
  • Montenegro (+382)
  • Montserrat (+1)
  • Morocco (+212)
  • Mozambique (+258)
  • Myanmar (+95)
  • Namibia (+264)
  • Nauru (+674)
  • Nepal (+977)
  • Netherlands (+31)
  • New Caledonia (+687)
  • New Zealand (+64)
  • Nicaragua (+505)
  • Niger (+227)
  • Nigeria (+234)
  • Niue (+683)
  • Norfolk Island (+672)
  • North Korea (+850)
  • Northern Mariana Islands (+1)
  • Norway (+47)
  • Oman (+968)
  • Pakistan (+92)
  • Palau (+680)
  • Palestine (+970)
  • Panama (+507)
  • Papua New Guinea (+675)
  • Paraguay (+595)
  • Peru (+51)
  • Philippines (+63)
  • Poland (+48)
  • Portugal (+351)
  • Puerto Rico (+1)
  • Qatar (+974)
  • Republic of the Congo (+242)
  • Romania (+40)
  • Reunion (+262)
  • Russia (+7)
  • Rwanda (+250)
  • Saint Helena (+290)
  • Saint Kitts and Nevis (+1)
  • Saint Pierre and Miquelon (+508)
  • Saint Vincent and the Grenadines (+1)
  • Samoa (+685)
  • San Marino (+378)
  • Sao Tome and Principe (+239)
  • Saudi Arabia (+966)
  • Senegal (+221)
  • Serbia (+381)
  • Seychelles (+248)
  • Sierra Leone (+232)
  • Singapore (+65)
  • Sint Maarten (+1)
  • Slovakia (+421)
  • Slovenia (+386)
  • Solomon Islands (+677)
  • Somalia (+252)
  • South Africa (+27)
  • South Korea (+82)
  • South Sudan (+211)
  • Spain (+34)
  • Sri Lanka (+94)
  • St. Lucia (+1)
  • Sudan (+249)
  • Suriname (+597)
  • Swaziland (+268)
  • Sweden (+46)
  • Switzerland (+41)
  • Syria (+963)
  • Taiwan (+886)
  • Tajikistan (+992)
  • Tanzania (+255)
  • Thailand (+66)
  • The Bahamas (+1)
  • The Gambia (+220)
  • Timor-Leste (+670)
  • Togo (+228)
  • Tokelau (+690)
  • Tonga (+676)
  • Trinidad and Tobago (+1)
  • Tunisia (+216)
  • Turkey (+90)
  • Turkmenistan (+993)
  • Turks and Caicos Islands (+1)
  • Tuvalu (+688)
  • U.S. Virgin Islands (+1)
  • Uganda (+256)
  • Ukraine (+380)
  • United Arab Emirates (+971)
  • United Kingdom (+44)
  • United States (+1)
  • Uruguay (+598)
  • Uzbekistan (+998)
  • Vanuatu (+678)
  • Venezuela (+58)
  • Vietnam (+84)
  • Wallis and Futuna (+681)
  • Western Sahara (+212)
  • Yemen (+967)
  • Zambia (+260)
  • Zimbabwe (+263)
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط