在TextField
焦点上,我想选择所有文本,以便在用户开始键入时删除现有文本。
这将替代Android中的android:selectAllOnFocus="true"
。
如何实现?
答案 0 :(得分:10)
显式传递一个控制器和focusNode,则您拥有完全控制权:
final _controller = TextEditingController();
final _focusNode = FocusNode();
initState() {
super.initState();
_focusNode.addListener(() {
if(_focusNode.hasFocus) {
_controller.selection = TextSelection(baseOffset: 0, extentOffset: _controller.text.length);
}
});
}
build() => TextField(controller: _controller, focusNode: _focusNode);
更新 从https://github.com/flutter/flutter/issues/28307#issuecomment-467952074开始,以防止无限循环:
_controller.addListener(() {
final newText = _controller.text.toLowerCase();
_controller.value = _controller.value.copyWith(
text: newText,
selection: TextSelection(baseOffset: newText.length, extentOffset: newText.length),
composing: TextRange.empty,
);
});
答案 1 :(得分:7)
还可以在onTap
事件中设置选择。像这样:
TextField(
controller: _controller,
onTap: () => _controller.selection = TextSelection(baseOffset: 0, extentOffset: _controller.value.text.length),
)
答案 2 :(得分:3)
实际上比接受的答案容易得多。
首先初始化一个TextEditingController。
final _controller = TextEditingController();
然后,在构建方法的某个位置(可能在您的编辑文本逻辑中),像这样设置文本和选择道具。
_controller.text = textValue;
_controller.selection = TextSelection(
baseOffset: 0,
extentOffset: textValue.length,
);
在TextFormField中,确保分配控制器并将autofocus设置为true。
TextFormField(
controller: _controller,
autofocus: true,
//...more properties
就是这样!
答案 3 :(得分:3)
要获得更清洁、可重复使用的体验,Extension class method(请参阅下面的注释)非常方便。
Sub CopySheet()
Dim wbk1 As Workbook, wbk2 As Workbook
'Workbooks("発注残マクロ").Activate
Set wbk1 = Workbooks("発注残マクロ")
Set wbk2 = Workbooks("ocs680j")
'シートの名前を記入
wbk2.Worksheets("ocs680j").Copy After:=wbk1.Sheets(wbk1.Sheets.Count)
wbk2.Saved = True
wbk2.Close SaveChanges:=False
End Sub
在球场上:
extension TextEditingControllerExt on TextEditingController {
void selectAll() {
if (text == null || text.isEmpty) return;
selection = TextSelection(baseOffset: 0, extentOffset: text.length);
}
}
在 TextField(
controller: myController,
onTap: () => myController.selectAll()
)
类中,可以省略 extension
。
this
假定为:text
即 this.text
与 <this instance of controller>.text
实际上是 selection
相同。
答案 4 :(得分:2)
从Dart 2开始:
controller1.selection = TextSelection(baseOffset:0, extentOffset:controller1.text.length);