在我的 Flutter 小部件中,我有一个StreamBuilder
检查snapshot.hasError
,在这种特定情况下,它将返回我的ErrorRetryWidget()
.
builder: (context, AsyncSnapshot<MyObject> snapshot) {
...
if (snapshot.hasError) {
return ErrorRetryWidget();
}
}
只是显示ErrorRetryWidget()
一条错误消息和一个重试按钮。当您按下此按钮时,我将按钮文本替换为进度指示器。因此我需要使这个小部件有状态,因为它的状态包含一个isRetrying
我在 中设置为 false 的变量,initState
然后在按下后设置为 true。
按下按钮时,ErrorRetryWidget
通过 a 告诉父VoidCallback
级重新触发流逻辑。它运作良好,但问题是如果错误再次出现,我StreamBuilder
将ErrorRetryWidget
再次“返回”。
构造函数被称为新时间,但不是initState
。我怎样才能让它在每次重新创建小部件时重置状态?因此,isRetrying
已经(或仍然)设置为 true。
我发现的唯一快速解决方案是在我的错误小部件中实现这一点:
@override
void didUpdateWidget(covariant oldWidget) {
super.didUpdateWidget(oldWidget);
setState(() {
retrying = false;
});
}
不确定这是一个好习惯。