簡體   English   中英

如何將參數從 Jetpack Compose 傳遞到我的刀柄視圖模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM