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:在 Navigation.pop 上刷新父小部件
每 5 分钟或定期刷新 Flutter Text 小部件内容