我的应用程序中有一个 UserStateModel(数据类)类型的 StateFlow。
private val _userStateFlow: MutableStateFlow<UserStateModel?> = MutableStateFlow(UserStateModel())
val userStateFlow: StateFlow<UserStateModel?> = _userStateFlow
这是用户状态模型
data class UserStateModel(
val uid: String? = null,
val username: String? = null,
val profileImageUrl: String? = null,
var isLoggedIn: Boolean = false,
val isPremiumUser: Boolean = false,
val posts: List<Post>? = listOf()
)
当我使用新的用户名更新 StateFlow 时,它会将更改发送给收集器并更新 UI。
但是当我更改帖子内的属性时:列表?列表它不会发出更改。
当我更改列表的大小时,它会更改,而当我更改索引 0 处的帖子的 name 属性时,它不会更改。
如何检测 Data 类的子属性的更改?
现在我使用一个丑陋的解决方法,我补充道
val updateErrorWorkaround: Int = 0
到 UserStateModel 数据类并将其加一以便收集器收到通知
P.s 我正在使用 MVVM + Clean Architecture 和 Jetpack Compose
EDIT这是我的帖子模型:
data class Post(
val id: Int,
val name: String,
val tags: MutableList<Tag>? = null
)
以下是我更新 MutableList 的方法:
val posts = userStateFlow.value?.posts
posts.get(index).tags?.add(myNewTag)
_userStateFlow.value = userStateFlow.value?.copy(posts = posts)
这些更改不会发送给收集器