簡體   English   中英

Jetpack Compose - 更改 Compsable 中的變量

[英]Jetpack Compose - change variables inside Compsable

我想知道如何通過方法更改 Composable 內部的變量。 當然我可以做類似的事情:

 var test: String by remember { mutableStateOf("hello") }

並且可以像我想要的那樣改變它,就像(雖然這是一個愚蠢的例子)

          [stuff...].pointerInput(Unit) {
                detectDragGestures(...)
                { change, dragAmount ->
                    test=dragamount.toString()
                }
            }

但是我將如何用一些復雜的方法來改變變量,例如

  [stuff...].pointerInput(Unit) {
            detectDragGestures(...)
            { change, dragAmount ->
                changeText(dragAmount)
            }
        }

我只能使用可組合之外的方法將其分配給值,也就是

test=getMyNewTest(dragAmount)

但是我怎樣才能在可組合物中更改我的“字段”,以便我可以直接在我的方法中修改“測試”?

如果該方法可以看到一個可變變量(即共享一個詞法范圍),它可以更改它。 為了changeText能夠更改test ,它必須在 scope 中有test或接收可變的test引用作為參數。 Compose 不會改變這一點。

在 compose 之外對這個問題的任何回答(例如 class 范圍、模塊范圍、全局范圍、閉包捕獲、引用傳遞等)也適用於 compose。

例如,您可以將 function 定義為可組合 function 的本地,如下:

@Composable
fun Example() {
  var test by remember { mutableStateOf("hello") }

  fun changeText(amount: Float) {
     test = amount.toString()
  }
   ...
  
  [stuff...].pointerInput(Unit) {
            detectDragGestures(...)
            { change, dragAmount ->
                changeText(dragAmount)
            }
        }
   ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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