gson 如何在api中的每个请求上显示加载图标

zphenhs4  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(159)

如何在API中的每个请求上显示加载图标?在第一个请求上,它显示进度图标,但在第二个请求上,它就像缓存了一样,没有显示加载。
我的视图模型:

class CadastroViewModel:ViewModel() {
    private val cadastroRepository= CadastroRepository()

    private val _resultado: MutableStateFlow<MessageCad> = MutableStateFlow(MessageCad())
    val resultado: StateFlow<MessageCad>
        get() = _resultado

    fun create(nome: String,email: String,cpf:String,telefone:String,
               celular:String,senha:String,endereco:String,bairro:String,numero:String,
               complemento:String,cidade:String
    ){
        viewModelScope.launch {
            try {

               val r = cadastroRepository.createUser(nome,email,cpf,telefone,celular,senha,endereco,bairro,
                        numero,complemento,cidade)
                _resultado.value = r

            } catch (e:Exception) {
                Log.d("Service error",e.toString())
            }
        }
    }
}

我的视图模型调用:

val value: MessageCad by model.resultado.collectAsState(initial = MessageCad())

if(value.message.isEmpty()){
    CircularProgressIndicator(modifier = Modifier.wrapContentWidth(Alignment.CenterHorizontally))
}
ulmd4ohb

ulmd4ohb1#

这个问题看起来像是value.message.isEmpty()在第一次调用后从不返回true,因为model.resultado总是有一个非空的结果。
您应该创建一个装入标志

private val _loading = MutableStateFlow(Boolean)
val loading: StateFlow<Boolean>
        get() = _loading

将其设置为

viewModelScope.launch {
            try {
               _loading.value = true
               val r =  cadastroRepository.createUser(nome,email,cpf,telefone,celular,senha,endereco,bairro,
                        numero,complemento,cidade)
                _resultado.value = r

            }catch (e:Exception){
                Log.d("Service error",e.toString())
            }finally {
              _loading.value = false
            }

        }

或者使用ViewState方法来使Loading、Success或Error状态显示为api调用的任何可能状态。

相关问题