【发布时间】:2019-10-19 01:49:28
【问题描述】:
我有一个基于枚举值返回两个有状态小部件之一的方法。但是,即使我可以通过调试器看到正在返回“正确”小部件,UI 也只显示第一个呈现的小部件。似乎状态对象以某种方式在小部件的不同实例之间共享,或者我错过了一些东西。
Widget _buildInfoCard(LoginStatus status) {
switch(status) {
case LoginStatus.LOGIN_FAILED:
return InfoCard("Login failed, please check your username and password.");
default:
return InfoCard("Please login with your username and password");
}
}
我希望显示的信息卡的文本与返回的信息卡的文本相对应,但默认情况下始终存在。我已经单步执行了代码,返回了正确的小部件,之后没有返回默认小部件,所以应该显示,但没有。
编辑: _buildInfoCard 方法在流构建器内部被调用。
【问题讨论】:
-
您是否在应该进行切换后的任何地方调用了 setState?
-
这可能是由于滥用
StatefulWidget造成的。要么你需要didUpdateWidget,要么你爱上了stackoverflow.com/questions/50818770/… -
@RémiRousselet 我确实这样做了,谢谢分享。老实说,这些应该是无状态的小部件,我现在明白了。不过,我想了解为什么这不起作用。为什么要创建一个新的小部件实例,导致它从一个完全不同的小部件继承状态?它们不应该是内存中不同的对象,还是这里有某种我不明白的颤动魔法?