我试图更新initState函数中的通知程序,但出现错误:
FlutterError(试图在构件树构建时修改提供程序
然后它给出了这样做的建议:
延迟修改,例如将修改封装到Future(() {...})
中。
我不知道该怎么做。我看了FutureProvider文档,但我不确定这是我想要的。
我有一个我正在使用的ConsumerStatefulWidget类。所有代码都在ConsumerState类中。下面是我使用的代码:
getCurrentCompanyProfile() async {
if (ref.read(globalsNotifierProvider).companyId == null ||
ref.read(globalsNotifierProvider).companyId == "") {
ref.read(globalsNotifierProvider.notifier).updatenewCompany(true); <<< ERROR HERE
agencyNameController.text = "";
address1Controller.text = "";
address2Controller.text = "";
cityController.text = "";
stateController.text = "";
zipController.text = "";
cellPhoneController.text = "";
officePhoneController.text = "";
emailController.text = "";
websiteController.text = "";
} else {
final DocumentSnapshot currentAgencyProfile = await companyRef
.doc(ref.read(globalsNotifierProvider).companyId)
.get();
// existing record
// Updates Controllers
agencyNameController.text = currentAgencyProfile["name"] ?? "";
address1Controller.text = currentAgencyProfile['address1'] ?? "";
address2Controller.text = currentAgencyProfile['address2'] ?? "";
cityController.text = currentAgencyProfile['city'] ?? "";
stateController.text = currentAgencyProfile['state'] ?? "";
_currentCompanyState = currentAgencyProfile['state'] ?? "";
zipController.text = currentAgencyProfile['zipCode'].toString() ?? "";
cellPhoneController.text = currentAgencyProfile['cellPhone'] ?? "";
officePhoneController.text = currentAgencyProfile['officePhone'] ?? "";
emailController.text = currentAgencyProfile['email'] ?? "";
websiteController.text = currentAgencyProfile['website'] ?? "";
}
}
这是我调用getCurrentCompanyProfile的地方:
@override
void initState() {
getCurrentCompanyProfile();
super.initState();
_dropDownState = getDropDownState();
_currentCompanyState = _dropDownState[0].value;
}
我怎样才能在小部件树构建好之后更新通知程序呢?
谢谢
1条答案
按热度按时间qyuhtwio1#
作为一个快速解决方案,你可以把你的修改放在这个回调里面: