flutter 如何控制来自提供程序的对话?

wgeznvg7  于 2023-06-07  发布在  Flutter
关注(0)|答案(1)|浏览(222)

我对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 ...
}

我尝试了几种方法,但没有收获,我想知道什么是最好的公约,为这一目的。

6mzjoqzu

6mzjoqzu1#

在方法构建中打开对话框或调用函数不是好的做法。这是因为Flutter可以在任何时候重建,一个或多个setState可能会触发副作用。一种可能更简单、更实用的方法是直接从提供程序类调用对话框,因为您依赖于状态来实现此操作。你可以通过把你的上下文发送到你的类来实现这一点(我认为这是一个丑陋的解决方案),或者简单地使用这个包,它允许你从代码中的任何地方打开对话框,因为你不需要上下文。

  • (免责声明:我发布了这个包)*

https://pub.dev/packages/get
因此,在Store类中,您可以使用以下内容:

Get.dialog(SimpleAlertDialog());

但是,如果你只是想删除这个错误,也许观察构造的结束来调用对话框也会对你有所帮助:

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

相关问题