代码之家  ›  专栏  ›  技术社区  ›  soupjake

是否可以禁用对话框上的阴影/覆盖?

  •  2
  • soupjake  · 技术社区  · 6 年前

    我想知道是否有一种方法可以禁用阴影/覆盖影响对话框?基本上,这样我可以得到一个对话框,就像它在图片右侧那样:

    我最好的尝试是使用一个包含我的自定义对话框的堆栈,然后切换为显示或不显示,但是我很难滚动每个自定义对话框的自己的列表视图而不弄乱另一个。我知道这违反了材料设计准则,但我正试图从dribble.com复制一个用户界面。

    谢谢!

    编辑:

    我通过编辑 showGeneralDialog 方法,但还有一个立面阴影:

    await showGeneralDialog(
        context: context,
        pageBuilder: (BuildContext buildContext,
            Animation<double> animation,
            Animation<double> secondaryAnimation) {
          return SafeArea(
            child: Builder(builder: (context) {
              return AlertDialog(
                 content: Container(
                     color: Colors.white,
                     width: 150.0,
                     height: 150.0,
                     child: Center(child: Text("Testing"))));
            }),
          );
        },
        barrierDismissible: true,
        barrierLabel: MaterialLocalizations.of(context)
            .modalBarrierDismissLabel,
        barrierColor: null,
        transitionDuration:
            const Duration(milliseconds: 150));
    

    编辑2:只是一张图片来说明上面代码的变化,显示我到目前为止已经能够禁用暗覆盖,但是对话框上仍然有我无法摆脱的高度:

    enter image description here

    编辑3:我想如果我能改变 AlertDialog 显示常规对话框 Builder 那我就可以让它工作了,但我很难装上 Material 但不会占据整个屏幕。

    1 回复  |  直到 6 年前
        1
  •  0
  •   soupjake    6 年前

    成功了!您必须在 Builder showGeneralDialog 方法以及设置 barrierColor null :

    enter image description here

    await showGeneralDialog(
      context: context,
      pageBuilder: (BuildContext buildContext,
          Animation<double> animation,
          Animation<double> secondaryAnimation) {
        return SafeArea(
          child: Builder(builder: (context) {
            return Material(
                color: Colors.transparent,
                child: Align(
                    alignment: Alignment.center,
                    child: Container(
                        height: 200.0,
                        width: 250.0,
                        color: Colors.white,
                        child:
                            Center(child: Text('Testing')))));
          }),
        );
      },
      barrierDismissible: true,
      barrierLabel: MaterialLocalizations.of(context)
          .modalBarrierDismissLabel,
      barrierColor: null,
      transitionDuration: const Duration(milliseconds: 150));