EndUserViewModel? endUserViewModel;
@override
void initState() {
super.initState();
if(mounted){
loadEndUser();
}
}
loadEndUser() async {
WidgetsBinding.instance.addPostFrameCallback((_) async {
endUserViewModel = ref.read(endUserViewModelProvider.notifier);
await endUserViewModel?.fetchEndUser("[email protected]");
final endUser = endUserViewModel?.endUserList;
final endUserData = endUser?.first.name;
print(" DATA $endUser");
print("USER $endUserData");
});
}
我正在尝试使用
initState()
中的此函数从 API 获取数据,
但它显示错误-
E/flutter (14175): [错误:flutter/runtime/dart_vm_initializer.cc(41)] 未处理的异常:错误状态:在调用 `dispose` 后尝试使用 EndUserViewModel。
E/颤动(14175):
E/flutter (14175):考虑检查`mounted`。
我还在课堂上使用了
ConsumerStateful
并检查了安装,但它不起作用。
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) {
loadEndUser();
print("DATA ${endUserViewModel?.endUserList}");
print("USER ${endUserViewModel?.endUserList?.first.name}");
}
});
super.initState();
}
loadEndUser() async {
if (mounted) {
endUserViewModel = ref.read(endUserViewModelProvider.notifier);
await endUserViewModel?.fetchEndUser("[email protected]");
}
}
@override
void initState() {
WidgetsBinding.instance?.addPostFrameCallback((_) {
if (mounted) {
loadEndUser();
}
});
super.initState();
}
loadEndUser() async {
endUserViewModel = ref.read(endUserViewModelProvider.notifier);
await endUserViewModel?.fetchEndUser("[email protected]");
final endUser = endUserViewModel?.endUserList;
final endUserData = endUser?.first?.name;
print("DATA $endUser");
print("USER $endUserData");
}
您好,将 if (mounted) 检查移到 WidgetsBinding.instance.addPostFrameCallback() 回调中,这确保仅在小部件仍处于安装状态时才调用 loadEndUser() 方法。此检查是必要的,因为 addPostFrameCallback() 方法会安排在渲染帧后调用回调。如果在渲染框架之前卸载小部件,则不会执行回调。
@override
void initState() {
WidgetsBinding.instance?.addPostFrameCallback((_) {
if (mounted) {
loadEndUser();
}
});
super.initState();
}
loadEndUser() async {
endUserViewModel = ref.read(endUserViewModelProvider.notifier);
await endUserViewModel?.fetchEndUser("[email protected]");
if (mounted) {
final endUser = endUserViewModel?.endUserList;
final endUserData = endUser?.first?.name;
print("DATA $endUser");
print("USER $endUserData");
}
}
dragonpicari 是正确的,但一定要始终检查小部件在异步方法之后是否仍然安装。 但在这种情况下,后帧回调不是必需的,您可以在 initState() 中加载它。
您收到此错误是因为您从“endUserViewModel”中返回一些异步数据,并且您正在同步访问它(不等待数据返回)。你可以这样解决:::
loadEndUser() async {
WidgetsBinding.instance.addPostFrameCallback((_) async {
endUserViewModel = ref.read(endUserViewModelProvider.notifier);
// =========== CHANGES TO MADE ================
endUserViewModel.when(
error: (error, stackTrace) {
throw Exception("Error loading user profile");
},
loading: () {
print("Loading");
return;
},
data: (userData) {
print(useData);
},
);
});
}
这绝对会在 Sha Allah 中发挥作用