From 7793bbb6af5de6d7c4920e50391a6949fbe27fdf Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Thu, 14 Jan 2021 09:43:38 +0530 Subject: [PATCH 1/2] Update libs and use of onStart operator. --- app/build.gradle | 34 ++++++++--------- .../learn/completion/CompletionViewModel.kt | 3 +- .../errorhandling/catch/CatchViewModel.kt | 4 +- .../errorhandling/emitall/EmitAllViewModel.kt | 3 +- .../learn/filter/FilterViewModel.kt | 4 +- .../kotlinFlow/learn/map/MapViewModel.kt | 4 +- .../learn/reduce/ReduceViewModel.kt | 3 +- .../parallel/ParallelNetworkCallsViewModel.kt | 37 +++++++++---------- .../series/SeriesNetworkCallsViewModel.kt | 8 ++-- .../single/SingleNetworkCallViewModel.kt | 3 +- .../kotlinFlow/learn/retry/RetryViewModel.kt | 2 +- .../RetryExponentialBackoffModel.kt | 2 +- .../learn/retrywhen/RetryWhenViewModel.kt | 3 +- .../kotlinFlow/learn/room/RoomDBViewModel.kt | 3 +- .../task/onetask/LongRunningTaskViewModel.kt | 2 +- .../twotasks/TwoLongRunningTasksViewModel.kt | 2 +- build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 4 +- 18 files changed, 66 insertions(+), 59 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index fb8186f..82788c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,12 +7,12 @@ apply plugin: 'kotlin-kapt' android { - compileSdkVersion 29 - buildToolsVersion "29.0.3" + compileSdkVersion 30 + buildToolsVersion "30.0.3" defaultConfig { applicationId "com.mindorks.kotlinFlow" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -32,28 +32,28 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.2.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' // Added Dependencies - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.6" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2" implementation "androidx.recyclerview:recyclerview:1.1.0" implementation 'com.github.bumptech.glide:glide:4.11.0' - implementation 'com.squareup.retrofit2:retrofit:2.7.1' - implementation 'com.squareup.retrofit2:converter-gson:2.7.1' + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'android.arch.lifecycle:extensions:1.1.1' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0' - implementation "androidx.room:room-runtime:2.2.5" - kapt "androidx.room:room-compiler:2.2.5" - implementation "androidx.room:room-ktx:2.2.5" + implementation "androidx.room:room-runtime:2.2.6" + kapt "androidx.room:room-compiler:2.2.6" + implementation "androidx.room:room-ktx:2.2.6" // Testing - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13.1' testImplementation "org.mockito:mockito-core:3.3.3" testImplementation 'androidx.arch.core:core-testing:2.1.0' - testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.4' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/completion/CompletionViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/completion/CompletionViewModel.kt index 00d2724..db01151 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/completion/CompletionViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/completion/CompletionViewModel.kt @@ -10,6 +10,7 @@ import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch class CompletionViewModel( @@ -24,8 +25,8 @@ class CompletionViewModel( } private fun fetchUsers() { viewModelScope.launch { - status.postValue(Resource.loading(null)) apiHelper.getUsers() + .onStart { status.postValue(Resource.loading(null)) } .catch { e -> status.postValue(Resource.error(e.toString(), null)) } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/catch/CatchViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/catch/CatchViewModel.kt index 8e1d92c..39a95bf 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/catch/CatchViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/catch/CatchViewModel.kt @@ -10,6 +10,7 @@ import com.mindorks.kotlinFlow.data.model.ApiUser import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch class CatchViewModel( @@ -25,8 +26,9 @@ class CatchViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) + apiHelper.getUsersWithError() + .onStart { users.postValue(Resource.loading(null)) } .catch { e -> users.postValue(Resource.error(e.toString(), null)) } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/emitall/EmitAllViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/emitall/EmitAllViewModel.kt index a59a6cd..7ee4589 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/emitall/EmitAllViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/errorhandling/emitall/EmitAllViewModel.kt @@ -25,8 +25,9 @@ class EmitAllViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) + apiHelper.getUsers() + .onStart { users.postValue(Resource.loading(null)) } .zip( apiHelper.getUsersWithError() .catch { emitAll(flowOf(emptyList())) }) { usersFromApi, moreUsersFromApi -> diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/filter/FilterViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/filter/FilterViewModel.kt index d37bf72..43b6944 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/filter/FilterViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/filter/FilterViewModel.kt @@ -9,6 +9,7 @@ import com.mindorks.kotlinFlow.data.local.DatabaseHelper import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.flow.asFlow import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.toList import kotlinx.coroutines.launch @@ -20,9 +21,10 @@ class FilterViewModel( fun startFilterTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) + val result = mutableListOf() (1..5).asFlow() + .onStart { status.postValue(Resource.loading(null)) } .filter { it % 2 == 0 } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/map/MapViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/map/MapViewModel.kt index c29d064..887f86f 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/map/MapViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/map/MapViewModel.kt @@ -11,6 +11,7 @@ import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch @@ -27,8 +28,9 @@ class MapViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) + apiHelper.getUsers() + .onStart { users.postValue(Resource.loading(null)) } .map { apiUserList -> val userList = mutableListOf() for (apiUser in apiUserList) { diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/reduce/ReduceViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/reduce/ReduceViewModel.kt index cb27a34..be2e560 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/reduce/ReduceViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/reduce/ReduceViewModel.kt @@ -8,6 +8,7 @@ import com.mindorks.kotlinFlow.data.api.ApiHelper import com.mindorks.kotlinFlow.data.local.DatabaseHelper import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.reduce import kotlinx.coroutines.launch @@ -20,8 +21,8 @@ class ReduceViewModel( fun startReduceTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) val result = (1..5).asFlow() + .onStart { status.postValue(Resource.loading(null)) } .reduce { a, b -> a + b } status.postValue(Resource.success(result.toString())) diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/parallel/ParallelNetworkCallsViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/parallel/ParallelNetworkCallsViewModel.kt index 2d92677..afe8e9a 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/parallel/ParallelNetworkCallsViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/parallel/ParallelNetworkCallsViewModel.kt @@ -9,15 +9,12 @@ import com.mindorks.kotlinFlow.data.local.DatabaseHelper import com.mindorks.kotlinFlow.data.model.ApiUser import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.catch -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.flowOn -import kotlinx.coroutines.flow.zip +import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch class ParallelNetworkCallsViewModel( - private val apiHelper: ApiHelper, - private val dbHelper: DatabaseHelper + private val apiHelper: ApiHelper, + private val dbHelper: DatabaseHelper ) : ViewModel() { private val users = MutableLiveData>>() @@ -28,21 +25,21 @@ class ParallelNetworkCallsViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) apiHelper.getUsers() - .zip(apiHelper.getMoreUsers()) { usersFromApi, moreUsersFromApi -> - val allUsersFromApi = mutableListOf() - allUsersFromApi.addAll(usersFromApi) - allUsersFromApi.addAll(moreUsersFromApi) - return@zip allUsersFromApi - } - .flowOn(Dispatchers.Default) - .catch { e -> - users.postValue(Resource.error(e.toString(), null)) - } - .collect { - users.postValue(Resource.success(it)) - } + .onStart { users.postValue(Resource.loading(null)) } + .zip(apiHelper.getMoreUsers()) { usersFromApi, moreUsersFromApi -> + val allUsersFromApi = mutableListOf() + allUsersFromApi.addAll(usersFromApi) + allUsersFromApi.addAll(moreUsersFromApi) + return@zip allUsersFromApi + } + .flowOn(Dispatchers.Default) + .catch { e -> + users.postValue(Resource.error(e.toString(), null)) + } + .collect { + users.postValue(Resource.success(it)) + } } } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/series/SeriesNetworkCallsViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/series/SeriesNetworkCallsViewModel.kt index 04e5d82..141a7da 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/series/SeriesNetworkCallsViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/series/SeriesNetworkCallsViewModel.kt @@ -9,10 +9,7 @@ import com.mindorks.kotlinFlow.data.local.DatabaseHelper import com.mindorks.kotlinFlow.data.model.ApiUser import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.catch -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.flatMapConcat -import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.* import kotlinx.coroutines.launch class SeriesNetworkCallsViewModel( @@ -28,9 +25,10 @@ class SeriesNetworkCallsViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) + val allUsersFromApi = mutableListOf() apiHelper.getUsers() + .onStart { users.postValue(Resource.loading(null)) } .flatMapConcat { usersFromApi -> allUsersFromApi.addAll(usersFromApi) apiHelper.getMoreUsers() diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/single/SingleNetworkCallViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/single/SingleNetworkCallViewModel.kt index a8bb0ad..f1873e5 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/single/SingleNetworkCallViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrofit/single/SingleNetworkCallViewModel.kt @@ -11,6 +11,7 @@ import com.mindorks.kotlinFlow.utils.Resource import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.launch class SingleNetworkCallViewModel( @@ -26,8 +27,8 @@ class SingleNetworkCallViewModel( private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) apiHelper.getUsers() + .onStart { users.postValue(Resource.loading(null)) } .catch { e -> users.postValue(Resource.error(e.toString(), null)) } diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retry/RetryViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retry/RetryViewModel.kt index 1e9f6c3..79772de 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retry/RetryViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retry/RetryViewModel.kt @@ -22,9 +22,9 @@ class RetryViewModel( fun startTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) // do a long running task doLongRunningTask() + .onStart { status.postValue(Resource.loading(null)) } .flowOn(Dispatchers.Default) .retry(retries = 3) { cause -> if (cause is IOException) { diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retryexponentialbackoff/RetryExponentialBackoffModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retryexponentialbackoff/RetryExponentialBackoffModel.kt index a73ce0a..7adf98e 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retryexponentialbackoff/RetryExponentialBackoffModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retryexponentialbackoff/RetryExponentialBackoffModel.kt @@ -22,11 +22,11 @@ class RetryExponentialBackoffModel( fun startTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) // do a long running task var currentDelay = 1000L val delayFactor = 2 doLongRunningTask() + .onStart { status.postValue(Resource.loading(null)) } .flowOn(Dispatchers.Default) .retry(retries = 3) { cause -> if (cause is IOException) { diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrywhen/RetryWhenViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrywhen/RetryWhenViewModel.kt index 60ef5dd..92ae258 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/retrywhen/RetryWhenViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/retrywhen/RetryWhenViewModel.kt @@ -22,9 +22,10 @@ class RetryWhenViewModel( fun startTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) + // do a long running task doLongRunningTask() + .onStart { status.postValue(Resource.loading(null)) } .flowOn(Dispatchers.Default) .retryWhen { cause, attempt -> if (cause is IOException && attempt < 3) { diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/room/RoomDBViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/room/RoomDBViewModel.kt index fbdef08..4f2020e 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/room/RoomDBViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/room/RoomDBViewModel.kt @@ -23,8 +23,9 @@ class RoomDBViewModel(private val apiHelper: ApiHelper, private val dbHelper: Da private fun fetchUsers() { viewModelScope.launch { - users.postValue(Resource.loading(null)) + dbHelper.getUsers() + .onStart { users.postValue(Resource.loading(null)) } .flatMapConcat { usersFromDb -> if (usersFromDb.isEmpty()) { return@flatMapConcat apiHelper.getUsers() diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/task/onetask/LongRunningTaskViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/task/onetask/LongRunningTaskViewModel.kt index c3ab2b6..3863703 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/task/onetask/LongRunningTaskViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/task/onetask/LongRunningTaskViewModel.kt @@ -21,9 +21,9 @@ class LongRunningTaskViewModel( fun startLongRunningTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) // do a long running task doLongRunningTask() + .onStart { status.postValue(Resource.loading(null)) } .flowOn(Dispatchers.Default) .catch { status.postValue(Resource.error("Something Went Wrong", null)) diff --git a/app/src/main/java/com/mindorks/kotlinFlow/learn/task/twotasks/TwoLongRunningTasksViewModel.kt b/app/src/main/java/com/mindorks/kotlinFlow/learn/task/twotasks/TwoLongRunningTasksViewModel.kt index 9716bda..a7bbad3 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/learn/task/twotasks/TwoLongRunningTasksViewModel.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/learn/task/twotasks/TwoLongRunningTasksViewModel.kt @@ -21,8 +21,8 @@ class TwoLongRunningTasksViewModel( fun startLongRunningTask() { viewModelScope.launch { - status.postValue(Resource.loading(null)) doLongRunningTaskOne() + .onStart { status.postValue(Resource.loading(null)) } .zip(doLongRunningTaskTwo()) { resultOne, resultTwo -> return@zip resultOne + resultTwo } diff --git a/build.gradle b/build.gradle index 1d8a18b..b7d2997 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.61' + ext.kotlin_version = '1.4.21' ext.versions = [ lifecycle: "2.2.0-rc03" ] @@ -11,7 +11,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.1.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 35ce231..be3bcc0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Jan 07 18:56:30 IST 2020 +#Thu Jan 14 09:33:25 IST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip From 10929d408d624ef9f5e8ab14893359cd44456eed Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Fri, 15 Jan 2021 12:30:40 +0530 Subject: [PATCH 2/2] Use flow as the type instead of using flow builder. --- .../com/mindorks/kotlinFlow/data/local/DatabaseHelperImpl.kt | 2 +- .../java/com/mindorks/kotlinFlow/data/local/dao/UserDao.kt | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/mindorks/kotlinFlow/data/local/DatabaseHelperImpl.kt b/app/src/main/java/com/mindorks/kotlinFlow/data/local/DatabaseHelperImpl.kt index 12e6abc..baaec53 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/data/local/DatabaseHelperImpl.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/data/local/DatabaseHelperImpl.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.flow class DatabaseHelperImpl(private val appDatabase: AppDatabase) : DatabaseHelper { override fun getUsers(): Flow> = - flow { emit(appDatabase.userDao().getAll()) } + appDatabase.userDao().getAll() override fun insertAll(users: List): Flow = flow { appDatabase.userDao().insertAll(users) diff --git a/app/src/main/java/com/mindorks/kotlinFlow/data/local/dao/UserDao.kt b/app/src/main/java/com/mindorks/kotlinFlow/data/local/dao/UserDao.kt index 8be055d..c20a002 100644 --- a/app/src/main/java/com/mindorks/kotlinFlow/data/local/dao/UserDao.kt +++ b/app/src/main/java/com/mindorks/kotlinFlow/data/local/dao/UserDao.kt @@ -5,12 +5,13 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import com.mindorks.kotlinFlow.data.local.entity.User +import kotlinx.coroutines.flow.Flow @Dao interface UserDao { @Query("SELECT * FROM user") - fun getAll(): List + fun getAll(): Flow> @Insert fun insertAll(users: List)