问题描述
我正在实施这个产品应用,用户可以在其中从他的愿望清单中添加产品并将其添加到他们的购物车中。一旦用户点击添加到购物车按钮,我想从屏幕上删除产品并显示“成功”Snackbar
。
由于产品是从 FireBase Firestore 加载和显示的,我删除了该项目并调用 setState({});
以便更新屏幕上的列表。问题是紧跟在 SnackBar
之后的 setState({});
没有显示。
我认为这是因为小部件树被重建,所以当前状态和上下文“消失了”。
我尝试在网上查找一些信息,但没有找到任何有用的信息。我还尝试使用 bool
标志做出一种解决方法,一旦用户使用 setState
单击“添加到购物车”按钮,该标志将设置一次,以显示 {{ 1}} 当小部件树被重建,然后将标志重新关闭但它没有工作。
我错过了什么?如何在调用 SnackBar
后显示 SnackBar
?
这是我的代码:(问题行标有 setState({})
)
FIXME:
解决方法
就我而言,我在 build 方法完成构建小部件的过程之前调用了 setState
方法。
如果您在构建 error
完成之前显示 snack bar
或 alert
对话框以及在许多其他情况下,您可能会遇到此 method
。所以在这种情况下使用下面的回调函数。
WidgetsBinding.instance.addPostFrameCallback((_) {
// add your snackbar code here
});
或者你也可以使用 SchedulerBinding 来做同样的事情。
SchedulerBinding.instance.addPostFrameCallback((_) {
// add your code here of snackbar.
});
或者你也可以试试这个(我不确定这个)
if(mounted){
//add your code here of snackbar
}