Android DataStore:如何用动态文件名创建并注入fileKey?
解决方案
你之前的问题在于用了固定文件名的Context扩展属性来获取DataStore,没法动态传入每个widget实例的fileKey。要实现每个实例对应独立的DataStore,直接在getDataStore方法里动态创建即可:
override suspend fun getDataStore( context: Context, fileKey: String ): DataStore<SingleWidgetInfo> { // 直接使用传入的fileKey作为DataStore的文件名,搭配对应的序列化器 return context.dataStore(fileKey, WeatherInfoSerializer) }
说明
- 删掉原来那个固定文件名的
private val Context.datastore扩展属性,因为它是全局固定的,没法适配不同widget实例的fileKey需求。 dataStore函数本身支持动态传入文件名参数,直接在方法内调用它,把fileKey传进去就能为每个widget实例创建独立的DataStore,实现不同实例存储不同状态的需求。
内容的提问来源于stack exchange,提问作者Jscti
相关产品推荐
相关产品推荐

