flutter - 如何控制提供者的对话?

标签 flutter

我是 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)来做到这一点(我认为这是一个丑陋的解决方案)或者简单地使用这个允许您从代码中的任何地方打开对话框的包,因为您不需要上下文。

https://pub.dev/packages/get

因此在您的 Store 类中,您可以使用以下内容:

Get.dialog(SimpleAlertDialog());

但是,如果你只是想消除这个错误,也许观看构造结束调用对话框也可以帮助你:

Widget build(BuildContext context) {
SchedulerBinding.instance.addPostFrameCallback((_) {
 if(isOpenCustomDialog) showDialog( ... )
});

关于flutter - 如何控制提供者的对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61071575/

相关文章:

flutter OpenContainer问题

css - flutter 相当于关闭 CSS 背景过滤器 : blur(20px) saturation(180%)

flutter - Dart 删除方括号并添加单引号

regex - 正则表达式在imap响应中获取文件的base64字符串

flutter - Flutter中的Singleton提供运行时错误 “Unhandled Exception: Reading static variable ' _instance @ 54532459 4' during its initialization”

flutter - 如何使用共享首选项保存 bool 值

flutter - 'Future<String>' 的实例而不是显示值

http - flutter http header

flutter - 如何在flutter中创建子菜单下拉菜单

flutter - 引发了另一个异常:RenderFlex在Flutter的右侧溢出了265个像素