web-dev-qa-db-fra.com

Gérer les événements dans TextFormField de flutter

Dans le projet Flutter, j'ai besoin d'écouter le texte d'entrée dans TextFormField et de faire certaines actions, en particulier lorsque l'utilisateur met du caractère (par exemple, de l'espace) dans ce fichier ou lorsqu'il demande le focus. Lorsque ce type d'événement se produit, je dois modifier la valeur du dossier. Je sais qu'il y a une propriété called controller mais je ne sais pas comment l'utiliser dans ce cas.

Merci d'avance.

10
mynameis

Vous pouvez spécifier un contrôleur et un nœud de focus, puis leur ajouter des écouteurs pour surveiller les modifications.

Ex:

Définir des contrôleurs et des nœuds de focus

TextEditingController _controller = new TextEditingController();

FocusNode _textFocus = new FocusNode();

Définir la fonction d'écoute

void onChange(){
  String text = _controller.text;
  bool hasFocus = _textFocus.hasFocus;
  //do your text transforming
  _controller.text = newText;
  _controller.selection = new TextSelection(
                                baseOffset: newText.length, 
                                extentOffset: newText.length
                          );
}

Ajouter un listner au contrôleur et au focusnode à initState

// you can have different listner functions if you wish
_controller.addListener(onChange); 
_textFocus.addListener(onChange);

Ensuite, vous pouvez l'utiliser comme

new TextFormField(
  controller: _controller,
  focusNode: _textFocus,
)

J'espère que ça t'as aidé!

32
Hemanth Raj

Si vous essayez simplement de transformer l'entrée en un autre formulaire dans TextFormField, vous feriez mieux d'utiliser "TextInputFormatter". L'utilisation d'un écouteur avec TextController provoque de nombreux problèmes. Jetez un oeil à mon exemple de code pour voir si cela vous aide. btw, La dernière ligne de code tente simplement de déplacer le curseur à la fin du texte.

TextFormField(inputFormatters: [QuantityInputFormatter()])

class QuantityInputFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    final intStr = (int.tryParse(newValue.text) ?? 0).toString();
    return TextEditingValue(
            text: intStr, selection: TextSelection.collapsed(offset: intStr.length),);
  }
}
1
Panda World