如何从 Flutter 中的方法获取 AlertDialog 回调?

Posted

技术标签:

【中文标题】如何从 Flutter 中的方法获取 AlertDialog 回调?【英文标题】:How to get AlertDialog Callback from method in Flutter? 【发布时间】:2019-12-09 21:42:32 【问题描述】:

我在静态方法中有AlertDialog,因为我想在用户点击OK 按钮时获得回调。

我尝试使用typedef,但无法理解。

以下是我的代码:

class DialogUtils

  static void displayDialogOKCallBack(BuildContext context, String title,
      String message)
  
    showDialog(
      context: context,
      builder: (BuildContext context) 
         return AlertDialog(
          title: new Text(title, style: normalPrimaryStyle,),
          content: new Text(message),
          actions: <Widget>[
            new FlatButton(
              child: new Text(LocaleUtils.getString(context, "ok"), style: normalPrimaryStyle,),
              onPressed: () 
                Navigator.of(context).pop();
                // HERE I WANTS TO ADD CALLBACK
              ,
            ),
          ],
        );
      ,
    );
  

【问题讨论】:

【参考方案1】:

您可以通过点击OK 来等待对话框被关闭返回 null 或关闭,在这种情况下,将返回true

class DialogUtils 
  static Future<bool> displayDialogOKCallBack(
      BuildContext context, String title, String message) async 
    return await showDialog<bool>(
      context: context,
      builder: (BuildContext context) 
        return AlertDialog(
          title: new Text(title, style: normalPrimaryStyle,),
          content:  Text(message),
          actions: <Widget>[
             FlatButton(
              child:  Text(LocaleUtils.getString(context, "ok"), style: normalPrimaryStyle,),
              onPressed: () 
                Navigator.of(context).pop(true);
                // true here means you clicked ok
              ,
            ),
          ],
        );
      ,
    );
  

然后当您调用displayDialogOKCallBack 时,您应该await 获取结果

例子:

onTap: () async 
  var result =
  await DialogUtils.displayDialogOKCallBack();

  if (result) 
   // Ok button is clicked
  

【讨论】:

我想你的意思是 if (result == true) // Ok button is clicked true 而不是 false 表示点击ok按钮。【参考方案2】:

然后为Future工作回调函数:

  DialogUtils.displayDialogOKCallBack().then((value) 
  if (value) 
   // Do stuff here when ok button is pressed and dialog is dismissed. 
  
);

【讨论】:

以上是关于如何从 Flutter 中的方法获取 AlertDialog 回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何从flutter中的firestore文档字段中获取数据?

如何从 Flutter 中的 Firebase 实时数据库中按 categoryId 获取产品?

如何使用 Flutter 从 Firebase 中的两个集合中获取数据

如何从 Flutter 中的 JSON 文件中获取所有命令 id?

如何在flutter中调用initState中的异步方法

如何从 Flutter 中的 Firebase 的 UID 获取任何用户的电子邮件? [复制]