Saya punya beberapa pertanyaan tentang Kotlin Flow
- Saya dapat mengamati LiveData dari beberapa Fragmen. Bisakah saya melakukan ini dengan Flow? Jika ya lalu bagaimana?
- Kami dapat memiliki beberapa LiveData dari satu LiveData menggunakan
map
&switchMap
. Apakah ada cara untuk memiliki beberapa aliran dari satu sumber sumber? - Menggunakan
MutableLiveData
Saya dapat memperbarui data dari mana saja menggunakan referensi variabel. Apakah ada cara untuk melakukan hal yang sama dengan Flow?
Saya memiliki use-case seperti: Saya akan mengamati SharedPreferences
penggunaan callbackFlow{...}
yang akan memberi saya aliran sumber tunggal. Dari Arus itu, saya ingin membuat beberapa Arus untuk setiap pasangan nilai kunci.
Ini mungkin terdengar pertanyaan konyol. Saya baru di dunia Rx and Flow.
Jawaban:
Iya. Anda dapat melakukan ini dengan
emit
dancollect
. Berpikiremit
mirip dengan data langsungpostValue
dancollect
mirip denganobserve
. Mari kita beri contoh.Gudang
ViewModel
Pecahan
Flow sangat berguna. Anda bisa membuat aliran di dalam aliran. Katakanlah Anda ingin menambahkan tanda derajat ke setiap data ramalan cuaca.
ViewModel
Kemudian kumpulkan data dalam Fragmen sama dengan # 1. Di sini yang terjadi adalah model tampilan mengumpulkan data dari repositori dan fragmen mengumpulkan data dari model tampilan.
Anda tidak dapat memancarkan nilai di luar aliran. Blok kode di dalam aliran hanya dieksekusi ketika ada kolektor. Tetapi Anda dapat mengonversi aliran ke data langsung dengan menggunakan ekstensi asLiveData dari LiveData.
ViewModel
Dalam kasus Anda, Anda bisa melakukan ini
Edit
Terima kasih kepada @mark atas komentarnya. Membuat aliran baru dalam model tampilan untuk
getWeatherForecast
fungsi sebenarnya tidak perlu. Itu dapat ditulis ulang sebagaisumber
val sharedPref = getSharedPref()
dan Anda dapat menggunakan koleksi di banyak tempatsharedPref.collect {}
. Satu-satunya hal adalah karena pengumpulan ditangguhkan, Anda harus memanggilnya dari blok coroutine. Dan dengan senang hati membantu np :)Ada
Flow.asLiveData()
fungsi ekstensi baru diandroidx.lifecycle
paket ktx baru . Anda dapat mempelajari lebih lanjut di artikel saya: https://www.netguru.com/codestories/android-coroutines-%EF%B8%8Fin-2020sumber
Dalam arsitektur 3-tier: data-domain-presentasi, Flow harus terjadi di lapisan data (database, jaringan, cache ...) dan kemudian seperti yang disebutkan Urban Urbanicicz Anda dapat memetakan Flow ke LiveData.
Secara umum, Flow hampir seperti apa yang Dapat Diamati (atau Flowable) untuk RxJava. Jangan bingung dengan LiveData.
lebih lanjut di sini: https://medium.com/@elizarov/cold-flows-hot-channels-d74769805f9
sumber