我有两个TextFields,我希望点击另一个小部件(按钮、容器、卡片)不会带走当前聚焦的TextField的焦点。我怎样才能获得关于哪个文本字段是当前焦点的信息?
Scaffold(
body: Container(
width: 250,
child: Column(children: [
TextField(
focusNode: _focusNode,
autofocus: true,
),
TextField(
focusNode: _secondFocusNode,
),
Focus(
child: OutlinedButton(
onPressed: () {
debugPrint('Has Focus: ${_focusNode.hasFocus}');
debugPrint(
'Has Primary Focus: ${_focusNode.hasPrimaryFocus}');
},
child: Center(child: Text('Click me!'))))
])))此外,当我专注于其中一个TextField时,我不知道为什么,但是如果我单击按钮,我得到:
发布于 2021-11-24 16:55:57
您可以跟踪当前的activeFocuseNode,并使用onTap选择TextFiled上的值,并再次召回FocusNode。
final List<FocusNode> _focusNodes = List.generate(2, (index) => FocusNode());
int activeFocuseNode = -1;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
width: 250,
child: Column(
children: [
TextField(
focusNode: _focusNodes[0],
autofocus: true,
onTap: () {
setState(() {
activeFocuseNode = 0;
});
},
),
TextField(
focusNode: _focusNodes[1],
onTap: () {
setState(() {
activeFocuseNode = 1;
});
},
),
Focus(
child: OutlinedButton(
onPressed: () {
debugPrint('Has Focus: ${_focusNodes[0].hasFocus}');
debugPrint(
'Has Primary Focus: ${_focusNodes[1].hasPrimaryFocus}');
if (activeFocuseNode >= 0) {
FocusScope.of(context)
.requestFocus(_focusNodes[activeFocuseNode]);
}
},
child: const Center(
child: Text('Click me!'),
),
),
)
],
),
),
);
}https://stackoverflow.com/questions/70098778
复制相似问题