Je suis nouveau à Flutter.
Je crée un formulaire avec plusieurs entrées de texte en utilisant les widgets suivants: Form, TextFormField. Le clavier qui apparaît n'affiche pas l'action de champ "suivant" (qui devrait déplacer le focus sur le champ suivant) à la place, il s'agit de l'action "terminé" (qui masque le clavier).
J'ai cherché des indices dans les documents officiels, je n'ai rien trouvé directement qui puisse être fait. J'ai bien atterri sur FocusNode ( livre de cuisine , doc api ). Il fournit un mécanisme pour déplacer le focus par un bouton ou toute autre action sur l'application, mais je veux que ce soit dans le clavier .
J'ai trouvé un moyen d'y parvenir.
Affichage de l'icône suivante au lieu de Terminé - définition du paramètre textInputAction
sur TextInputAction.next
Utilisation du rappel onFieldSubmitted
pour demander le nœud de focus du champ suivant.
class FormWidget extends StatelessWidget{
final focus = FocusNode();
@override
Widget build(BuildContext context) {
return Form(
child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextFormField(
textInputAction: TextInputAction.next,
autofocus: true,
decoration: InputDecoration(labelText: "Input 1"),
onFieldSubmitted: (v){
FocusScope.of(context).requestFocus(focus);
},
),
TextFormField(
focusNode: focus,
decoration: InputDecoration(labelText: "Input 2"),
),
],
),
),
);
}
}
Edit: Comme indiqué dans la documentation (flutter.io/docs/cookbook/forms/focus), - nous devons également gérer le cycle de vie de FocusNode. Donc, init FocusNode dans la méthode init () et disposer dans dispose () du Widget parent. - @AntonDerevyanko