【发布时间】:2019-11-29 05:10:59
【问题描述】:
我是 dart/flutter 的新手,在理解沟通模式方面有点困难。
一个反复出现的问题是,我一直希望在小部件上公开一个公共方法,以便其他小部件可以调用它。
问题在于有状态的小部件。在这些情况下,我需要调用小部件状态来完成实际工作。
问题是小部件没有状态副本。 我一直在小部件中保存状态的副本,但这当然会引发警告,因为它会使小部件可变。
让我举一个具体的例子:
我有一个专门的菜单,它可以有一组菜单项。 每个都是有状态的。
当菜单关闭时,它需要遍历它拥有的菜单项列表并告诉每个菜单项隐藏(菜单项在菜单中不可见,因此隐藏菜单不起作用)。
所以菜单有如下代码:
class Menu{
closeMenu() {
for (var menuItem in menuItems) {
menuItem.close();
}
}
这样可以正常工作,但当然在 MenuItem 类中我需要:
class MenuItem {
MenuItemState state;
close()
{
state.close();
}
当然,将状态对象存储在 MenuItem 中是一个问题,因为 MenuItem 是不可变的。 (这只是一个警告,因此代码可以正常工作,但它显然不是预期的设计模式)。
【问题讨论】:
-
使 MenuItemState 状态;作为最终变量,如最终 MenuItemState 状态;将删除您的不可变警告
-
考虑使用 GlobalKey 从另一个小部件访问状态 (stackoverflow.com/questions/46542768/…)