[英]How to pass parameter to my hilt viewmodel from jetpack compose
我有一個帶有 viewmodel 的可組合項,我想將一個 id 從可組合項傳遞到 viewmodel。
我的可組合項是:
@Composable
fun HttpRequestScreen(
viewModel: HttpRequestViewModel = hiltViewModel(),
id: String = EMPTYUUID,
onClick: (String, String, Int) -> Unit // respond, request Function: 1 - send request, 2 - edit request
) {
我有來自不同屏幕的 ID,我想將它傳遞到我的 Hilt 視圖模型。
您需要考慮單向數據流模式,其中事件向上流動,state 向下流動。 為此,您需要從視圖模型中公開某種 state,該視圖模型將請求的 state 作為可觀察的 state 發送給 Composable。
您的視圖模型可能看起來像這樣。
class HttpRequestViewModel: ViewModel() {
private val _httpResponse = mutableStateOf("")
val httpResponse: State<String> = _httpResponse
fun onHttpRequest(requestUrl: String) {
//Execute your logic
val result = "result of your execution"
_httpResponse.value = result
}
}
然后在您的 Composable 中,您可以通過單擊按鈕上的 ViewModel function 來發送事件,如下所示
@Composable fun HttpRequestScreen(viewModel: HttpRequestViewModel) { val state by viewModel.httpResponse var userInput = remember { TextFieldValue("") }
Column {
Text(text = "Http Response = $state")
}
BasicTextField(value = userInput, onValueChange = {
userInput = it
})
Button(onClick = { viewModel.onHttpRequest(userInput.text) }) {
Text(text = "Make Request")
}
}
我希望這能為您指明正確的方向。 祝你好運。
假設您已遵循撰寫導航的文檔,您可以在此處找到您的參數:
@HiltViewModel
class RouteDetailsViewModel @Inject constructor(
private val getRouteByIdUC: GetRouteByIdUC,
private val savedStateHandle: SavedStateHandle
): ViewModel() {
private val routeId = savedStateHandle.get<String>("your-param-name") // for example String in my case
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.