【问题标题】:flutter: Dialog not dismiss with tap when changed it's default position颤动:更改默认位置时,对话框不会通过点击关闭
【发布时间】:2021-03-17 12:44:22
【问题描述】:

我试图在页面的bottomCenter 处显示一个对话框。所以为了做到这一点,我将Align 添加到我的自定义小部件中。现在对话框显示在正确的位置。

 Dialog(
    shape: RoundedRectangleBorder(
      borderRadius: BorderRadius.circular(5.0),
    ),
    elevation: 0,
    backgroundColor: Colors.transparent,
    insetPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 30.0),
    child: Align(
      alignment: Alignment.bottomCenter,
      child: Stack(
        children: [
          Container(...

问题是:

现在我将 true 设置为barrierDismissible 因为我希望用户在点击屏幕时关闭对话框,但是由于对话框位置在底部,所以当点击屏幕顶部时对话框不会关闭?当在自身周围被轻拍时它会被解散。 我该如何解决这个问题?

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    看起来您将内容向下推,这意味着顶部的空白空间不是障碍。 可以选择将 Align 包装在 GestureDetector 中并通过调用 Navigator.pop (context) 来处理点击;

    【讨论】:

      【解决方案2】:

      根据greengo的解决方案几乎没有改变,我将我的对话框更改为:

        GestureDetector(
          onTap: () => Navigator.pop(context),
          child: Dialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(5.0),
            ),
            elevation: 0,
            backgroundColor: Colors.transparent,
            insetPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 30.0),
            child: Align(
              alignment: Alignment.bottomCenter,
              child: Stack(
                children: [
                  Container(...
      

      现在我可以在点击屏幕时关闭对话框。

      【讨论】:

        【解决方案3】:

        如果 greengo 的解决方案不起作用,您可以向页面添加一个布尔值(作为 statefulWidget),在打开对话框时将其设置为 true 并在 Scaffold 上添加一个 onTap 事件。如果此布尔变量等于 true(打开对话框),则调用 Navigator.pop(context)。

        【讨论】:

        • 我根据greengo的解决方案添加答案,几乎没有变化
        猜你喜欢
        • 2018-09-15
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多