flutter - 未处理的异常:在构造函数中调用 setState():ReservationMakingState#861c9(生命周期状态:已创建,无小部件,未安装)
问题描述
我正在创建一个用于预订船只租赁的应用程序,但我很难解决这个问题,any1 可以提供帮助吗?提供代码示例:
if (docs.size == 0) {
reservations.doc(resID).set({
'resID': resID,
'name': name,
"surname": surname,
"phoneNumber": phoneNumber,
"rental": ProductCardInCart.rental,
'boat': ProductCardInCart.boat,
'date': date,
'time': time
}).then((value) {
print("Reservation made");
setState(() {
Body.empty = true;
});
}).catchError((error) => print("Failed to reservate: $error"));
} else if (docs.size != 0) {
setState(() {
Body.empty = false;
});
print('jestjus');
}
});
} else {
return;
}
});
}
}
这个 setstate 运行良好
.then((value) {
print("Reservation made");
setState(() {
Body.empty = true;
});
但这个不是,它的抛出异常
} else if (docs.size != 0) {
setState(() {
Body.empty = false;
});
print('jestjus');
}
它抛出的错误:
7980): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: setState() called in constructor: ReservationMakingState#861c9(lifecycle state: created, no widget, not mounted)
E/flutter ( 7980): This happens when you call setState() on a State object for a widget that hasn't been inserted into the widget tree yet. It is not necessary to call setState() in the constructor, since the state is already assumed to be dirty when it is initially created.
提前感谢您的帮助
解决方案
您setState
不工作的原因是您的小部件仍在构建中。在小部件完成第一次构建之后,它才能更新。
这个工作的原因
.then((value) {
print("Reservation made");
setState(() {
Body.empty = true;
});
});
是因为它发生在未来之后.then(() {});
如果您希望在初始设置后重建您的小部件,您可以使用
小心使用它。如果您在构建方法中使用它,您将陷入循环!您应该在initState
方法中使用它或在运行之前有一些条件语句
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
//do something call your set state here
});
}
推荐阅读
- typescript - 我该如何改进呢?使用打字稿
- visual-studio-code - 我可以在使用 Visual Studio Code 项目资源管理器定义的文件下查看成员吗?
- android - 带有 Admob 中介的 Facebook 广告显示“无法优化”
- c++ - 为什么 fstream 的读写功能会在我的程序中的两个不同点导致错误?
- mongodb - Vuejs 使用 Axios 拖动排序项并保存到 mongoDB
- javascript - 带有日期选择器的自动完成框,无需选择日期
- reactjs - 如何在 i18n 中处理不同国家/地区的相同语言?
- javascript - 单击输入标签时反转两种 React 组件文本颜色
- java - 创建 EntityManagerFactory 时出现 ArrayIndexOutOfBoundsException
- javascript - Apache2 + Socket.io 反向代理:正确的方法