我对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 ...
}
我尝试了几种方法,但没有收获,我想知道什么是最好的公约,为这一目的。
1条答案
按热度按时间6mzjoqzu1#
在方法构建中打开对话框或调用函数不是好的做法。这是因为Flutter可以在任何时候重建,一个或多个setState可能会触发副作用。一种可能更简单、更实用的方法是直接从提供程序类调用对话框,因为您依赖于状态来实现此操作。你可以通过把你的上下文发送到你的类来实现这一点(我认为这是一个丑陋的解决方案),或者简单地使用这个包,它允许你从代码中的任何地方打开对话框,因为你不需要上下文。
https://pub.dev/packages/get
因此,在Store类中,您可以使用以下内容:
但是,如果你只是想删除这个错误,也许观察构造的结束来调用对话框也会对你有所帮助: