不管接受的答案是什么;有一些方法可以按照您要求的方式自定义 SimpleDialog。
尺寸
SimpleDialog 的宽度/高度会根据子级及其填充方式而增长。下面的代码将生成一个宽度为 336 高度为 300 的对话框:
showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
insetPadding: EdgeInsets.zero,
titlePadding: EdgeInsets.zero,
contentPadding: EdgeInsets.zero,
children: [
Container(
width: 300,
height: 300,
),
],
);
},
);
不确定添加到宽度上的 36 像素是多少;但这表明尺寸可以自定义。
角球
可以使用shape 属性自定义角。下面的代码显示了一个带有 4 像素圆边的绿色边框:
showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4.0),
side: BorderSide(
color: Colors.green,
),
),
/* ... */
);
},
);
位置
我发现我可以使用insetPadding 属性在页面上上下移动对话框。这定义了屏幕边缘和对话框之间所需的最小空间量。虽然有点麻烦,但如果你知道屏幕的大小和对话框的大小,你可以用一些简单的数学来微调对话框的位置。
假设屏幕高度为 1920 像素,对话框高度为 300 像素,以下代码应将对话框放置在距屏幕顶部边缘 100 像素的位置,而不是在中心位置:
showDialog(
context: context,
builder: (BuildContext context) {
return SimpleDialog(
insetPadding: EdgeInsets.only(bottom: 1520),
/* ... */
);
},
);
这是因为我要求屏幕底部边缘和对话框之间的最小填充;并且该规定下对话框存在的唯一位置是靠近顶部。