2

Kotlin シリアライゼーションと Hilt を使用して Proto Datastore を実装しようとしています。

参考:https ://medium.com/androiddevelopers/using-datastore-with-kotlin-serialization-6552502c5345

新しい DataStore 作成構文を使用して DataStore オブジェクトを挿入できませんでした。

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

    @ExperimentalSerializationApi
    @Singleton
    @Provides
    fun provideDataStore(@ApplicationContext context: Context): DataStore<UserPreferences> {
        val Context.dataStore: DataStore<UserPreferences> by dataStore(
            fileName = "user_pref.pb",
            serializer = UserPreferencesSerializer
        )
        return dataStore
    }

}

リントメッセージが表示されますLocal extension properties are not allowed

この Kotlin 拡張プロパティをどのように注入できますか? または、dataStore オブジェクトを挿入する方法はありますか?

4

2 に答える 2

1

ローカル コンテキストで拡張機能を使用することはできません。次の方法で呼び出す必要があります。

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

    @ExperimentalSerializationApi
    @Singleton
    @Provides
    fun provideDataStore(@ApplicationContext context: Context): DataStore<UserPreferences> =
         DataStoreFactory.create(
            serializer = UserPreferencesSerializer,
            produceFile = { context.dataStoreFile("user_pref.pb") },
        )
}
于 2021-09-10T18:57:39.640 に答える