未处理的异常:在构造函数中调用了setState():ReserveMakingState#861c9(生命周期状态:已



我正在创建一个预订船只租赁的应用程序,但我很难解决这个问题,有人能帮我吗?提供代码样本:


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;
}
});
}
}

这个设置状态运行良好

.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
});
}

相关内容

  • 没有找到相关文章

最新更新