首页 > 解决方案 > 如何控制来自提供者的对话?

问题描述

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

解决方案


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

https://pub.dev/packages/get

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

Get.dialog(SimpleAlertDialog());

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

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

推荐阅读