LiveData to Flow

This commit is contained in:
Sockenklaus
2022-11-17 10:04:35 +01:00
parent c20d5d55e5
commit a7c92b020b
2 changed files with 15 additions and 13 deletions

View File

@@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import com.sockenklaus.batterytracker.room.entities.Battery
import com.sockenklaus.batterytracker.room.entities.Charge import com.sockenklaus.batterytracker.room.entities.Charge
import com.sockenklaus.batterytracker.ui.AppBarTitle import com.sockenklaus.batterytracker.ui.AppBarTitle
import com.sockenklaus.batterytracker.ui.Routes import com.sockenklaus.batterytracker.ui.Routes
@@ -28,8 +29,8 @@ fun BatteryDetails(
batteryId: Int? = null batteryId: Int? = null
){ ){
val model: BatteryDetailsViewModel = viewModel() val model: BatteryDetailsViewModel = viewModel()
val battery by model.battery.observeAsState() val battery by model.battery.collectAsState(Battery(name = ""))
val charges: List<Charge> by model.charges.observeAsState(emptyList()) val charges: List<Charge> by model.charges.collectAsState(emptyList())
Column( Column(
modifier = Modifier.padding(bottom = 16.dp) modifier = Modifier.padding(bottom = 16.dp)

View File

@@ -1,14 +1,15 @@
package com.sockenklaus.batterytracker.ui.models package com.sockenklaus.batterytracker.ui.models
import android.app.Application import android.app.Application
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.*
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.asLiveData
import com.sockenklaus.batterytracker.room.BatteryTrackerDB import com.sockenklaus.batterytracker.room.BatteryTrackerDB
import com.sockenklaus.batterytracker.room.entities.Battery import com.sockenklaus.batterytracker.room.entities.Battery
import com.sockenklaus.batterytracker.room.entities.Charge import com.sockenklaus.batterytracker.room.entities.Charge
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
class BatteryDetailsViewModel( class BatteryDetailsViewModel(
application: Application, application: Application,
@@ -17,15 +18,15 @@ class BatteryDetailsViewModel(
private val db = BatteryTrackerDB.getInstance(application) private val db = BatteryTrackerDB.getInstance(application)
val battery: LiveData<Battery> = if(state.get<Int?>("batteryId") !== null) { val battery: Flow<Battery> = if(state.get<Int?>("batteryId") !== null) {
db.batteryDao().getBatteryById(state["batteryId"]!!).asLiveData() db.batteryDao().getBatteryById(state["batteryId"]!!)
} else { } else {
MutableLiveData() MutableStateFlow(Battery(name=""))
} }
val charges: LiveData<List<Charge>> = if(state.get<Int?>("batteryId") !== null){ val charges: Flow<List<Charge>> = if(state.get<Int?>("batteryId") !== null){
db.chargeDao().getChargesByBatteryId(state["batteryId"]!!).asLiveData() db.chargeDao().getChargesByBatteryId(state["batteryId"]!!)
} else { } else {
MutableLiveData() MutableStateFlow(emptyList())
} }
} }