gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:56:16 25 4
gpt4 key购买 nike

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

builder: (context, AsyncSnapshot<MyObject> snapshot) {
...
if (snapshot.hasError) {
return ErrorRetryWidget();
}
}
ErrorRetryWidget()只显示错误消息和重试按钮。当您按下此按钮时,我会用进度指示器替换按钮文本。因此我需要让这个小部件有状态,因为它的状态包含 isRetrying我在 initState 中设置为 false 的变量,然后在按下后变为真。

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

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

我找到的唯一快速解决方案是在我的错误小部件中实现它:
@override
void didUpdateWidget(covariant oldWidget) {
super.didUpdateWidget(oldWidget);
setState(() {
retrying = false;
});
}

不确定这是一个好习惯。

最佳答案

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

if (snapshot.hasError) {
return ErrorRetryWidget(key: UniqueKey());
}

关于Flutter 在重新创建 Widget 时重置 StatefulWidget 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62332971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com