8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Kotlin Proto DataStore 变量中实现 Getter 方法

Achim Kraus 2月前

27 0

因此,我定义了一个简单的数据类,如下所示:@Serializabledata class UserSession( var name: String = \'\', val isEnrolled: Boolean = false,)此类与另一个 Ko...

因此,我定义了一个简单的数据类,如下所示:

@Serializable
data class UserSession(
    var name: String = "",
    val isEnrolled: Boolean = false,
)

该类与另一个 Kotlin 类 UserSessionViewModel 关联如下:

class UserSessionViewModel(
    private val application: Application,
    private val store: DataStore<UserSession>,
) : AndroidViewModel(application), KoinComponent {

    /**
     * A [Flow] representing the current [UserSession].
     * It emits every time the user session is updated.
     */
    val userSession: Flow<UserSession>
        get() = store.data

    /**
     * Enrolls the user in the application.
     * Updates the `isEnrolled` property of [UserSession] to true.
     */
    fun enroll() {
        viewModelScope.launch {
            store.updateData {
                it.copy(isEnrolled = true)
            }
        }
    }

    /**
     * Caches the given name in the [UserSession].
     *
     * @param name The name to be cached.
     */
    fun cacheName(name: String) {
        viewModelScope.launch {
            store.updateData {
                it.copy(name = name)
            }
        }
    }

    fun getEnrolledName(): String {
        val enrolledName: String
        viewModelScope.launch {
            store.<proper-method?> {
                //does this work?
                enrolledName = it.let(name)
        }
        return enrolledName
    }

//and other, similar write-only methods into the data-store
}

我的问题是:如何在这些变量之一中实现一个简单的“getter”方法?或者,有必要这样做吗?

我发现的其他示例总是谈论实现 Preferences DataStore...但事实并非如此。我只想确保我感兴趣的变量在应用程序重启后仍然存在,并且可以在我的 UserSessionViewModel 对象的方法中读取

提前致谢,

查尔斯。

帖子版权声明 1、本帖标题:在 Kotlin Proto DataStore 变量中实现 Getter 方法
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Achim Kraus在本站《android》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 不,您不需要额外的函数来检索您的部分内容 UserSession 。流程已返回所需的一切 userSession

    也就是说,您应该只在视图模型中公开 StateFlows:

    val userSession: StateFlow<UserSession?> = store.data.stateIn(
        scope = viewModelScope,
        started = SharingStarted.WhileSubscribed(5_000),
        initialValue = null,
    )
    

    这样,内容的 userSession 行为就更像一个变量:StateFlow 始终具有一个 value 属性。如果您只对当前用户名感兴趣,则可以调用此方法:

    viewModel.userSession.value?.name
    

    不过,通常您只想定期收集流量。然后您可以访问收集的值来检索属性 name

返回
作者最近主题: