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".
Réponses
Trop de publicités?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.
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;
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
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,
);
}