gpt4 book ai didi

android - 使用 Hilt 提供首选项数据存储

转载 作者:行者123 更新时间:2023-12-03 20:23:58 25 4
gpt4 key购买 nike

我试图提供一个常见的 DataStore<Preferences>以便可以在多个地方使用相同的首选项文件,但我收到了有用的错误消息:

Cannot find symbol: DaggerMyApplication_HiltComponents_SingletonC.builder()

@Module
@InstallIn(ApplicationComponent::class)
object DataStoreModule {

@Provides
fun provideDataStore(@ApplicationContext context: Context): DataStore<Preferences> = context.createDataStore("settings")
}
但是,我可以执行以下操作并在 @Inject 中使用它构造函数。
@Singleton
class DataStoreProvider @Inject constructor(@ApplicationContext context: Context) {

val dataStore: DataStore<Preferences> = context.createDataStore("settings")
}
我假设扩展名 createDataStore正在做一些 Hilt 不喜欢的事情,但即使问题无法解决,我也希望能对正在发生的事情做出解释。

最佳答案

这对我有用:

    @Provides
@Singleton
fun dataStore(@ApplicationContext appContext: Context): DataStore<Preferences> =
appContext.createDataStore("settings")
这个想法是把 @Singleton提供者方法的背后。

2021 年 2 月 9 日更新:
最好创建一个 manager并提供:
class DataStoreManager(appContext: Context) {

private val settingsDataStore = appContext.createDataStore("settings")

suspend fun setThemeMode(mode: Int) {
settingsDataStore.edit { settings ->
settings[Settings.NIGHT_MODE] = mode
}
}

val themeMode: Flow<Int> = settingsDataStore.data.map { preferences ->
preferences[Settings.NIGHT_MODE] ?: AppCompatDelegate.MODE_NIGHT_UNSPECIFIED
}

}
AppModule :
@InstallIn(SingletonComponent::class)
@Module
class AppModule {
@Provides
@Singleton
fun dataStoreManager(@ApplicationContext appContext: Context): DataStoreManager =
DataStoreManager(appContext)
2021 年 3 月 20 日更新:
版本 1.0.0-alpha07
private val Context.dataStore by preferencesDataStore("settings")

class DataStoreManager(appContext: Context) {

private val settingsDataStore = appContext.dataStore

suspend fun setThemeMode(mode: Int) {
settingsDataStore.edit { settings ->
settings[Settings.NIGHT_MODE] = mode
}
}

val themeMode: Flow<Int> = settingsDataStore.data.map { preferences ->
preferences[Settings.NIGHT_MODE] ?: AppCompatDelegate.MODE_NIGHT_UNSPECIFIED
}
}
2021 年 5 月 1 日更新:
@Florian 完全正确,我忘记了。
删除 dataStoreManager提供者。然后,
private val Context.dataStore by preferencesDataStore("settings")

@Singleton //You can ignore this annotation as return `datastore` from `preferencesDataStore` is singletone
class DataStoreManager @Inject constructor(@ApplicationContext appContext: Context) {

private val settingsDataStore = appContext.dataStore

suspend fun setThemeMode(mode: Int) {
settingsDataStore.edit { settings ->
settings[Settings.NIGHT_MODE] = mode
}
}

val themeMode: Flow<Int> = settingsDataStore.data.map { preferences ->
preferences[Settings.NIGHT_MODE] ?: AppCompatDelegate.MODE_NIGHT_UNSPECIFIED
}

}

关于android - 使用 Hilt 提供首选项数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65252533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com