I want to update my User object in Realm with the Allergens class data. This is my current code:
My User Realm Class
class User: RealmObject {
@PrimaryKey var _id: ObjectId = ObjectId()
var username: String = ""
var password: String = ""
var allergens: Allergens? = null }
My copy for screen change of the user class:
data class CurrentUser(
var id: String = "",
var username: String = "",
var password: String = "",
var allergens: Allergens? = null
)
My Allergens Class
class Allergens: EmbeddedRealmObject {
var moluscs: Boolean = false
var eggs: Boolean = false
var fish: Boolean = false
var lupin: Boolean = false
var soya: Boolean = false
var milk: Boolean = false
var peanuts: Boolean = false
var gluten: Boolean = false
var crustaceans: Boolean = false
var mustard: Boolean = false
var nuts: Boolean = false
var sesame: Boolean = false
var celery: Boolean = false
var sulphites: Boolean = false
}
My function to update the object searching by the username
override suspend fun updateDataAllergens(username: String, user: CurrentUser): Resource<Boolean>
=try{
realm.write {
var liveUser = query<User>("username == $username").find().first()
liveUser = User().apply {
this.allergens = user.allergens
copyToRealm(liveUser,UpdatePolicy.ALL)
}
Resource.Succes(true)
}
}catch (ex: Exception){
Resource.Failure(ex)
}
This is my viewModel:
private val _getUser = MutableStateFlow<CurrentUser>(CurrentUser())
val getUser: MutableStateFlow<CurrentUser> = _getUser
fun updateDataAllergens(username: String, user: CurrentUser)
=viewModelScope.launch{
repository.updateDataAllergens(username,user)
}
This is where I call the function in a button. The values for allergens are all booleans:
HealthAppButton(text = "Save Changes",
onButClick = {
val name = createUserViewModel.getUser.value.username
val newUser = CurrentUser(
id = createUserViewModel.getUser.value.id,
username = createUserViewModel.getUser.value.username,
password = createUserViewModel.getUser.value.password,
allergens = Allergens().apply {
moluscs=selectedOptionMoluscs
eggs=selectedOptionEggs
fish=selectedOptionFish
lupin=selectedOptionLupin
soya=selectedOptionSoya
milk=selectedOptionMilk
peanuts=selectedOptionPeanuts
gluten=selectedOptionGluten
crustaceans=selectedOptionCrustaceans
mustard=selectedOptionMustard
nuts=selectedOptionNuts
sesame=selectedOptionSesame
celery=selectedOptionCelery
sulphites=selectedOptionSulphites
}
)
createUserViewModel.updateDataAllergens(name,newUser)
navController.navigate("ProfileScreen")
},
color = Color(0xFF464646)
)