J'essaie de vérifier l'entrée avec la méthode onChange
dans TextField
mais après avoir remplacé le texte par TextEditingController
le curseur se déplace au début de TextField
.
Ce problème se produit uniquement sur la plate-forme Android
.
Code
TextField(
controller: textEditController,
onChanged: (content) {
textEditController.text = checkNumber(content);
},)
version flottante
[✓] Flutter (Channel master, v1.2.2-pre.41, on Mac OS X 10.14.3 18D109, locale
en-IR)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
Définissez la sélection à l'aide de TextEditingController
TextField(
controller: textEditController,
onChanged: (content) {
textEditController..text = checkNumber(content)
..selection = TextSelection.collapsed(offset: 0);
},
)
La solution acceptée n'a pas fonctionné pour moi - car je définissais à la fois la sélection de texte et J'avais besoin de définir à la place la valeur .
La documentation classe TextEditingController indique:
Le texte ou les propriétés de sélection peuvent être définis à partir d'un écouteur ajouté à ce contrôleur. Si les deux propriétés doivent être modifiées, la valeur du contrôleur doit être définie à la place.
La documentation contient également un exemple pertinent qui comprend les éléments suivants:
void initState() {
_controller.addListener(() {
final text = _controller.text.toLowerCase();
_controller.value = _controller.value.copyWith(
text: text,
selection: TextSelection(baseOffset: text.length, extentOffset: text.length),
composing: TextRange.empty,
);
});
super.initState();
}
Cela force le texte saisi à être en minuscules et maintient le curseur à la fin de l'entrée.