最近有幾個小伙伴在使用到showModalBottomSheet時經(jīng)常在群里問如何設(shè)置頂部圓角,于是乎激起了我的好奇心成福,我們先看下正常情況下用showModalBottomSheet設(shè)置圓角的話會怎么樣
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
height: 200,
width: double.infinity,
child: Center(child: Text("showModalBottomSheet")),
decoration: BoxDecoration(
color: Colors.blueAccent,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25),
topRight: Radius.circular(25),
),
),
);
},
);
可以看到topLeft
和topRight
雖然設(shè)置了圓角但是會漏出底部的背景色嚼酝,很尷尬房铭,不是我們想要的效果
在查看showModalBottomSheet的源碼時發(fā)現(xiàn)它使用了應(yīng)用主題的默認(rèn)亮度設(shè)置Brightness.light
并且菜單彈出時的遮罩顏色為Colors.black54
知道了以上這些,那怎么實現(xiàn)頂部圓角呢耍贾,上圖
代碼很簡單只需使用stack
在頂部的底層加上container
并將container
的顏色設(shè)置成菜單彈出時遮罩的顏色Colors.black54
即可
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Stack(
children: <Widget>[
Container(
height: 25,
width: double.infinity,
color: Colors.black54,
),
Container(
height: 200,
width: double.infinity,
child: Center(child: Text("showModalBottomSheet")),
decoration: BoxDecoration(
color: Colors.blueAccent,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(25),
topRight: Radius.circular(25),
),
),
),
],
);
},
);
這樣我們的頂部圓角就設(shè)置成功了
還有一種方法是直接修改MaterialApp
中brightness
為 Brightness.dark,
但是實用這種方法主題就變成了全黑色忠藤,不太實用挟伙。
以上就是設(shè)置showModalBottomSheet圓角的方法,這個不是最優(yōu)解模孩,只是暫時的實現(xiàn)了功能尖阔,如果小伙伴們有更好的辦法可以在評論告訴我 哈哈