简体   繁体   中英

How to read from DataStore Preferences to string?

Im trying to use datastore inside Composable to read user data but cant read the value as string to put inside Text. That's the datastore

private val Context.userPreferencesDataStore: DataStore<Preferences> by preferencesDataStore(
  name = "user"
)
private val USER_FIRST_NAME = stringPreferencesKey("user_first_name")
suspend fun saveUserToPreferencesStore(context: Context) {
  context.userPreferencesDataStore.edit { preferences ->
    preferences[USER_FIRST_NAME] = "user1"
  }
}
fun getUserFromPreferencesStore(context: Context): Flow<String> = context.userPreferencesDataStore.data
  .map { preferences ->
    preferences[USER_FIRST_NAME] ?: ""
  }

and inside Composable:

@Composable
fun myComposable() {
  var context = LocalContext.current
  LaunchedEffect( true){
    saveUserToPreferencesStore(context )
  
  }
  Text(getUserFromPreferencesStore(context ))
}

so in your code, getUserFromPreferencesStore() is returning a Flow. so you should collect that as flow, and then compose will auto update once the data is being changed. For example (something similar to this):

val user by getUserFromPreferencesStore(context).collectAsStateWithLifecycleAware(initValue)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM