fix: dataStore逻辑
This commit is contained in:
@@ -4,6 +4,7 @@ import android.content.SharedPreferences
|
||||
import android.os.Build
|
||||
import io.legado.app.BuildConfig
|
||||
import io.legado.app.constant.PreferKey
|
||||
import io.legado.app.ui.config.themeConfig.ThemeConfig
|
||||
import io.legado.app.data.appDb
|
||||
import io.legado.app.data.repository.ReadPreferences
|
||||
import io.legado.app.ui.book.manga.config.MangaScrollMode
|
||||
@@ -50,7 +51,7 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
var mangaClickActionBC = appCtx.getPrefInt(PreferKey.mangaClickActionBC, 1)
|
||||
var mangaClickActionBR = appCtx.getPrefInt(PreferKey.mangaClickActionBR, 1)
|
||||
|
||||
var themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
|
||||
val themeMode get() = ThemeConfig.themeMode
|
||||
var AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
|
||||
|
||||
var swipeAnimation = appCtx.getPrefBoolean(PreferKey.swipeAnimation, true)
|
||||
@@ -205,10 +206,6 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
AppTheme = appCtx.getPrefString(PreferKey.appTheme, "0")
|
||||
}
|
||||
|
||||
PreferKey.themeMode -> {
|
||||
themeMode = appCtx.getPrefString(PreferKey.themeMode, "0")
|
||||
}
|
||||
|
||||
PreferKey.clickActionTL -> clickActionTL =
|
||||
appCtx.getPrefInt(PreferKey.clickActionTL, 2)
|
||||
|
||||
|
||||
@@ -2587,8 +2587,6 @@ class ReadBookViewModel(
|
||||
else -> "0" // dark → follow system
|
||||
}
|
||||
ThemeConfig.themeMode = nextMode
|
||||
// 同步更新 AppConfig 缓存,确保 View 层 ReadStyleResolver 立即读到新值
|
||||
AppConfig.themeMode = nextMode
|
||||
_uiState.update { it.copy(styleConfig = buildStyleConfig()) }
|
||||
_effects.tryEmit(ReadBookEffect.UpdateReadViewConfig(
|
||||
setOf(
|
||||
|
||||
@@ -125,14 +125,17 @@ fun <T> prefDelegate(
|
||||
is Long -> appCtx.putPrefLong(key, value)
|
||||
is Float -> appCtx.putPrefFloat(key, value)
|
||||
}
|
||||
// 同步写入 DataStore(权威存储),确保持久化后再返回
|
||||
runBlocking(Dispatchers.IO) {
|
||||
when (value) {
|
||||
is String? -> DsSync.putString(key, value)
|
||||
is Int -> DsSync.putInt(key, value)
|
||||
is Boolean -> DsSync.putBoolean(key, value)
|
||||
is Long -> DsSync.putLong(key, value)
|
||||
is Float -> DsSync.putFloat(key, value)
|
||||
// 同步写入 DataStore,确保持久化后再返回
|
||||
// 异常不阻断流程:SP 已写入,readFromDs() 会回退到 SP 读取
|
||||
runCatching {
|
||||
runBlocking(Dispatchers.IO) {
|
||||
when (value) {
|
||||
is String? -> DsSync.putString(key, value)
|
||||
is Int -> DsSync.putInt(key, value)
|
||||
is Boolean -> DsSync.putBoolean(key, value)
|
||||
is Long -> DsSync.putLong(key, value)
|
||||
is Float -> DsSync.putFloat(key, value)
|
||||
}
|
||||
}
|
||||
}
|
||||
onValueChange?.invoke(value)
|
||||
|
||||
Reference in New Issue
Block a user