به طور خلاصه، چهار نوع سازندهی اصلی برای ایجاد فلوها در کروتین وجود دارد که به شرح زیر است:
الف- ()flowOf: این نوع سازنده برای ایجاد یک فلو از مجموعهای از آیتمها استفاده میشود. به عبارت دیگر، شما میتوانید یک فلو را با دادن مقادیر مختلف به عنوان ورودی به ()flowOf ایجاد کنید.
ب- ()asFlow: این تابع نوع تبدیل است که به شما کمک میکند یک داده را به فلو تبدیل کنید. به عنوان مثال، شما میتوانید یک دنباله از اعداد را به عنوان ورودی به()asFlow بدهید و آن را به یک فلو تبدیل کنید.
ج- {}flow: این نوع سازنده فلوها را بر اساس یک بلاک کد تعریف میکند. با استفاده از این سازنده، شما میتوانید فلوهایی را با قوانین خاص و کاربردهای مختلفی تعریف کنید.
د- {}channelFlow: این سازنده فلوها را با استفاده از تابع send ایجاد میکند که توسط خود سازنده ارائه میشود. با استفاده از این سازنده، میتوانید قابلیتهای پیچیدهتری را برای فلوهای خود ایجاد کنید، مانند ارسال دادهها به صورت غیرهمزمان.حالا بیایید با استفاده از مثالها نحوهی ساخت فلوها با استفاده از سازندههای مختلف را ببینیم:
()flowOffun main() {
flowOf(4, 2, 5, 1, 7)
.collect {
Log.d(TAG, it.toString())
}
}خروجی:
output:4
2
5
1
7
()asFlowfun main() {
(1..5).asFlow()
.collect {
Log.d(TAG, it.toString())
}
}خروجی:
output:1
2
3
4
5
{}flowfun 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
{}channelFlowfun 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 چاپ شدهاند.