TLDR : Tous les widgets devraient avoir un Key key
comme en option ou leur constructeur. Key
est utilisé par le moteur de flutter à l'étape de la reconnaissance du widget modifié dans une liste.
Il est utile lorsque vous avez un liste ( Column
, Row
ou autre) de widgets du même type qui peuvent potentiellement être retirés/insérés.
Disons que vous avez ceci (le code ne fonctionne pas, mais vous comprenez l'idée) :
AnimatedList(
children: [
Card(child: Text("foo")),
Card(child: Text("bar")),
Card(child: Text("42")),
]
)
Vous pouvez potentiellement supprimer n'importe lequel de ces widgets individuellement par un simple glissement.
Le problème est que notre liste a une animation lorsqu'un enfant est retiré. Donc, enlevons "bar".
AnimatedList(
children: [
Card(child: Text("foo")),
Card(child: Text("42")),
]
)
Le problème : sans Key
flutter ne sera pas en mesure de savoir si le deuxième élément de votre Row
disparu. Ou si c'est le dernier qui a disparu et que le second voit son enfant changer.
Donc sans Key
vous pouvez potentiellement avoir un bug où votre quitter sera jouée sur le dernier élément à la place !
C'est là que Key
a lieu.
Si nous reprenons notre exemple, en utilisant la clé, nous aurions ceci :
AnimatedList(
children: [
Card(key: ObjectKey("foo"), child: Text("foo")),
Card(key: ObjectKey("bar"), child: Text("bar")),
Card(key: ObjectKey("42"), child: Text("42")),
]
)
remarquez comment la clé est pas l'indice de l'enfant mais quelque chose d'unique à l'élément.
A partir de ce point, si on enlève encore "bar", on aura
AnimatedList(
children: [
Card(key: ObjectKey("foo"), child: Text("foo")),
Card(key: ObjectKey("42"), child: Text("42")),
]
)
Merci à key
étant présent, le moteur de flutter sait maintenant avec certitude quel widget a été supprimé. Et maintenant notre quitter L'animation sera jouée correctement sur "bar" au lieu de "42".
0 votes
À certains égards, le concept est similaire à la clé dans React stackoverflow.com/questions/28329382/
1 votes
Ce gars pourrait utiliser des clés pour améliorer ses performances.... vaut la peine d'y jeter un coup d'oeil medium.com/flutter-community/