我有一个问题,我一个人走不动.
在我的view Model中,有两个合并为一个流的StateFlow.
就像val mergedState = merge(state1, state2)
个.
现在,当我更新state1时,mergedState的值也更改为state1的值.
但是,当我try 更新state2时,mergedState的值不会改变.
为了更好地演示,我编写了一个简单的示例:
这是一个视图模型
class FlowViewModel : ViewModel() {
private val state1 = MutableStateFlow(0)
private val state2 = MutableStateFlow(0)
val mergedState = merge(state1, state2)
fun updateState1(value: Int) {
state1.value = value
}
fun updateState2(value: Int) {
state2.value = value
}
}
下面是测试它的代码
class ExampleUnitTest {
private lateinit var flowViewModel: FlowViewModel
@Before
fun setUp() {
Dispatchers.setMain(UnconfinedTestDispatcher())
flowViewModel = FlowViewModel()
}
@After
fun tearDown() {
Dispatchers.resetMain()
}
@Test
fun `test merged flow`() = runTest {
assertThat(flowViewModel.mergedState.first()).isEqualTo(0)
flowViewModel.updateState1(1)
assertThat(flowViewModel.mergedState.first()).isEqualTo(1) //works as expected
flowViewModel.updateState2(2)
assertThat(flowViewModel.mergedState.first()).isEqualTo(2) //the value is still 1
}
}
我也不管我先更新哪个州. 看起来只有更新了state1才会更新mergedState.
我很确定我在这里忽略了一些东西.