Flutter:将焦点放在刚刚添加的 TextField 上
Flutter: give focus to just added TextField
我需要关注刚刚创建的 TextField。
示例代码在这里:https://dartpad.dev/?id=1c84c70d956efde95fa12820c9afa4aa
class _TestPageState extends State<TestPage> {
List<TextEditingController> controllers = [
TextEditingController(text: 'field 0')
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView.builder(
itemCount: controllers.length,
itemBuilder: (context, index) => TextField(
controller: controllers[index],
autofocus: index == controllers.length - 1)),
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () {
setState(() {
controllers.add(
TextEditingController(text: 'field ${controllers.length}'));
});
},
),
);
}
}
在 dartpad 中运行良好,但在真实设备上运行不正常。
有什么建议说明它为什么不能在设备上运行以及如何实现吗?
谢谢
这样的话,你也可以创建List<FocusNode> _focusNodes = [];
,(根据列表添加一个FocusNode
)。
然后在最后一个焦点节点上添加和请求焦点。
onPressed: () {
setState(() {
controllers.add(
TextEditingController(text: 'field ${controllers.length}'));
_focusNodes.add(FocusNode());
});
_focusNodes.last.requestFocus();
},
我需要关注刚刚创建的 TextField。
示例代码在这里:https://dartpad.dev/?id=1c84c70d956efde95fa12820c9afa4aa
class _TestPageState extends State<TestPage> {
List<TextEditingController> controllers = [
TextEditingController(text: 'field 0')
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: ListView.builder(
itemCount: controllers.length,
itemBuilder: (context, index) => TextField(
controller: controllers[index],
autofocus: index == controllers.length - 1)),
),
floatingActionButton: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () {
setState(() {
controllers.add(
TextEditingController(text: 'field ${controllers.length}'));
});
},
),
);
}
}
在 dartpad 中运行良好,但在真实设备上运行不正常。
有什么建议说明它为什么不能在设备上运行以及如何实现吗? 谢谢
这样的话,你也可以创建List<FocusNode> _focusNodes = [];
,(根据列表添加一个FocusNode
)。
然后在最后一个焦点节点上添加和请求焦点。
onPressed: () {
setState(() {
controllers.add(
TextEditingController(text: 'field ${controllers.length}'));
_focusNodes.add(FocusNode());
});
_focusNodes.last.requestFocus();
},