我有一个TextField
,它从一开始就带有默认文本。我希望在TextField
获得焦点时将光标放置在现有文本的末尾(可能条件是该文本不应已经从默认文本中被修改)。
我尝试设置controller.selection
无效。我也尝试使用FocusNode
:
focusNode: FocusNode()..addListener((){
if( !record.isCommentModified )
record.textEditingController.selection = TextSelection.collapsed(offset: record.comment.length);
})
它确实有效,但是副作用是多个文本字段看起来好像它们同时具有焦点。我该如何预防?甚至更好,是否有更好的方法来实现我想要的?
答案 0 :(得分:0)
如果在 TextField
上设置了值,则默认情况下,光标在获得焦点时位于文本/值的末尾。如果您遇到的行为有所不同,请告诉我。
TextFields 需要有单独的 FocusNode
。由于您将单个 FocusNode 用于多个,因此一旦聚焦一个 TexField,似乎有多个聚焦的 TextField。
至于跟踪哪个 TextField
包含文本,还需要单独的 TextEditingController
。我可以建议的是为 TextFields 创建一个 FocusNode
和 TextEditingController
列表。
late List<FocusNode> focusNodeList;
late List<TextEditingController> textController;
@override
void initState() {
super.initState();
// Initialize both List
textController = List<TextEditingController>.generate(
length, (index) => TextEditingController());
focusNodeList = List<FocusNode>.generate(length, (index) {
var focusNode = FocusNode();
focusNode.addListener(() {
// Do something
});
return focusNode;
});
}
并将它们设置在您的 TextField
TextField(
controller: textController[0],
focusNode: focusNodeList[0],
),
TextField(
controller: textController[1],
focusNode: focusNodeList[1],
),
...