AppState   Android Jetpack 的一部分。

Jetpack AppState 是一組程式庫,可協助您將 Jetpack Compose State 擴充至 UI 層以外,以便在應用程式的任何層轉換及共用反應式狀態。AppState 包含兩個主要程式庫:

  • Transform:以 Compose 執行階段為基礎建構的程式庫,可執行不含 UI 的 @Composable 區塊,將狀態來源合併並轉換為 Compose State。
  • 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。