onChange
のTextField
メソッドを使用して入力を確認しようとしていますが、テキストをTextEditingController
で置き換えた後、カーソルをTextField
の先頭に移動します。
この問題は、Android
プラットフォームでのみ発生します。
コード
TextField(
controller: textEditController,
onChanged: (content) {
textEditController.text = checkNumber(content);
},)
フラッターバージョン
[✓] 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)
TextEditingController
を使用して選択を設定します
TextField(
controller: textEditController,
onChanged: (content) {
textEditController..text = checkNumber(content)
..selection = TextSelection.collapsed(offset: 0);
},
)
textとselectionの両方を設定していたため、受け入れられた解決策が機能しませんでした--valueを設定する必要がありました。
TextEditingController class のドキュメントには次のように記載されています:
テキストまたは選択プロパティは、このコントローラーに追加されたリスナー内から設定できます。両方のプロパティを変更する必要がある場合は、代わりにコントローラーの値を設定する必要があります。
ドキュメントには、次のような関連する例も含まれています。
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();
}
これにより、入力されたテキストは小文字になり、カーソルは入力の最後に留まります。