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