Android Jetpack DataStore存储数据
修改下之前的代办事项demo主题开关本来写的全局变量改成用DataStore持久化存储。先添加依赖创建PreferencesKeys文件保存键值package com.example.testcompose1.data import androidx.datastore.preferences.core.booleanPreferencesKey object PreferencesKeys { val DARK_MODE booleanPreferencesKey(dark_mode) }创建DataStore管理类package com.example.testcompose1.data import android.content.Context import androidx.datastore.core.DataStore import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.preferencesDataStore import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map // 创建一个名为 user_preferences 的偏好设置存储文件 private val Context.dataStore: DataStorePreferences by preferencesDataStore(name user_preferences) // DataStore 管理类 class PreferencesManager(context: Context) { private val dataStore context.dataStore val darkModeFlow: FlowBoolean dataStore.data .map { preferences - preferences[PreferencesKeys.DARK_MODE] ?: false } suspend fun setDarkMode(enabled: Boolean) { dataStore.edit { preferences - preferences[PreferencesKeys.DARK_MODE] enabled } } }创建SettingsViewModel管理主题package com.example.testcompose1 import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.testcompose1.data.PreferencesManager import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch class SettingsViewModel( private val preferencesManager: PreferencesManager ) : ViewModel() { // 把 DataStore 流Flow转换成 ViewModel 里的状态State . // stateIn把冷流 Flow 转成热流 State val isDarkTheme preferencesManager.darkModeFlow.stateIn( viewModelScope, SharingStarted.WhileSubscribed(5000), // UI 离开页面 5 秒后自动停止订阅节省资源 false ) fun toggleDarkMode() { // 切换主题 viewModelScope.launch { preferencesManager.setDarkMode(!(isDarkTheme.value ?: false)) } } }修改compose函数使用SettingsViewModel修改开关状态的取值从settingsViewModel中获取切换开关也是调用settingsViewModel中的切换函数原有的废代码去掉运行下先切换到深色杀进程重启应用ok. 还是深色模式状态记住了。