web-dev-qa-db-ja.com

onChange TextFieldカーソルを移動して開始します

onChangeTextFieldメソッドを使用して入力を確認しようとしていますが、テキストを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)
9
Saman

TextEditingControllerを使用して選択を設定します

TextField(
controller: textEditController,
onChanged: (content) {
  textEditController..text = checkNumber(content)
                    ..selection = TextSelection.collapsed(offset: 0);
  },
)
18

textselectionの両方を設定していたため、受け入れられた解決策が機能しませんでした--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();
}

これにより、入力されたテキストは小文字になり、カーソルは入力の最後に留まります。

1
Nick Meinhold