1

Android アプリにデータストアがあり、プロファイルの詳細を保存しています。そして、次のように取得します

suspend fun saveUser(user: User) {
        dataStore.edit {
            it[USER_ID] = user.id
            it[USER_NAME] = user.name
            it[USER_MOBILE] = user.phone
            it[USER_EMAIL] = user.email
            it[USER_IMAGE] = user.image
            it[USER_ADDRESS] = user.address
        }
    }



val userDate = dataStore.data
        .catch { e ->
            if (e is IOException) {
                Log.e("PREFERENCE", "Error reading preferences", e)
                emit(emptyPreferences())
            } else {
                throw e
            }
        }
        .map { pref ->
            val userId = pref[USER_ID] ?: ""
            val userName = pref[USER_NAME] ?: ""
            val userEmail = pref[USER_EMAIL] ?: ""
            val userImage = pref[USER_IMAGE] ?: ""
            val userPhone = pref[USER_MOBILE] ?: ""
            val userAddress = pref[USER_ADDRESS] ?: ""
            User(
                name = userName,
                image = userImage,
                address = userAddress,
                phone = userPhone,
                id = userId,
                email = userEmail
            )
        }

それに伴い、ユーザーの可用性ステータスを保存しています

 suspend fun saveIsAvailable(boolean: Boolean) {
        dataStore.edit {
            it[USER_IS_AVAILABLE] = boolean
        }
    }

ビューモデルでこのようなユーザープロファイルの詳細を収集しています

viewModelScope.launch(Default) {
            RiderDataStore.userDate.collect {
                user.postValue(it)
            }
        }

ユーザーの可用性を変更するたびに、ユーザーの詳細フローもトリガーされますが、これは不必要であり、UI のジッター (画像のリロード) を引き起こします。これが発生する理由と、特にユーザーの詳細のデータが変更された場合にのみフローがトリガーされるようにする方法。

4

1 に答える 1