[我正在使用Flutter制作应用程序,但发现了一个奇怪的行为,需要在一个小演示中重现:https://pastebin.com/ZJd2fnHK
目标是拥有一个TextField,当焦点对准时应选择整个文本。我是通过FocusNode实现的。
一切正常,直到我设置了Dismissible小部件以从列表中删除项目。由于某种原因(可能是绘图原因),整个页面都进行了重建,并且focusnode状态丢失了。
这非常有趣,因为仅当窗口小部件位于导航器推送的页面内时才会发生此问题。相同的小部件在根页面中也可以正常工作。
小部件如下:
Widget build(BuildContext context) {
textControllerA.text = "Hello";
textControllerB.text = "World";
return Column(children: [
Dismissible(
key: Key("potatoes"),
onDismissed: (direction) {},
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
child: TextField(
focusNode: focusNodeA,
controller: textControllerA,
),
padding: EdgeInsets.all(20),
),
],
),
),
Padding(
child: TextField(
focusNode: focusNodeB,
controller: textControllerB,
),
padding: EdgeInsets.all(20),
),
]);
}
也许我应该尝试将焦点的状态存储在状态中,但这会产生一些开销。或者,也许(可能)我做错了什么,在这种情况下,我希望获得一些指导。
欢呼声
您应该使用StatefulWidget并调用setState
onDismissed: (direccion) {
setState(() {
...
});