當(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了