微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 ViewModel 成功地将我的 LiveData 从我的存储库传递到我的 Compose UI?

如何解决如何使用 ViewModel 成功地将我的 LiveData 从我的存储库传递到我的 Compose UI?

我正在尝试将直播事件从广播接收器传递到我的主页的标题。 我成功地将一个字符串从广播接收器传递到我的存储库,但最终我的标题始终为空。我错过了什么? 我的存储库如下所示:

showDialog(
        context: context,builder: (context) {
          return AlertDialog(
              content: Column(
                mainAxisSize: MainAxisSize.min,children: [
                  TextField(
                    controller: categoryNameController,keyboardType: TextInputType.text,maxLines: 1,decoration: Inputdecoration(
                        labelText: 'Category Name',hintMaxLines: 1,border: OutlineInputBorder(
                            borderSide:
                                BorderSide(color: Colors.green,width: 4.0))),),SizedBox(
                    height: 30.0,RaisedButton(
                    onpressed: () {
                      if (categoryNameController.text.isNotEmpty) {
                        var expenseCategory = ExpenseCategory(
                            categoryNameController.text,id: _addExpenseController.expenseCategories.length);
                        _expenseController.addExpenseCategory(expenseCategory);
                        _addExpenseController.expenseCategories
                            .add(expenseCategory);
                        Get.back();
                      }
                    },child: Text(
                      'ADD CATEGORY',style: TextStyle(color: Colors.white,fontSize: 16.0),color: Colors.redAccent,)
                ],elevation: 12.0,shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(10.0)));
        });

然后在我的 viewmodel 中:

object Repository {
    fun getAndSendData (query: String): String{
        return query
    }
}

最后在我的 Composable 中:

private val _data = mutablelivedata<String>()
val repoData = _data.switchMap {
    liveData {
        emit(Repository.getAndSendData(it))
    }
}

解决方法

我认为我们不能使用 compose(jetpack) 中的实时数据,因为它可以从主线程运行。我将 onCommit() {} 与 compose 的接口一起使用。

onCommit() {
           viewModel.testCountriesList(object : NetworkCallBack {
                override fun test(response: GeneralResponse) {
                    if(response.code == 200) {
                        counties = response.response
                        responseState.value = true
                    } else {
                        responseState.value = false
                    }
                }
            })
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。