Flutter Dismissible导致在顶部导航时不必要的重画

问题描述 投票:0回答:1

[我正在使用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),
      ),
    ]);
  }

也许我应该尝试将焦点的状态存储在状态中,但这会产生一些开销。或者,也许(可能)我做错了什么,在这种情况下,我希望获得一些指导。

欢呼声

flutter flutter-layout
1个回答
-1
投票

您应该使用StatefulWidget并调用setState

 onDismissed: (direccion) {
      setState(() {
          ...
      });
© www.soinside.com 2019 - 2024. All rights reserved.