android 如何在Jetpack Compose中使用Datastore读取和保存Switch数据?

2g32fytz  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(258)

如何在Jetpack Compose中使用Datastore读取和保存Switch数据?我需要存储在数据存储和加载状态时,应用程序被关闭,并由用户再次打开当前状态。

  1. class DataStoreUtil(private val context: Context) {
  2. companion object {
  3. private val Context.dataStore: DataStore<Preferences> by preferencesDataStore("settings")
  4. val FORCE_DARK_THEME = booleanPreferencesKey("force_dark_theme")
  5. }
  6. val getForceDarkTheme: Flow<Boolean> = context.dataStore.data
  7. .map { preferences ->
  8. preferences[FORCE_DARK_THEME] ?: true
  9. }
  10. suspend fun saveForceDarkTheme(value: Boolean) {
  11. context.dataStore.edit { preferences ->
  12. preferences[FORCE_DARK_THEME] = value
  13. }
  14. }
  15. }
  16. @Composable
  17. fun MySwitch() {
  18. val checkedState = remember { mutableStateOf(false) }
  19. Switch(
  20. checked = checkedState.value,
  21. onCheckedChange = { checkedState.value = it }
  22. )
  23. Text(
  24. text = if(checkedState.value) "foo" else "bar",
  25. )
  26. }
fykwrbwg

fykwrbwg1#

  1. class DataStoreUtil(private val context: Context) {
  2. companion object {
  3. private val Context.dataStore: DataStore<Preferences> by preferencesDataStore("settings")
  4. val FORCE_DARK_THEME = booleanPreferencesKey("force_dark_theme")
  5. }
  6. val getForceDarkTheme: Flow<Boolean> = context.dataStore.data
  7. .map { preferences ->
  8. preferences[FORCE_DARK_THEME] ?: true
  9. }
  10. suspend fun saveForceDarkTheme(value: Boolean) {
  11. context.dataStore.edit { preferences ->
  12. preferences[FORCE_DARK_THEME] = value
  13. }
  14. }
  15. }
  16. @Composable
  17. fun MySwitch() {
  18. val scope = rememberCoroutineScope()
  19. //creating an object of your datastore
  20. val dataStore = DataStoreUtil(LocalContext.current)
  21. //retrieving the boolean value from the data store as a state
  22. val switchState by dataStore.getForceDarkTheme.collectAsState()
  23. Switch(
  24. checked = switchState,
  25. onCheckedChange = {
  26. scope.launch{
  27. dataStore.saveForceDarkTheme(it)
  28. }
  29. }
  30. )
  31. Text(
  32. text = if(checkedState.value) "foo" else "bar",
  33. )
  34. }

要将collectAsState与Flow值一起使用,必须在build.gradle文件中添加此依赖项

  1. implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.0-beta01")
展开查看全部

相关问题