當(dāng)手機(jī)橫屏?xí)r,在側(cè)面彈出不全屏的dialog后,需要在dialog中顯示SnackBar時(shí),發(fā)現(xiàn)除了dialog中會(huì)顯示SnackBar,底下一層也會(huì)重復(fù)顯示一個(gè)SnackBar,現(xiàn)在要去掉底下一層那個(gè)顯示。
首先顯示SnackBar需要Scaffold.
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: TextButton(
child: const Text('顯示消息'),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('顯示SnackBar')));
},
),
),
);
以上代碼就可以顯示一個(gè)SnackBar消息
但是在橫屏側(cè)邊非全屏dialog中會(huì)發(fā)現(xiàn)底部有重復(fù)的顯示。
要去掉底部那個(gè)SnackBar,首先要使用自己界面的Scaffold的context
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(
builder: (context) {
return Center(
child: TextButton(
child: const Text('顯示消息'),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('顯示SnackBar')));
},
),
);
}
),
);
如上面代碼所示,加一層Builder嵌套可以讓下面使用的是當(dāng)前Scaffold的context,但是此時(shí)運(yùn)行發(fā)現(xiàn)還是會(huì)有底部一層的SnackBar顯示,這個(gè)時(shí)候需要通過ScaffoldMessenger來做隔斷,如下
@override
Widget build(BuildContext context) {
return ScaffoldMessenger(
child: Scaffold(
body: Builder(
builder: (context) {
return Center(
child: TextButton(
child: const Text('顯示消息'),
onPressed: () {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('顯示SnackBar')));
},
),
);
}
),
),
);
使用ScaffoldMessenger嵌套以后就可以將SnackBar顯示限定在當(dāng)前的Scaffold中,這樣底部就不會(huì)再顯示SnackBar了