导包
implementation "androidx.datastore:datastore-preferences:1.0.0"
简单使用
object SpUtil {
val dataStore: DataStore<Preferences> = PreferenceDataStoreFactory.create {
File(App.instance.filesDir, "aaa.preferences_pb")
}
private inline fun <reified T> readValue(key: String): Flow<T>? {
val keys = getKey(key, T::class.java)
return dataStore.data.map { it[keys] } as Flow<T>?
}
private suspend inline fun <reified T> putValue(key: String, value: T) {
dataStore.edit {
val keys = getKey(key, T::class.java) as Preferences.Key<T>
it[keys] = value
}
}
private inline fun <reified T> getKey(key: String, clazz: Class<T>): Preferences.Key<*> {
return when (clazz) {
Int::class -> intPreferencesKey(key)
String::class -> stringPreferencesKey(key)
Double::class -> doublePreferencesKey(key)
Float::class -> floatPreferencesKey(key)
Boolean::class -> booleanPreferencesKey(key)
else -> stringPreferencesKey(key)
}
}
suspend fun getAccount(): String {
return readValue<String>("account")?.first() ?: ""
}
suspend fun login(account: String) {
putValue("account", account)
}
}