مقالات

آموزش استفاده از State Flow در اندروید

State Flow یک ابزار مفید در اندروید است که به توسعه دهندگان اجازه می‌دهد تا جریان داده‌های زمینه‌ای را به صورت مستقیم کنترل و به روز رسانی کنند. این یک کلاس از کتابخانه‌ی Kotlin Coroutines است که از نظر عملکردی شباهت زیادی به LiveData دارد اما با استفاده از توانایی‌های Kotlin Coroutines قابلیت‌های بیشتری ارائه می‌دهد.

 

 

“ما را در اینستاگرامدنبال کنید”

در این مقاله از سری مقالات برنامه نویسی اندرویداومدیم در مورد State Flow در اندروید ، صحبت کنیم. پس با سایت ترولرنهمراه باش.

“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندرویدغافل نشید.”

توی دوره ژنرال صفر تا صد زبان State Flow در اندروید رو در فصل Flow کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از State Flow استفاده کردیم و بطور کامل اون رو آموزش دادیم.

State Flow چیست؟

State Flow یک ابزار قدرتمند در برنامه‌نویسی اندروید با استفاده از زبان Kotlin است که به توسعه‌دهندگان اجازه می‌دهد تا جریان داده‌ها را به صورت مستقیم کنترل کرده و به روز کنند.

این کتابخانه از کوروتین‌های Kotlin بهره می‌برد و مانند LiveData عمل می‌کند، اما با امکانات بیشتر و قابلیت‌های تطبیق با زنجیره‌های کوروتین.

به دلیل این توانایی‌ها، State Flow به توسعه‌دهندگان اجازه می‌دهد تا داده‌های زمینه‌ای را به راحتی و کارآمد مدیریت کنند، که این امر از اهمیت بسزایی در توسعه برنامه‌های اندروید برخوردار است.

در این مقاله، ما به طور کامل با State Flow آشنا می‌شویم و نحوه استفاده از آن در پروژه‌های اندروید را با ارائه مثال‌های کاربردی آموزش می‌دهیم.

در زمان نوشتن کد، معمولاً نیاز است که داده‌های زمینه‌ای (مثلاً داده‌های مرتبط با وضعیت UI) به روز شوند. این به توسعه دهندگان امکان می‌دهد تا به راحتی این اطلاعات را در کد Kotlin مدیریت کنند.

ویژگی‌های اصلی State Flow

  • مدیریت و کنترل تغییرات به صورت توالی و همزمان

مقدارها در State Flow به صورت توالی و همزمان به مشترکین اطلاع داده می‌شوند.

  • مقادیر تازه و بروز

هر زمان که مقداری در State Flow تغییر می‌کند، تمام متغیرها آن تغییر را در لحظه دریافت میکنند.

  • سازگار با Kotlin Coroutines

از آنجا که StateFlow یک بخش از کتابخانه‌ی Kotlin Coroutines است، می‌توانید از ویژگی‌های مرتبط با کوروتین‌ها (مانند launch, async و …) نیز استفاده کنید.

  • دسترسی آسان

State Flow به عنوان یک رابط مدل بسیار ساده استفاده می‌شود و اغلب به جای LiveData جایگزین می‌شود.

  • تطبیق با زنجیره‌های کوروتین

می‌توان State Flow را با استفاده از توابع کوروتین، مانند flowOn و collect در یک زنجیره‌ی کوروتین به کار گرفت.

  • پشتیبانی از انواع مختلف داده

State Flow می‌تواند انواع داده‌های مختلفی را مدیریت کند، از اعداد صحیح تا متن و شیء‌های سفارشی.

استفاده از StateFlow معمولاً در کنار Coroutines ها و ViewModel ها در پروژه‌های اندروید بسیار مفید است. این به توسعه دهندگان امکان می‌دهد تا داده‌های زمینه‌ای را به روز کنند و همچنین به صورت موثر با منطق برنامه کار کنند.

 

 

با ارائه مثالی با زبان کاتلین سعی می‌کنمState Flow را بهتر برایتان توضیح دهم:

در این مثال، من یک ViewModel ایجاد می‌کنم که دارای یک StateFlow است. همچنین یک فعالیت (Activity) ایجاد می‌کنم که این ViewModel را استفاده می‌کند تا اطلاعات را نمایش دهد.

ساخت 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 استفاده می‌کنند و تفاوت‌های پایین‌دست پنهان می‌مانند.

استفاده در Activity

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 به توسعه‌دهندگان اجازه می‌دهد تا تجربه کار با داده‌های زمینه‌ای را به یک سطح جدید ارتقاء دهند و برنامه‌هایی با واکنش‌های فوری و رفتارهای دقیق‌تر ارائه دهند.

 

و همچنین ممنون میشم از طریق ستاره‌های این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.

‫5/5 ‫(2 نظر)
عاطفه امیری

Recent Posts

چگونه دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را ارتقاء دهد؟

دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را با بهره‌گیری از ابزارها و فناوری‌های مدرن…

4 ماه ago

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید این است که سایر زبان‌ها، از…

4 ماه ago

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

10 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

10 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

10 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago