我将从服务中获取的数据调用到 didChangeDependency 中以将其反射(reflect)在页面上。因为当我在 initState 中调用它时,我遇到了错误。无论如何,这不是我的主要问题。我的主要问题是当页面加载时,我得到了数据,但是当我想转到上一页时,我面临一个问题:
“未处理的异常:此小部件已被卸载,因此状态不再具有上下文(并且应被视为已失效)。”
“考虑在‘dispose’期间取消任何事件的工作,或使用‘mounted’ getter来确定状态是否仍然事件。”
根据我的研究,我应该在 if 状态下使用“mounted”。但这没有用。
我也尝试过这样的 if 语句:
@override
void setState(VoidCallback fn) {
if (mounted) {
super.setState(fn);
}
}
我的代码:
List<DetailObjects?> onOdemeDetay = [];
@override
void didChangeDependencies() {
super.didChangeDependencies();
OnOdemeListeClass().fetchList(context).then((value) {
final checkData = Provider.of<LoginInfo>(context, listen: false);
if (mounted) {
setState(() {
if (value != null && value.detailObjects != null) {
onOdemeDetay = value.detailObjects!;
checkData.updateLabel(onOdemeDetay[0]?.label);
checkData.updateValue(onOdemeDetay[0]?.value);
}
});
}
});
}
最佳答案
如果您想在转到上一页之前更新状态,则必须添加 2 秒的延迟,这意味着当用户按后退按钮时,首先会更新状态,然后用户将导航到上一页。
onPressed: () {
//First Update your state here
Future.delayed(Duration(seconds: 2)).then((value) {
//Code to navigate previous page
});
},
关于flutter - 错误 - 未处理的异常 : This widget has been unmounted,,因此状态不再具有上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75588667/