pref: 优化 DataStore
This commit is contained in:
parent
a311f75327
commit
0912962f0e
|
|
@ -22,31 +22,38 @@ object DataStoreConst {
|
|||
const val DATA_STORE_NAME = "app_preferences"
|
||||
}
|
||||
|
||||
val Context.dataStore: DataStore<Preferences> by preferencesDataStore(
|
||||
name = DataStoreConst.DATA_STORE_NAME,
|
||||
produceMigrations = { context ->
|
||||
listOf(
|
||||
SharedPreferencesMigration(context, "settings"),
|
||||
object : DataMigration<Preferences> {
|
||||
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<Preferences> {
|
||||
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<Preferences> by dataStoreInstance
|
||||
|
||||
@SuppressLint("FlowOperatorInvokedInComposition")
|
||||
@Composable
|
||||
fun <T> DataStore<Preferences>.collectPreferenceAsState(key: Preferences.Key<T>, defaultValue: T): State<T> {
|
||||
fun <T> DataStore<Preferences>.collectPreferenceAsState(
|
||||
key: Preferences.Key<T>,
|
||||
defaultValue: T
|
||||
): State<T> {
|
||||
return data.map { it[key] ?: defaultValue }.collectAsState(initial = defaultValue)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue