6. Application Hockey Version 2¶
Explication de PlayerListWithSearch¶
Cette nouvelle version ajoute une fonctionnalité de recherche à la liste des joueurs. Voici une explication détaillée des modifications :
Fonction getPlayers¶
fun getPlayers(name: String? = null): List<Player> =
if (name == null)
getSamplePlayers()
else
getSamplePlayers().filter { it.name.lowercase().contains(name.lowercase()) }.toList()
Cette fonction permet de filtrer la liste des joueurs en fonction d’un critère de recherche :
- Si
nameestnull, elle retourne tous les joueurs. - Sinon, elle filtre la liste pour ne retourner que les joueurs dont le nom contient la chaîne de recherche (insensible à la casse).
Composable PlayerListWithSearch¶
@Composable
fun PlayerListWithSearch(modifier: Modifier = Modifier) {
var searchCriteria by rememberSaveable { mutableStateOf("") }
Column {
TextField(
value = searchCriteria,
onValueChange = { searchCriteria = it },
modifier = modifier
)
LazyColumn(modifier = modifier.fillMaxSize()) {
items(getPlayers(searchCriteria)) {
PlayerCard(player = it)
}
}
}
}
Ce composable remplace PlayerList et ajoute une fonctionnalité de recherche :
-
searchCriteria:- Utilise
rememberSaveablepour conserver l’état de la recherche même lors des recompositions. mutableStateOf("")initialise la valeur de recherche à une chaîne vide.
- Utilise
-
Column:- Organise verticalement le champ de recherche et la liste des joueurs.
-
TextField:- Permet à l’utilisateur d’entrer un critère de recherche.
value = searchCriteriaaffiche la valeur actuelle.onValueChange = { searchCriteria = it }met à joursearchCriteriaà chaque modification.
-
LazyColumn:- Similaire à la version précédente, mais utilise maintenant
getPlayers(searchCriteria). - Cela filtre dynamiquement la liste des joueurs en fonction du critère de recherche.
- Similaire à la version précédente, mais utilise maintenant
-
items:- Crée une
PlayerCardpour chaque joueur filtré.
- Crée une
Cette nouvelle version offre une expérience utilisateur plus interactive, permettant de rechercher des joueurs
spécifiques dans la liste. La liste se met à jour automatiquement à chaque modification du texte dans le champ de
recherche, grâce à l’utilisation de l’état (searchCriteria) et de la recomposition automatique de Jetpack Compose.
Certainement. Voici une explication plus détaillée des connexions entre ces éléments, formatée en markdown avec le code Kotlin approprié :
Connexions entre TextField, mutableStateOf, onValueChange, et getPlayers()¶
1. mutableStateOf et État Composable¶
mutableStateOf("")crée un état mutable initialisé avec une chaîne vide.rememberSaveablepermet de conserver cet état même lors des recompositions ou des changements de configuration.byest utilisé pour déléguer la propriété, permettant d’accéder et de modifiersearchCriteriadirectement.
2. TextField et onValueChange¶
value = searchCriteria: LeTextFieldaffiche la valeur actuelle desearchCriteria.onValueChange = { searchCriteria = it }: Lorsque l’utilisateur tape dans le champ :itreprésente la nouvelle valeur du champ.- Cette nouvelle valeur est assignée à
searchCriteria. - Cela déclenche une recomposition du composable.
3. Connexion avec getPlayers()¶
LazyColumn(modifier = modifier.fillMaxSize()) {
items(getPlayers(searchCriteria)) {
PlayerCard(player = it)
}
}
getPlayers(searchCriteria)est appelé avec la valeur actuelle desearchCriteria.- Chaque fois que
searchCriteriachange :getPlayers()est rappelé avec la nouvelle valeur.- La liste des joueurs est filtrée en fonction de cette nouvelle valeur.
LazyColumnse recompose avec la nouvelle liste filtrée.
4. Flux de données et recomposition¶
- L’utilisateur tape dans le
TextField. onValueChangeest appelé, mettant à joursearchCriteria.- La mise à jour de
searchCriteriadéclenche une recomposition. - Lors de la recomposition :
TextFieldaffiche la nouvelle valeur desearchCriteria.getPlayers(searchCriteria)est appelé avec la nouvelle valeur.LazyColumnse recompose avec la nouvelle liste filtrée.
Cette architecture réactive permet une mise à jour en temps réel de l’interface utilisateur. Chaque frappe dans le champ de recherche déclenche une chaîne de réactions qui aboutit à l’affichage filtré des joueurs, offrant une expérience utilisateur fluide et réactive.
Utilisation de l’IA
Page rédigée en partie avec l’aide d’un assistant IA. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.