はじめに
今回はSharedPreferenceの代わりとなるpreferenceDataSoterの実装方法を紹介してきます
実装
// まずはデータストレージを作成
private const val PREFERENCES_NAME = "preference"
private val Context.dataStore by preferencesDataStore(PREFERENCES_NAME)
@Singleton
internal class DataStore @Inject constructor(
@ApplicationContext context: Context,
@ApplicationScope private val externalScope: CoroutineScope,
) {
private val dataStore = context.dataStore
private val dataFlow = dataStore.data
.catch { ex -> throw ex }
.map { preference ->
val data = preference[KEY] ?: return@map null
DataClass(data = data)
}
.stateIn(externalScope, SharingStarted.Eagerly, null)
fun getDataFlow(): Flow<DataClass?> = dataFlow
fun saveData(data: DataClass) {
externalScope.launch {
dataStore.edit { prefs ->
prefs[KEY] = data.data
}
}
}
companion object {
// 型によってstringPreferencesKeyになったりする
private val KEY = booleanPreferencesKey("key")
}
}
最後に
大まかではありますが、上記を参考にすればたいていは作れるかと思います
どなたかのお役に立てれば幸いです