如何显示来自 ChangeNotifier 模型的对话框
How to display a dialog from ChangeNotifier model
在我的项目中,当 ChangeNotifier
class 收到一个状态时,它会设置一个布尔值并调用 notifyListeners()
。在我的主要 build()
函数中,我然后检查挂起布尔值并相应地显示对话框 - 但我只能通过在构建方法中给它一个小延迟来显示对话框 - 似乎缺少上下文。
TL;DR:
有什么方法可以在 ChangeNotifier
class 中显示对话框?
即使您可以通过传递 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
}
在我的项目中,当 ChangeNotifier
class 收到一个状态时,它会设置一个布尔值并调用 notifyListeners()
。在我的主要 build()
函数中,我然后检查挂起布尔值并相应地显示对话框 - 但我只能通过在构建方法中给它一个小延迟来显示对话框 - 似乎缺少上下文。
TL;DR:
有什么方法可以在 ChangeNotifier
class 中显示对话框?
即使您可以通过传递 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
}