96 votes

comment définir la position du curseur à la fin de la valeur en flutter dans le champ de texte?

le problème est que je veux ajouter ",00" à la fin de la valeur du champ de texte fonctionne bien dans l'appareil iOS mais dans Android, le curseur se déplace au point de départ de la valeur dans le champ de texte. Donc, je ne peux pas ajouter ",00".

207voto

jwehrle Points 514

J'ai eu le même problème avec la définition d'un TextEditingController et c'est ce qui a fonctionné pour moi.

 controller.text = someString;
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));

TextSelection.fromPosition() effectue les opérations suivantes (à partir de la documentation) :

Crée une sélection réduite à la position de texte donnée. Un effondré la sélection commence et se termine au même décalage, ce qui signifie qu'elle contient zéro caractère mais sert plutôt de point d'insertion dans le texte.

14voto

Vicky Salunkhe Points 68

J'ai résolu mon problème en utilisant ceci

cela placera votre curseur à la fin dans le champ de texte.

vous pouvez appeler le code où et quand il définira l'emplacement du curseur lorsqu'il est appelé.

ou placez simplement ce code dans la onChanged() du champ de texte

 final val = TextSelection.collapsed(offset: _textTEC.text.length); 
 _textTEC.selection = val;

13voto

William Points 425

Cela a fonctionné pour moi:

 _inputCtrl.value = TextEditingValue(
  text: suggestion,
  selection: TextSelection.collapsed(offset: suggestion.length),
);

https://github.com/flutter/flutter/issues/11416#issuecomment-507040665

7voto

Roberto Juárez Points 43

Cela fonctionne pour moi comme un charme.

 myController.text = newText;
myController.selection = TextSelection(
    baseOffset: newText.length,
    extentOffset: newText.length)

5voto

rayworks Points 91

J'ai vérifié les notes des setter des TextEditingController de text , il est dit que le [texte] et la [sélection] ne doivent pas être modifiés en même temps , cependant pour la saisie téléphonique, nous aimerions appliquer un certain format pour la saisie (par exemple '131 1111 1111') tout en gardant le curseur toujours à la fin .

J'utilise donc juste un TextEditingController , ça marche !

 class PhoneEditingController extends TextEditingController {

  @override
  set text(String newText) {
    value = value.copyWith(
    text: newText,
    selection: TextSelection.collapsed(offset: newText.length),
    composing: TextRange.empty,
  );

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X