iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

State and Jetpack Compose I

今天開始來學習 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 的可組合功能。

在可組合項中的可變狀態對象的聲明方法有:

  • val mutableState = 記住 { mutableStateOf(default) }
  • var 值記住 { mutableStateOf(default) }
  • val (value, setValue) = 記住 { mutableStateOf(default) }
    選擇的聲明應該是在什麼情況下可以選擇的選項,以糖的形式為您提供不同的狀態。選擇的聲明應該在可組合中生成最高性的。

按規定語法需要導入以下內容:

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 的函數:

  • LiveData
  • Flow
  • RxJava2

如果您的應用程序使用自定義可觀察類,您可以構建擴展函數,以使 Jetpack Compose 可以讀取其他類型。如需查看具體方法的操作示例,請查看觀察組合函數的實現。任何允許 Jetpack Compose 訂閱每個項更改的對像都可以轉換為 State 並由可組合項讀取。


上一篇
[Day9] Thinking in Compose (三)
下一篇
[Day11] Compose 的狀態管理 (二)
系列文
30天 Android Jetpack Compose 奇幻旅程13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言