Эти два класса должны по какой-то причине быть отделены.
Код: Выделить всё
data class User(val id: String, val name: String /* ...*/) { lateinit var userFlow: StateFlow }
data class UserDetail (val id: String, var value: String /* ...*/)
Эти экземпляры динамически изменяются и должны быть отражены в объектах 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 { /* ... */ }
Скажите, пожалуйста, есть ли способ решить эту проблему?
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ateflow-in
Мобильная версия