在setState()内部调用提供程序自定义方法导致错误:或在生成期间调用了markNeedsBuild()



我有一个flutter小部件状态类,如下所示。我在initState((中调用Provider.of<AppData>(context, listen: false).recalculateCart();

当我运行时,我得到的错误是在构建过程中调用的setState((或markNeedsBuild((

我应该如何解决这些问题?

class CartPageState extends State<CartPage> {
final TextEditingController _couponController = TextEditingController();
@override
void initState() {
// TODO: implement initState
super.initState();
Provider.of<AppData>(context, listen: false).recalculateCart();
}

@override
Widget build(BuildContext context) {
if (Provider.of<AppData>(context, listen: false).selectedStoreId == null){
Provider.of<AppData>(context, listen: false).setPageAfterStoreSelection('cart');
return ChooseStorePage(title: 'Choose Store to Continue');
}
...
}

此外,这里还有recomputeCart((函数:

void recalculateCart() {
notifyListeners();
}

问题是,当实际构建尚未完成时,会进行重新构建,因此您可以将函数放入addPostFrameCallback方法中,以便在第一次构建完成后执行该函数,请尝试下一次:

@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
Provider.of<AppData>(context, listen: false).recalculateCart();
});
}

最新更新