Flutter 如何显示ChangeNotifier模型中的对话框

Flutter 如何显示ChangeNotifier模型中的对话框,flutter,flutter-change-notifier,Flutter,Flutter Change Notifier,在我的项目中,当ChangeNotifier类收到一个状态时,它会设置一个布尔值并调用notifyListeners()。在我的主build()函数中,我检查挂起的布尔值并相应地显示对话框-但是我只能通过在build方法中给它一个小延迟来显示对话框-似乎缺少上下文 TL;医生: 有没有办法在变更通知程序类中显示对话框?即使您可以通过传递构建上下文来显示对话框,您也不应该这样做,因为您只会将变更通知程序耦合到特定情况 假设这是您的模型: class Model extends ChangeNot

在我的项目中,当
ChangeNotifier
类收到一个状态时,它会设置一个布尔值并调用
notifyListeners()
。在我的主
build()
函数中,我检查挂起的布尔值并相应地显示对话框-但是我只能通过在build方法中给它一个小延迟来显示对话框-似乎缺少上下文


TL;医生:


有没有办法在
变更通知程序
类中显示对话框?

即使您可以通过传递
构建上下文
来显示对话框,您也不应该这样做,因为您只会将
变更通知程序
耦合到特定情况

假设这是您的模型:

class Model extends ChangeNotifier {
  bool _loading = false;

  bool get loading => _loading;

  void update(bool value) {
    _loading = value;
    notifyListeners();
  }
}
也就是说,您正在使用以下命令更新按钮上的
加载
值:

final model = Provider.of<Model>(context, listen: false);
model.update(true);

这实际上是它现在的设置方式。问题是显示对话框的调用失败-显然是因为调用时上下文不可用(首先在构建方法中)。是的,在窗口小部件在屏幕上呈现之前,您无法显示对话框。解决方案是在initState中使用SchedulerBinding.instamce.addPostFraneCallback,然后调用dialogz,您将在那里获得有效的联系人。对不起,我现在正在用电话。
final model = Provider.of<Model>(context);
if (model.loading) {
  // show dialog
}