Android Jetpack Compose项目中isLoading的值是否会始终为true?
结论
uiState.isLoading -> {...}分支不会一直被触发,只会在页面初始化的极短时间内执行一次,很快就会切换到其他分支。
原因说明
produceState的执行逻辑
你传入的initialValue = DetailsUiState(isLoading = true)是状态的初始值,仅在produceState首次进入Composition时生效。produceState的尾随lambda是一个协程任务,会在初始值设置完成后自动执行,执行完成后会更新状态值。状态更新后
isLoading会自动变为false
查看DetailsUiState的定义可以看到,isLoading字段的默认值是false。而你在produceState的协程体里给value赋值的两种情况,都没有主动传入isLoading参数:
- 加载成功时:
DetailsUiState(cityDetailsResult.data)仅传入了cityDetails,isLoading使用默认值false - 加载失败时:
DetailsUiState(throwError = true)仅设置了throwError,isLoading同样使用默认值false
协程体执行完成后,uiState的isLoading属性就会永久变为false,且后续没有其他代码修改这个值,自然不会再触发loading分支。
内容的提问来源于stack exchange,提问作者HelloCW
相关产品推荐
相关产品推荐

