如何显示来自 ChangeNotifier 模型的对话框

Posted

技术标签:

【中文标题】如何显示来自 ChangeNotifier 模型的对话框【英文标题】:How to display a dialog from ChangeNotifier model 【发布时间】:2020-09-05 12:42:22 【问题描述】:

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


TL;DR:

有没有办法在ChangeNotifier 类中显示对话框?

【问题讨论】:

【参考方案1】:

即使您可以通过传递 BuildContext 来做到这一点,您也不应该这样做,因为您只会将您的 ChangeNotifier 耦合到特定情况。

假设这是你的模型:

class Model extends ChangeNotifier 
  bool _loading = false;

  bool get loading => _loading;

  void update(bool value) 
    _loading = value;
    notifyListeners();
  

也就是说,您正在使用以下按钮更新 loading 值:

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

您应该在此处自行执行您的逻辑,或者您可能正在项目中的其他地方收听此模型:

final model = Provider.of<Model>(context);

然后您应该通过检查来显示对话框:

if (model.loading) 
  // show dialog

【讨论】:

这实际上是它现在的设置方式。问题是显示对话框的调用失败 - 显然是因为上下文在调用时不可用(首先在构建方法中)。 是的,您不能在小部件呈现在屏幕上之前显示对话框。解决方案是在您的 initState 中使用 SchedulerBinding.instamce.addPostFraneCallback,然后调用您将在那里有 q 有效联系人的对话框。抱歉打错了,我此时正在使用电话。

以上是关于如何显示来自 ChangeNotifier 模型的对话框的主要内容,如果未能解决你的问题,请参考以下文章

ChangeNotifier 安装等效?

为啥 NotifyParser 的任何更改都不会使用 Provider / ChangeNotifier / Streambuilder 在 UI 中呈现,而是来自服务类

如何从 ChangeNotifier 导航?

如何关闭 ChangeNotifier Provider Flutter 中的函数

如何在 Navigator 中传递 ChangeNotifier?

如何在 ChangeNotifier 中使用 Futures?