java.lang.IllegalStateException: Il y a plusieurs Banques de données active pour le même fichier: /data/utilisateur/0/com.firstgoalkeeper.firstgoalkeeper/fichiers/magasin/player_pref.preferences_pb. Vous devez maintenir votre Magasin de données comme un singleton ou de confirmer qu'il n'existe pas de deux de la banque de données active sur le même fichier (en confirmant que la portée est annulé).
class Constants {
companion object{
const val PLAYER_PREFERENCE = "player_pref"
val PLAYER_SELECTION_KEY = intPreferencesKey("player_selection")
}
}
abstract class PrefsDataStore(context: Context, fileName: String) {
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(
fileName
)
val mdataStore: DataStore<Preferences> = context.dataStore
}
class PlayerSelectionDataStore(context: Context) : PrefsDataStore(context,
PLAYER_PREFERENCE) {
suspend fun storeIndex(index: Int) {
mdataStore.edit {
it[PLAYER_SELECTION_KEY] = index
}
}
val userSelectionFlow: Flow<Int> = mdataStore.data.map {
it[PLAYER_SELECTION_KEY] ?: 4
}
}
@Composable
fun PlayerSelection() {
val context = LocalContext.current
val playerSelectionDataStore = PlayerSelectionDataStore(context)
var index by remember {
mutableStateOf(4)
}
Log.d("index", "PlayerSelection: we are at index ${index} ")
Log.d("index", "PlayerSelection: we select ${allTeamsLists[index].name} ")
Row(
verticalAlignment = Alignment.CenterVertically, modifier = Modifier
.fillMaxSize()
.background(color = goalkeeperBackground)
) {
// ...
Box(
modifier = Modifier
.clickable {
GlobalScope.launch {
playerSelectionDataStore.storeIndex(index)
}
Toast
.makeText(
context,
"${allTeamsLists[index].name} player is Selected ",
Toast.LENGTH_SHORT
)
.show()
}
...
) {...}
Ce que j'ai fait de mal et de proposer les meilleures pratiques.