Open12
DataStore を使ってみる
これをやりたい
ただ、今管理したいのは単一の値なので, Task
も TaskRepository
もいない。
class TextViewModel(private val userPreferencesRepository: UserPreferencesRepository) : ViewModel() {
private val userPreferencesFlow = userPreferencesRepository.userPreferencesFlow
private val textUiModelFlow = combine(
userPreferencesFlow
) { userPreferences: UserPreferences ->
return@combine TextUiModel(
textColorText = userPreferences.textColorText
)
}
}
こう書くと combine がエラーを吐く。
combine は二つ以上の値を監視するためのものらしいのでそれはそう
ただ、combine 以外で、 userPreferencesFlow
から viewModel 用の field を抜き出す方法がわからない
Flow から livedata に切り替えられればとりあえず実装はできるはず
private final val userPreferencesFlow: Flow<UserPreferences>
.asLiveData()
-> Unresolved reference: asLiveData
どうして…
Flow は asLiveData で LiveData に変換できるんじゃないのか
これが足りなかった
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
ViewModel なしでとりあえず呼び出せるかやってみる
Activity から呼び出そうとして、
has no zero argument constructor
と怒られた。
class UserPreferencesRepository private constructor(context: Context) {
なぜここを private にしているのか、そして、ここの値はどのタイミングで入っているのか…
private
外して、 onCreate
で lateinit
するようにした
やり方違ってそうだけど何が違うのかわからん