compose datastore 代码示例
时间: 2024-01-24 19:15:44 浏览: 45
Compose DataStore 是一种用于存储和读取键值对数据的 Jetpack Compose 组件。下面是一个使用 Compose DataStore 的代码示例:
```kotlin
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.createDataStore
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
data class UserSettings(val darkMode: Boolean)
class UserSettingsViewModel(private val dataStore: DataStore<Preferences>) {
private val userSettingsKey = preferencesKey<Boolean>("dark_mode")
val userSettingsFlow = dataStore.data
.map { preferences ->
UserSettings(
darkMode = preferences[userSettingsKey] ?: false
)
}
suspend fun updateUserSettings(userSettings: UserSettings) {
dataStore.edit { preferences ->
preferences[userSettingsKey] = userSettings.darkMode
}
}
}
@Composable
fun UserSettingsScreen(userSettingsViewModel: UserSettingsViewModel = viewModel()) {
val userSettings by userSettingsViewModel.userSettingsFlow.collectAsState(UserSettings(false))
val context = LocalContext.current
val darkMode by rememberSaveable { mutableStateOf(userSettings.darkMode) }
LaunchedEffect(Unit) {
userSettingsViewModel.userSettingsFlow.collect { settings ->
darkMode = settings.darkMode
}
}
Column {
Switch(
checked = darkMode,
onCheckedChange = { newDarkMode ->
lifecycleScope.launch {
userSettingsViewModel.updateUserSettings(UserSettings(newDarkMode))
}
}
)
}
}
@Composable
fun App() {
val dataStore = createDataStore(name = "user_settings")
val userSettingsViewModel = remember { UserSettingsViewModel(dataStore) }
UserSettingsScreen(userSettingsViewModel)
}
```
这个示例演示了如何使用 Compose DataStore 来存储和读取用户设置中的暗黑模式。通过 `UserSettingsViewModel` 类,我们可以获取和更新用户设置,并通过 `UserSettingsScreen` 组件来展示和修改用户设置。在 `App` 组件中,我们创建了一个名为 "user_settings" 的 DataStore,并将其传递给 `UserSettingsViewModel`。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)