今天開始來學習 compose 的狀態管理。
應用中的狀態是可以隨時間變化的任何值。
所有 Android 應用向用戶顯示狀態。下面是 Android 應用中的一些狀態示例:
在建立網絡連接時無法顯示的信息提示控件。
博文和相關評論。
在用戶點擊按鈕時播放的漣漪效果。
用戶可以在圖片上畫出的禮物。
Jetpack Compose 可以幫助您確定本狀態在 Android 應用程序中的存儲位置和使用方式。
撰寫這些是狀態式工具集,因此它的唯一方法是通過新的調用相同的可組合項。是界面表達的形式參數。參數不會隨時更新,組織重組。基於 XML 的命令式視圖中那樣自動更新。可組合項,必須明確地獲知新狀態,必須有條件地進行更新。
@Composable
fun HelloContent() {
Column(modifier = Modifier.padding(16.dp)) {
Text(
text = "Hello!",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
OutlinedTextField(
value = "",
onValueChange = { },
label = { Text("Name") }
)
}
}
如果運行此代碼,您將不會看到任何響應。這是因為,TextField 的值不會自行更新,但會在其時更新。這是因為 Compose 中組合和組合的工作原理造成的。
可組合函數可以記住 API 將對象存儲在內存中。系統會在最初的組合期間由記住計算值存儲在組合中,並在重組期間返回的值。記住既可用於存儲對象,又可用於存儲不對象。
mutableStateOf 會創建可觀察的 MutableState,更多類型與 Compose 運行時集成是可觀察的。
interface MutableState<T> : State<T> {
override var value: T
}
value 如果發生任何變化,系統會安排組織讀取 value 的可組合功能。
在可組合項中的可變狀態對象的聲明方法有:
按規定語法需要導入以下內容:
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
您可以將保留的價值使用其他可組合項的參數顯示,甚至可以更改語句中的來空的可組合項。中的狀態:
@Composable
fun HelloContent() {
Column(modifier = Modifier.padding(16.dp)) {
var name by remember { mutableStateOf("") }
if (name.isNotEmpty()) {
Text(
text = "Hello, $name!",
modifier = Modifier.padding(bottom = 8.dp),
style = MaterialTheme.typography.h5
)
}
OutlinedTextField(
value = name,
onValueChange = { name = it },
label = { Text("Name") }
)
}
}
雖然記得可幫助您在重組後保持狀態,但不會幫助您在配置更改後保持狀態。為此,您必須自動保存使用 rememberSaveable。rememberSaveable 會自動保存可保存在 Bundle 中的任何其他值,可以將其自己的救星對象。
Jetpack Compose 並不要求您使用 MutableState 存儲狀態。Jetpack Compose 支持其他可觀察類型。在 Jetpack Compose 中讀取其他可觀察類型之前,您必須將其轉換為 State,以便 Jetpack Compose 可以在發生變化時自動重組狀態界面。
Compose 創建一些可以根據 Android 應用程序中的常見可觀察類型 State 的函數:
如果您的應用程序使用自定義可觀察類,您可以構建擴展函數,以使 Jetpack Compose 可以讀取其他類型。如需查看具體方法的操作示例,請查看觀察組合函數的實現。任何允許 Jetpack Compose 訂閱每個項更改的對像都可以轉換為 State 並由可組合項讀取。