Flutter 刷新状态小部件

Posted

技术标签:

【中文标题】Flutter 刷新状态小部件【英文标题】:Flutter Refreshing Stateful widget 【发布时间】:2020-11-28 01:50:21 【问题描述】:

我有一个有状态的类,显示列表如下:

            Container(
                margin: const EdgeInsets.fromLTRB(50.0, 10.0, 15.0, 10.0),
                height: 190,
                width: 100,
                child: ListView.builder(
                    itemCount: gameManager.yourScoresList.length,
                    itemBuilder: (context, index) 
                      return ListTile(
                        visualDensity: VisualDensity(
                            vertical: VisualDensity.minimumDensity),
                        title: gameManager.yourScoresList[index],
                      );
                    ))

但是,当我从另一个类 (GameManager) 中清除 yourScoresList.clear() 时,ListView 不会被清除(即继续显示现有),直到我在 Stateful 类中选择另一个小部件,该小部件实现了 setState()。 我试图将 ListView 包装在 ValueListenableBuilder 中,但我无法让它工作。任何建议都非常感谢。

【问题讨论】:

您必须从其他班级致电setState 【参考方案1】:

正如 Christopher Moore 所说,您必须在该类中设置状态,例如,

void clearbox()

setState(()

yourScoresList.clear();

);

如果你的另一个类中没有 StateFulWidget,那么就这样做,

在你的 StateFulWidget 中,(当前类,你有 listView)

添加此功能,

void clear()
setState(()
gameManager.yourScoresList.clear();
);


调用这个函数,每当你想清除列表时,你甚至可以从你拥有列表的另一个类中调用它。

【讨论】:

但是 setState() 没有在我的调用类中定义? 实际上,您正在使用一个扩展 StateFulW 的类,因此它确实有。只需复制并粘贴代码即可。 我已经更新了我的答案,您现在可以清除列表,即使是您的其他班级,只需从该班级调用此函数即可。如果有帮助,请投票并接受这个答案:) 如果我在我的 StatefulWidget 中包含 clear() 方法,它会说 setState() 对于这种类型是未定义的: 类 ComputerPlay 扩展 StatefulWidget void clear() setState(() gameManager.yourScoresList.clear(); ); @override _ComputerPlayState createState() => _ComputerPlayState();

以上是关于Flutter 刷新状态小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何在按钮单击 FLUTTER 上刷新列表小部件数据

从无状态小部件调用有状态小部件的 setState

Flutter:在 Navigation.pop 上刷新父小部件

每 5 分钟或定期刷新 Flutter Text 小部件内容

为啥当我在其小部件中调用 Flutter 有状态小部件时,它没有改变另一个有状态小部件的状态

如何从有状态小部件类 Flutter 访问小部件状态