“ما را در اینستاگرامدنبال کنید”
در این مقاله از سری مقالات برنامه نویسی اندرویداومدیم در مورد State Flow در اندروید ، صحبت کنیم. پس با سایت ترولرنهمراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندرویدغافل نشید.”
توی دوره ژنرال صفر تا صد زبان State Flow در اندروید رو در فصل Flow کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از State Flow استفاده کردیم و بطور کامل اون رو آموزش دادیم.
State Flow یک ابزار قدرتمند در برنامهنویسی اندروید با استفاده از زبان Kotlin است که به توسعهدهندگان اجازه میدهد تا جریان دادهها را به صورت مستقیم کنترل کرده و به روز کنند.
این کتابخانه از کوروتینهای Kotlin بهره میبرد و مانند LiveData عمل میکند، اما با امکانات بیشتر و قابلیتهای تطبیق با زنجیرههای کوروتین.
به دلیل این تواناییها، State Flow به توسعهدهندگان اجازه میدهد تا دادههای زمینهای را به راحتی و کارآمد مدیریت کنند، که این امر از اهمیت بسزایی در توسعه برنامههای اندروید برخوردار است.
در این مقاله، ما به طور کامل با State Flow آشنا میشویم و نحوه استفاده از آن در پروژههای اندروید را با ارائه مثالهای کاربردی آموزش میدهیم.
در زمان نوشتن کد، معمولاً نیاز است که دادههای زمینهای (مثلاً دادههای مرتبط با وضعیت UI) به روز شوند. این به توسعه دهندگان امکان میدهد تا به راحتی این اطلاعات را در کد Kotlin مدیریت کنند.
مقدارها در State Flow به صورت توالی و همزمان به مشترکین اطلاع داده میشوند.
هر زمان که مقداری در State Flow تغییر میکند، تمام متغیرها آن تغییر را در لحظه دریافت میکنند.
از آنجا که StateFlow یک بخش از کتابخانهی Kotlin Coroutines است، میتوانید از ویژگیهای مرتبط با کوروتینها (مانند launch, async و …) نیز استفاده کنید.
State Flow به عنوان یک رابط مدل بسیار ساده استفاده میشود و اغلب به جای LiveData جایگزین میشود.
میتوان State Flow را با استفاده از توابع کوروتین، مانند flowOn و collect در یک زنجیرهی کوروتین به کار گرفت.
State Flow میتواند انواع دادههای مختلفی را مدیریت کند، از اعداد صحیح تا متن و شیءهای سفارشی.
استفاده از StateFlow معمولاً در کنار Coroutines ها و ViewModel ها در پروژههای اندروید بسیار مفید است. این به توسعه دهندگان امکان میدهد تا دادههای زمینهای را به روز کنند و همچنین به صورت موثر با منطق برنامه کار کنند.
در این مثال، من یک ViewModel ایجاد میکنم که دارای یک StateFlow است. همچنین یک فعالیت (Activity) ایجاد میکنم که این ViewModel را استفاده میکند تا اطلاعات را نمایش دهد.
import androidx.lifecycle.ViewModel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow class MainViewModel : ViewModel() { // MutableStateFlow برای ایجاد StateFlow ابتدایی و قابل تغییر استفاده میشود. private val _currentCount = MutableStateFlow(0) // StateFlow به عنوان یک فلو مشاهدهپذیر از _currentCount تعریف میشود. val currentCount: StateFlow<Int> get() = _currentCount // تابعی برای افزایش تعداد fun incrementCount() { // تغییر مقدار در _currentCount با افزایش یک واحد _currentCount.value++ } }
اگر به کد نوشته شده در خط 11 دقت کنید، نیاز به توضیح برای این مدل پیاده سازی وجود دارد که قصد دارم این مورد را توضیح دهم.
این خط کد از نوع Property Getter در Kotlin است. به این شکل تعریف شده تا اجازه دهد تا متغیر _currentCount که از نوع MutableStateFlow<Int> است، بتواند به صورت عمومی قرار گیرد.
میتوانید مقدار _currentCount را به صورت مستقیم به دست بیاورید اما اگر تمایل دارید تا مقدار _currentCount را بخوانید و از آن استفاده کنید، بهتر است از ویژگی currentCount استفاده کنید تا از جزئیات پیادهسازی _currentCount محافظت شود و از خواندن و نوشتن مستقیم آن جلوگیری شود.
همچنین، این کار باعث میشود که اگر در آینده نیاز به تغییر نوع یا پیادهسازی _currentCount وجود داشته باشد، کاربران کد تحت تاثیر این تغییر قرار نمیگیرند.
زیرا آنها همچنان از currentCount استفاده میکنند و تفاوتهای پاییندست پنهان میمانند.
import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.activity.viewModels import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { // ViewModel را با استفاده از Kotlin extension تعریف میکنیم. private val viewModel: MainViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // با استفاده از کوروتین یک observer برای StateFlow درست میکنیم. GlobalScope.launch(Dispatchers.Main) { viewModel.currentCount.collect { newCount -> // وقتی تعداد تغییر کند، این بلاک اجرا میشود. // newCount مقدار جدید است. // در اینجا میتوانید کارهای مرتبط با مقدار جدید را انجام دهید. } } // برای تست، تعداد را افزایش میدهیم. viewModel.incrementCount() } }
در این مثال، MainViewModel یک MutableStateFlow به نام _currentCount دارد که ابتدا به صفر تنظیم میشود.
این State Flow در currentCount قابل دسترس است. هر زمان که incrementCount فراخوانی میشود، مقدار _currentCount افزایش پیدا میکند و این تغییر به همه مشترکین اطلاع داده میشود.
در Activity، از کوروتین برای جمعآوری تغییرات از State Flow استفاده میشود. تابع collect مانیتورینگ را شروع میکند و هر زمان که تغییری در State Flow اتفاق میافتد، بلاک موردنظر اجرا میشود.
در نتیجه، State Flow به عنوان یک ابزار قدرتمند برای مدیریت جریان دادهها در برنامهنویسی اندروید با Kotlin ثابت شده است.
این کتابخانه با ایجاد ارتباط بین دادههای زمینهای و رابط کاربری به توسعهدهندگان امکان میدهد تا برنامههای پویا و کارآمدی ایجاد کنند.
با استفاده از توانمندیهای Kotlin Coroutines و قابلیتهای هماهنگی دادهها، State Flow ابزاری قدرتمند در دسترس توسعهدهندگان اندروید است که اجازه میدهد تا به راحتی و به صورت کارآمد با دادهها کار کنند.
از این رو، استفاده از StateFlow به توسعهدهندگان اجازه میدهد تا تجربه کار با دادههای زمینهای را به یک سطح جدید ارتقاء دهند و برنامههایی با واکنشهای فوری و رفتارهای دقیقتر ارائه دهند.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
دوره آموزشی کاتلین پیشرفته میتواند مهارتهای شما را با بهرهگیری از ابزارها و فناوریهای مدرن…
مزیتهای کاتلین نسبت به سایر زبانهای برنامه نویسی اندروید این است که سایر زبانها، از…
بهینهسازی عملکرد اپلیکیشنهای اندروید یکی از مهمترین فاکتورهایی است که برای کاربران در دنیای امروز…
مصاحبهی استخدامی کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…
مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه…
مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارتها و تواناییهای یک برنامهنویس در توسعه اپلیکیشنهای…