Обновление MutableStateFlow> Сохранение ссылок StateFlow в объектеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Обновление MutableStateFlow> Сохранение ссылок StateFlow в объекте

Сообщение Anonymous »

Я работаю с StateFlow Kotlin для управления списком объектов User, который содержит ссылку StateFlow на экземпляр объектов UserDetail.

Эти два класса должны по какой-то причине быть отделены.

Код: Выделить всё

data class User(val id: String, val name: String /* ...*/) { lateinit var userFlow: StateFlow }
data class UserDetail (val id: String, var value: String /* ...*/)
Экземпляры UserDetail управляются в репозитории с помощью MutableMap.

Эти экземпляры динамически изменяются и должны быть отражены в объектах User.

В то же время изменения в экземплярах User также должны обнаруживаться с помощью List.

Поэтому я написал код, как показано ниже.

Код: Выделить всё

@Singleton
class UserRepository @Inject constructor() {
// key is User.id
private val _userDetails = mutableMapOf()

private fun createUserDetail() { /* ... */ }

private fun injectUserDetail(user: User) {
user.userFlow = _userDetails[user.id]
return user
}

private fun updateUserDetail(newValue: String) {
_userDetails.get[user.id]?.update { current -> current.copy(value=newValue) }
}
}

Код: Выделить всё

@HiltViewModel
class UserViewModel @Inject constructor(private val userRepository: UserRepository) : ViewModel() {
private val _userFlow = MutableStateFlow(emptyList())
val userFlow: StateFlow = _userFlow

fun newUserArrived(id:String, name: String) {
val user = User(id, name)
_userFlow.update { currentList -> /* I want to add (userRepository.injectUserDetail(user)) */ }
}
}
Я думаю, проблема именно в этой части.

Код: Выделить всё

_userFlow.update { /* ... */ }
Поскольку для обновления MutableStateFlow требуется создание нового списка, я считаю, что ссылки на MutableMap здесь теряются.

Скажите, пожалуйста, есть ли способ решить эту проблему?
Спасибо.


Подробнее здесь: https://stackoverflow.com/questions/793 ... ateflow-in
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»