我做了一个简单的函数来存储一个长值。
在UserPreferencesRepository.kt中
class UserPreferencesRepository(
private val dataStore: DataStore<Preferences>
) {
private companion object {
val TIME_START = longPreferencesKey("time_start")
const val TAG = "UserPreferencesRepo"
}
suspend fun saveTimePreference(theTime : Long){
dataStore.edit { preferences ->
preferences[TIME_START] = 0L
}
}
val dateTime: Flow<Long> = dataStore.data
.catch {
if (it is IOException) {
Log.e(TAG, "Error reading preferences.", it)
emit(emptyPreferences())
} else {
throw it
}
}
.map { preferences ->
preferences[TIME_START] ?: 0L
}
}
然后把它添加到我的视图模型中。
在HomeViewModel.kt中
class HomeViewModel(
private val userPreferencesRepository: UserPreferencesRepository
) : ViewModel() {
// Implemented nothing yet
}
这个阶段,代码工作得很好,但是当我把这个视图模型添加到我的组合中时,它就被压碎了。
我试过这种方法,
@Composable
fun HomeScreen(
){
val viewModel = viewModel<HomeViewModel>()
}
这样
@Composable
fun HomeScreen(
homeViewModel: HomeViewModel = viewModel()
){
}
每当我这样做时,应用程序就会崩溃。这个错误说,
Cannot create an instance of class com.playmakers.lifemetrics.ui.screens.home.HomeViewModel
我怎样才能解决这个问题,或者建议我正确的方法。
1条答案
按热度按时间gdx19jrr1#
您的ViewModel需要
UserPreferencesRepository
的示例,您将其声明为构造函数参数。但是你调用的viewModel()函数没有仓库示例,这就是为什么它不能示例化你的HomeViewModel类。要解决这个示例化问题,您必须为viewModel类提供存储库示例,以便它可以被示例化。
你可以像下面这样创建一个Factory类:
现在,你可以通过传递工厂示例来获取ViewModel类的示例,如下所示: