به طور خلاصه، چهار نوع سازندهی اصلی برای ایجاد فلوها در کروتین وجود دارد که به شرح زیر است:
الف- ()flowOf
: این نوع سازنده برای ایجاد یک فلو از مجموعهای از آیتمها استفاده میشود. به عبارت دیگر، شما میتوانید یک فلو را با دادن مقادیر مختلف به عنوان ورودی به ()flowOf
ایجاد کنید.
ب- ()asFlow
: این تابع نوع تبدیل است که به شما کمک میکند یک داده را به فلو تبدیل کنید. به عنوان مثال، شما میتوانید یک دنباله از اعداد را به عنوان ورودی به()asFlow
بدهید و آن را به یک فلو تبدیل کنید.
ج- {}flow
: این نوع سازنده فلوها را بر اساس یک بلاک کد تعریف میکند. با استفاده از این سازنده، شما میتوانید فلوهایی را با قوانین خاص و کاربردهای مختلفی تعریف کنید.
د- {}channelFlow
: این سازنده فلوها را با استفاده از تابع send
ایجاد میکند که توسط خود سازنده ارائه میشود. با استفاده از این سازنده، میتوانید قابلیتهای پیچیدهتری را برای فلوهای خود ایجاد کنید، مانند ارسال دادهها به صورت غیرهمزمان.حالا بیایید با استفاده از مثالها نحوهی ساخت فلوها با استفاده از سازندههای مختلف را ببینیم:
()flowOf
fun main() {
flowOf(4, 2, 5, 1, 7)
.collect {
Log.d(TAG, it.toString())
}
}
خروجی:
output:4
2
5
1
7
()asFlow
fun main() {
(1..5).asFlow()
.collect {
Log.d(TAG, it.toString())
}
}
خروجی:
output:1
2
3
4
5
{}flow
fun main() = runBlocking {
flow {
(0..10).forEach {
emit(it)
}
}
.collect {
Log.d(TAG, it.toString())
}
}
خروجی:
output:0
1
2
3
4
5
6
7
8
9
10
{}channelFlow
fun main() = runBlocking {
channelFlow {
(0..10).forEach {
send(it)
}
}
.collect {
Log.d(TAG, it.toString())
}
}
خروجی:
output:0
1
2
3
4
5
6
7
8
9
10
در این مثالها، با استفاده از انواع مختلف سازندههای فلو، فلوهایی با مقادیر مختلف ایجاد شدهاند و سپس مقادیر آنها با استفاده از تابع collect
چاپ شدهاند.