From 0912962f0e78a31fe24b955949543b75678d651c Mon Sep 17 00:00:00 2001 From: HuanCheng65 <22636177+HuanCheng65@users.noreply.github.com> Date: Fri, 10 Mar 2023 14:39:20 +0800 Subject: [PATCH] =?UTF-8?q?pref:=20=E4=BC=98=E5=8C=96=20DataStore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/huanchengfly/tieba/post/DataStore.kt | 45 +++++++++++-------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt index 74358169..99410629 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/DataStore.kt @@ -22,31 +22,38 @@ object DataStoreConst { const val DATA_STORE_NAME = "app_preferences" } -val Context.dataStore: DataStore by preferencesDataStore( - name = DataStoreConst.DATA_STORE_NAME, - produceMigrations = { context -> - listOf( - SharedPreferencesMigration(context, "settings"), - object : DataMigration { - override suspend fun cleanUp() {} +private val dataStoreInstance by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { + preferencesDataStore( + name = DataStoreConst.DATA_STORE_NAME, + produceMigrations = { context -> + listOf( + SharedPreferencesMigration(context, "settings"), + object : DataMigration { + override suspend fun cleanUp() {} - override suspend fun migrate(currentData: Preferences): Preferences { - return currentData.toMutablePreferences().apply { - set(stringPreferencesKey("dark_theme"), "grey_dark") - }.toPreferences() - } + override suspend fun migrate(currentData: Preferences): Preferences { + return currentData.toMutablePreferences().apply { + set(stringPreferencesKey("dark_theme"), "grey_dark") + }.toPreferences() + } - override suspend fun shouldMigrate(currentData: Preferences): Boolean { - return currentData[stringPreferencesKey("dark_theme")] == "dark" + override suspend fun shouldMigrate(currentData: Preferences): Boolean { + return currentData[stringPreferencesKey("dark_theme")] == "dark" + } } - } - ) - } -) + ) + } + ) +} + +val Context.dataStore: DataStore by dataStoreInstance @SuppressLint("FlowOperatorInvokedInComposition") @Composable -fun DataStore.collectPreferenceAsState(key: Preferences.Key, defaultValue: T): State { +fun DataStore.collectPreferenceAsState( + key: Preferences.Key, + defaultValue: T +): State { return data.map { it[key] ?: defaultValue }.collectAsState(initial = defaultValue) }