问题是我想在文本字段的值末尾添加“,00”在 iOS 设备中效果很好,但在 android 中光标移动到文本字段中值的起点。所以,我无法添加“,00”。
jwe*_*rle 158
我在设置 a 时遇到了同样的问题,TextEditingController这对我有用。
controller.text = someString;
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
Run Code Online (Sandbox Code Playgroud)
TextSelection.fromPosition() 执行以下操作(来自文档):
在给定的文本位置创建折叠选择。折叠的选区以相同的偏移量开始和结束,这意味着它包含零个字符,而是用作文本中的插入点。
Pra*_*ani 20
如果您在控制器中设置值,则可以使用..运算符,如下所示:
final _controller = TextEditingController()..text = txtValue
..selection = TextSelection.collapsed(offset: txtValue.length);
)
Run Code Online (Sandbox Code Playgroud)
我认为当您设置值运行时时它非常有用。
Adi*_*til 13
更新文本字段中的文本后,简单易用的解决方案将光标移动到位置末尾,只需添加下面的行即可。
textController.selection =
TextSelection.collapsed(offset: textController.text.length);
Run Code Online (Sandbox Code Playgroud)
Vic*_*khe 12
我用这个解决了我的问题
这会将您的光标设置在文本字段的末尾。
您可以随时随地调用代码,它会在调用时设置光标位置。
或简单地将此代码放在onChanged()文本字段的方法中
final val = TextSelection.collapsed(offset: _textTEC.text.length);
_textTEC.selection = val;
Run Code Online (Sandbox Code Playgroud)
Wil*_*iam 11
这对我有用:
_inputCtrl.value = TextEditingValue(
text: suggestion,
selection: TextSelection.collapsed(offset: suggestion.length),
);
Run Code Online (Sandbox Code Playgroud)
https://github.com/flutter/flutter/issues/11416#issuecomment-507040665
小智 10
这对我来说就像一个魅力。
myController.text = newText;
myController.selection = TextSelection(
baseOffset: newText.length,
extentOffset: newText.length)
Run Code Online (Sandbox Code Playgroud)
似乎有效的解决方案如下:
为文本字段的构造函数提供一个 TextEditingController 参数:
var myTextEditingController = TextEditingController();
var myTextField = TextField(..., controller: myTextEditingController);
Run Code Online (Sandbox Code Playgroud)在文本字段中设置新文本时,请使用 TextEditingController,如下所示:
myTextEditingController.value.copyWith(
text: newText,
selection: TextSelection(
baseOffset: newText.length,
extentOffset: newText.length
)
)
Run Code Online (Sandbox Code Playgroud)对于它所实现的效果来说,这似乎非常复杂,但它似乎是解决 Flutter 文本字段中光标未更新问题的唯一解决方案。
setter检查了ofTextEditingController的注释text,它说 [text] 和 [selection] 不应同时更改,但是对于电话输入,我们希望对输入应用某种格式(例如 ' 131 1111 1111') 同时将光标始终保持在末尾。
所以我只是使用定制的TextEditingController,它有效!
class PhoneEditingController extends TextEditingController {
@override
set text(String newText) {
value = value.copyWith(
text: newText,
selection: TextSelection.collapsed(offset: newText.length),
composing: TextRange.empty,
);
}
Run Code Online (Sandbox Code Playgroud)
如果您的新值太长。您应该将视图滚动到新的光标位置。
TextEditingController和ScrollController到TextField。记得初始化/处理它们initState并dispose
TextField(
controller: controller,
scrollController: scrollController,
)
Run Code Online (Sandbox Code Playgroud)
TextEditingControllercontroller.text = newValue;
controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
Run Code Online (Sandbox Code Playgroud)
Future.delayed(Duration(milliseconds: 50),(){
scrollController.jumpTo(scrollCtrl.position.maxScrollExtent);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37369 次 |
| 最近记录: |