AppState เป็นส่วนหนึ่งของ Android Jetpack
Jetpack AppState เป็นกลุ่มไลบรารีที่ช่วยคุณขยาย Jetpack Compose State นอกเหนือจากเลเยอร์ UI เพื่อให้คุณเปลี่ยนรูปแบบและแชร์สถานะเชิงรับในเลเยอร์ต่างๆ ของแอปได้ AppState ประกอบด้วยไลบรารีหลัก 2 รายการ ได้แก่
- Transform: ไลบรารีที่สร้างขึ้นในรันไทม์ Compose ซึ่งเรียกใช้บล็อก
@Composableโดยไม่มี UI เพื่อรวมและเปลี่ยนแหล่งที่มาของสถานะเป็น ComposeState - 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