【发布时间】:2022-09-23 19:31:51
【问题描述】:
我正在尝试构建一个简单的登录屏幕。为此,我设置了一个StateProvider 来指示是否显示加载指示器:
final loginIsLoadingProvider = StateProvider<bool>((ref) => false);
当按下按钮时,我调用以下函数:
void logInUser(WidgetRef ref) async {
ref.read(loginIsLoadingProvider.notifier).state = true;
await Future.delayed(1.seconds); //login logic etc.
ref.read(loginIsLoadingProvider.notifier).state = false; //Exception
return;
但是在等待未来之后调用ref.read(...) 会引发以下异常:
FlutterError(查找已停用的小部件的祖先是不安全的。此时小部件的元素树的状态不再稳定。要在其 dispose() 方法中安全地引用小部件的祖先,请保存通过在小部件的 didChangeDependencies() 方法中调用dependOnInheritedWidgetOfExactType() 对祖先的引用。)
为什么我不能在异步间隙后调用
ref.read()?有没有办法做到这一点?
-
我发现在脚手架上添加
scaffoldKey = GlobalKey<ScaffoldState>();可以解决这个问题,但我觉得这应该没有必要......