Flutter 在重新创建 Widget 时重置 StatefulWidget 状态

Sca*_*aux 3 widget flutter statefulwidget

在我的 Flutter Widget 中,我有一个StreamBuilder检查snapshot.hasError并在这种特定情况下它将返回我的ErrorRetryWidget().

builder: (context, AsyncSnapshot<MyObject> snapshot) {
...
    if (snapshot.hasError) {
        return ErrorRetryWidget();
    }
}
Run Code Online (Sandbox Code Playgroud)

ErrorRetryWidget()只是示出了一个错误消息,并且在重试按钮。当您按下此按钮时,我会用进度指示器替换按钮文本。因此,我需要使这个小部件有状态,因为它的状态包含一个isRetrying我在 中设置为 false的变量,initState然后在按下后设置为 true。

当按下按钮时,ErrorRetryWidget通过 a 告诉父级VoidCallback重新触发流逻辑。它运作良好,但问题是如果错误再次出现,我StreamBuilderErrorRetryWidget再次“返回” 。

构造函数被称为新时间,但不是initState。我怎样才能做到每次重新创建小部件时都会重置状态?因此,isRetrying已经(或仍然)设置为 true。

我找到的唯一快速解决方案是在我的错误小部件中实现它:

@override
void didUpdateWidget(covariant oldWidget) {
    super.didUpdateWidget(oldWidget);
    setState(() {
        retrying = false;
    });
  }
Run Code Online (Sandbox Code Playgroud)

不确定这是一个好习惯。

use*_*111 5

传递一个唯一的键,让它创建一个新的小部件。

if (snapshot.hasError) {
    return ErrorRetryWidget(key: UniqueKey());
}
Run Code Online (Sandbox Code Playgroud)