AppState   เป็นส่วนหนึ่งของ Android Jetpack

Jetpack AppState เป็นกลุ่มไลบรารีที่ช่วยคุณขยาย Jetpack Compose State นอกเหนือจากเลเยอร์ UI เพื่อให้คุณเปลี่ยนรูปแบบและแชร์สถานะเชิงรับในเลเยอร์ต่างๆ ของแอปได้ AppState ประกอบด้วยไลบรารีหลัก 2 รายการ ได้แก่

  • Transform: ไลบรารีที่สร้างขึ้นในรันไทม์ Compose ซึ่งเรียกใช้บล็อก @Composable โดยไม่มี UI เพื่อรวมและเปลี่ยนแหล่งที่มาของสถานะเป็น Compose State
  • StateStore: คอนเทนเนอร์ที่ปลอดภัยในการกำหนดประเภทซึ่งจัดเก็บและแสดงสถานะแอปที่แชร์เป็น Compose State โดยส่วนใหญ่จะใช้เพื่อแชร์สถานะในคอมโพเนนต์ของแอปพลิเคชันหลายรายการ

หากต้องการดูวิธีการทำงานของ Compose State นอก UI Composable และวิธีที่ Transform และ StateStore ทำงานร่วมกับ Compose API ที่มีอยู่ เช่น mutableStateOf และ SavedStateHandle.saveable ในสถาปัตยกรรมของคุณ โปรดดูหัวข้อใช้สถานะ Compose นอก UI

อาร์ติแฟกต์

หากต้องการเริ่มต้นใช้งาน AppState ให้เพิ่มอาร์ติแฟกต์ที่โปรเจ็กต์ต้องการพร้อมกับไลบรารีที่รองรับ ดังนี้

ชื่อ การทำงาน อาร์ติแฟกต์
เปลี่ยนรูปแบบ สร้างและสังเกต Compose State นอก UI (transform และ listener) androidx.appstate.transform:transform
การทดสอบการเปลี่ยนรูปแบบ ยูทิลิตีการทดสอบสำหรับ Transform (transformTest และ TransformTestScope) androidx.appstate.transform:transform-testing
StateStore คอนเทนเนอร์สถานะที่ปลอดภัยในการกำหนดประเภทหลักและคำจำกัดความ StateStoreKey รายการ androidx.appstate.statestore:statestore
การผสานรวม StateStore DataStore คงอยู่และกู้คืนคีย์ StateStore ไปยังดิสก์โดยใช้ Jetpack DataStore androidx.appstate.statestore:statestore-datastore
ปลั๊กอิน Compose Compiler คอมไพล์ฟังก์ชันและบล็อก @Composable ในโมดูลที่ใช้ transform หรือ listener org.jetbrains.kotlin.plugin.compose
ปลั๊กอิน KotlinX Serialization สร้าง Serializer สำหรับ @Serializable StateStoreKey และประเภทสถานะที่กำหนดเองเมื่อใช้ statestore-datastore org.jetbrains.kotlin.plugin.serialization
ไลบรารีการเรียงอันดับ KotlinX ไลบรารีการจัดลำดับรันไทม์สำหรับ @Serializable StateStoreKey และประเภทสถานะที่กำหนดเองเมื่อใช้ statestore-datastore org.jetbrains.kotlinx:kotlinx-serialization-core

การตั้งค่าโปรเจ็กต์

หากต้องการเพิ่มไลบรารี AppState ลงในโปรเจ็กต์ ให้ประกาศเวอร์ชัน ไลบรารี และปลั๊กอิน Gradle ในไฟล์ libs.versions.toml ดังนี้

[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 มีตัวอย่างการทำงานที่แสดงวิธีใช้ Transform และ StateStore ในรูปแบบสถาปัตยกรรมและรูปแบบของอุปกรณ์ Android ทั่วไป

แสดงความคิดเห็น

แชร์ความคิดเห็น รายงานข้อบกพร่อง หรือขอฟีเจอร์โดยใช้Issue Tracker ของ Transform หรือIssue Tracker ของ StateStore