在 TextField
上,我想选择所有文本,以便在用户开始输入时删除现有文本。
这将替代:Android 中的 android:selectAllOnFocus="true"
。
如何做到这一点?
最佳答案
显式传递一个 Controller 和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,
);
});
关于flutter - 获得焦点时选择 TextField 内的所有文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344848/