Flutter对话框关闭监听器

时间:2020-08-27 18:20:27

标签: flutter

Future<int> _show() async {
  return await showDialog<int>(
    context: context,
    builder: (_) {
      return AlertDialog(
        actions: [
          RaisedButton(
            onPressed: () => Navigator.pop(context, 1), // returning 1
            child: Text('1'),
          ),
          RaisedButton(
            onPressed: () => Navigator.pop(context, 2), // returning 2
            child: Text('2'),
          ),
        ],
      );
    },
  );
}

我将此函数称为:

int value = await _show();

当用户在对话框外点击以将其关闭时,问题就来了。在这种情况下,以上value返回null。如果发生这种情况,我想返回0。我拥有的解决方案是:

  • 设置我不想做的barrierDismissible: false
  • 我可以检查value是否为空,并通过单击外部区域来推断该对话框已关闭。

但是除了这些之外,还有什么更好的方法或任何对话框可禁用的侦听器,如果通过轻按外部区域来关闭对话框而无法返回Navigator.pop(0),则是这样的:

showDialog(
  context: context,
  onDialogDismissed: () {
    Navigator.pop(0);
  }
);

1 个答案:

答案 0 :(得分:0)

我不认为您想要的东西存在。我认为最接近优雅期望的是:

Future<int> _show() async {
  return await showDialog<int>(
    context: context,
    builder: (_) {
      return AlertDialog(
        actions: [
          RaisedButton(
            onPressed: () => Navigator.pop(context, 1), // returning 1
            child: Text('1'),
          ),
          RaisedButton(
            onPressed: () => Navigator.pop(context, 2), // returning 2
            child: Text('2'),
          ),
        ],
      );
    },
  ) ?? 0;
}