Update Realm Object in Jetpack Compose Kotlin

31 views Asked by At

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)
            )
0

There are 0 answers