我是 Flutter 的新手。我正在尝试学习 Dart 语法和 Flutter 结构和约定。这很有趣。我是 JS 开发人员,react,react native,node.js 基础。所以,我想我已经习惯了声明式结构和设计。
我正在使用提供商构建一个小型玩具项目。大多数全局变量和状态都处于全局状态并提供给整个应用程序。实际上,我的一个问题是打开一个对话框。我知道如何使用 showDialog()
方法打开对话框。但是,我想按提供商的状态打开它。例如。提供程序中的 isOpenCustomDialog 状态。
Widget build(BuildContext context) {
var isOpenCustomDialog = Provider.of<Store>(context).isOpenCustomDialog;
// it throws error
if(isOpenCustomDialog) showDialog( ... )
return ...
}
我尝试了几种方法,但没有收获,我想知道为此目的最好的约定是什么。
最佳答案
在方法构建中打开对话框或调用函数不是好的做法。那是因为 Flutter 可以随时重建,一个或多个 setState 可以触发副作用。 对您来说,一种可能更简单、更实用的方法是直接从您的提供者类调用您的对话,因为您依赖于它的状态。 您可以通过将您的上下文发送到您的类(class)来做到这一点(我认为这是一个丑陋的解决方案)或者简单地使用这个允许您从代码中的任何地方打开对话框的包,因为您不需要上下文。
因此在您的 Store 类中,您可以使用以下内容:
Get.dialog(SimpleAlertDialog());
但是,如果你只是想消除这个错误,也许观看构造结束调用对话框也可以帮助你:
Widget build(BuildContext context) {
SchedulerBinding.instance.addPostFrameCallback((_) {
if(isOpenCustomDialog) showDialog( ... )
});
关于flutter - 如何控制提供者的对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071575/