【发布时间】:2019-07-10 13:43:29
【问题描述】:
我正在使用 Flutter 制作一个应用程序,我发现了一个奇怪的行为,我必须在一个小演示中重现:https://pastebin.com/ZJd2fnHK
目标是有一个 TextField ,当处于焦点时应该选择整个文本。我通过 FocusNode 实现了这一点。
一切正常,直到我设置了 Dismissible 小部件以从列表中删除项目。由于某种原因(可能是绘图),整个页面进行了重建,并且焦点节点状态丢失。
这很有趣,因为该问题仅在小部件位于已由导航器推送的页面内时发生。相同的 Widget 在根 Page 中也能正常工作。
小部件如下:
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),
),
]);
}
也许我应该尝试将焦点状态存储在 state 中,但这会产生一些开销。或者也许(可能)我做错了什么,在这种情况下,我很想得到一些指导。
干杯
【问题讨论】: