AppState Android Jetpack 的一部分。
Jetpack AppState 是一組程式庫,可協助您將 Jetpack Compose State 擴充至 UI 層以外,以便在應用程式的任何層轉換及共用反應式狀態。AppState 包含兩個主要程式庫:
- Transform:以 Compose 執行階段為基礎建構的程式庫,可執行不含 UI 的
@Composable區塊,將狀態來源合併並轉換為 ComposeState。 - StateStore:類型安全的容器,可將共用的應用程式狀態儲存並公開為 Compose
State。最常用於在多個應用程式元件之間共用狀態。
如要瞭解 Compose State 如何在 UI 可組合函式之外運作,以及 Transform 和 StateStore 如何與現有的 Compose API (例如 mutableStateOf 和 SavedStateHandle.saveable) 搭配使用,請參閱「在 UI 之外使用 Compose 狀態」。
構件
如要開始使用 AppState,請新增專案所需的構件和任何支援程式庫:
| 名稱 | 用途 | 構件 |
|---|---|---|
| 轉換作業 | 在 UI (transform 和 listener) 外部產生及觀察 Compose State。 |
androidx.appstate.transform:transform |
| 轉換測試 | 轉換 (transformTest 和 TransformTestScope) 的測試公用程式。 |
androidx.appstate.transform:transform-testing |
| StateStore | 核心類型安全狀態容器和 StateStoreKey 定義。 |
androidx.appstate.statestore:statestore |
| StateStore DataStore 整合 | 使用 Jetpack DataStore 將 StateStore 鍵保留及還原至磁碟。 |
androidx.appstate.statestore:statestore-datastore |
| Compose Compiler 外掛程式 | 在採用 transform 或 listener 的模組中,編譯 @Composable 函式和區塊。 |
org.jetbrains.kotlin.plugin.compose |
| KotlinX Serialization 外掛程式 | 使用 statestore-datastore 時,為 @Serializable StateStoreKey 和自訂狀態類型產生序列化器。 |
org.jetbrains.kotlin.plugin.serialization |
| KotlinX Serialization 程式庫 | 使用 statestore-datastore 時,@Serializable StateStoreKey 和自訂狀態類型的執行階段序列化程式庫。 |
org.jetbrains.kotlinx:kotlinx-serialization-core |
專案設定
如要將 AppState 程式庫新增至專案,請在 libs.versions.toml 檔案中宣告版本、程式庫和 Gradle 外掛程式:
[versions]
appstate = "1.0.0-alpha01"
kotlin = "2.4.10"
kotlinxSerializationCore = "1.11.0"
[libraries]
# Transform library for producing and observing Compose State
androidx-appstate-transform = { module = "androidx.appstate.transform:transform", version.ref = "appstate" }
# Testing utilities for Transform
androidx-appstate-transform-testing = { module = "androidx.appstate.transform:transform-testing", version.ref = "appstate" }
# Core StateStore library
androidx-appstate-statestore = { module = "androidx.appstate.statestore:statestore", version.ref = "appstate" }
# DataStore integration for StateStore (and required serialization runtime)
androidx-appstate-statestore-datastore = { module = "androidx.appstate.statestore:statestore-datastore", version.ref = "appstate" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerializationCore" }
[plugins]
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
# Required only when using statestore-datastore
jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
接著,設定模組的 build.gradle.kts 檔案:
plugins {
...
alias(libs.plugins.compose.compiler)
// Required only when using statestore-datastore
alias(libs.plugins.jetbrains.kotlin.serialization)
}
android {
...
buildFeatures {
compose = true
}
}
dependencies {
...
implementation(libs.androidx.appstate.transform)
implementation(libs.androidx.appstate.statestore)
// Optional: DataStore integration for StateStore
implementation(libs.androidx.appstate.statestore.datastore)
implementation(libs.kotlinx.serialization.core)
...
testImplementation(libs.androidx.appstate.transform.testing)
}
程式碼範例
AppState 方案存放區包含實際運作範例,示範如何在常見的 Android 架構模式和板型規格中使用 Transform 和 StateStore。
提供意見
如要提供意見、回報錯誤或要求功能,請使用 Transform Issue Tracker 或 StateStore Issue Tracker。