Flutter snackbar 在 SnackBarAction onPressed 上解散
Flutter snackbar dismiss on SnackBarAction onPressed
我想关闭 SnackBar
SnackBarAction
的 onPressed
方法。我尝试使用 Navigator.of(context).pop();
,但 SnackBar
并没有关闭我的屏幕,而是变黑了。
代码如下:
void showInSnackBar(String value) {
homeScaffoldKey.currentState.showSnackBar(new SnackBar(content: new Text(value),
action: SnackBarAction(
label: 'Dissmiss',
textColor: Colors.yellow,
onPressed: () {
// Navigator.of(context).pop();
},
),));
}
尝试使用hideCurrentSnackBar
方法
onPressed: () {
homeScaffoldKey.currentState.hideCurrentSnackBar();
},
更多信息在这里:https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html
你也可以使用,
Scaffold.of(context).hideCurrentSnackBar();
使用上下文时要小心,使用正确的上下文。
注意
在新的Flutter版本中,该方法已弃用。
因此使用
ScaffoldMessenger.of(context).hideCurrentSnackBar();
如果你想替换只显示一次的 snackbar,
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final snackBar = SnackBar(content: Text("Hello, world"));
还有,
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
还有,
onPressed: () {
_scaffoldKey.currentState.removeCurrentSnackBar();
_scaffoldKey.currentState.showSnackBar(snackBar);
}
ScaffoldMessenger.of(上下文).hideCurrentSnackBar();
Scaffold.of(上下文).hideCurrentSnackBar();
上面的方法以前用过但是,
ScaffoldMessenger.of(上下文).hideCurrentSnackBar();
现在推荐这个。
您也可以在没有任何键的情况下显示和关闭这样的小吃店
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Hello from snackbar!'),
action: SnackBarAction(
label: 'Dissmiss',
textColor: Colors.yellow,
onPressed: () {
ScaffoldMessenger.of(context).hideCurrentSnackBar();
},
),
),
);
定义你的SnackBar
:
var snackBar = SnackBar(content: Text('Hello World'));
显示一下:
ScaffoldMessenger.of(context).showSnackBar(snackBar);
隐藏:
ScaffoldMessenger.of(context).hideCurrentSnackBar();
要隐藏最后一个并显示一个新的:
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(snackBar);
要清除以前的 snackbar 并仅显示新的,请使用 removeCurrentSnackBar 方法而不是 hideCurrentSnackBar 方法,因为它不会清除堆栈.所以代码将是
ScaffoldMessenger.of(context)
..removeCurrentSnackBar()
..showSnackBar(snackBar);
所有这些答案都不起作用,因为您无法从 Snackbar 引用 ScarfoldMessenger。
您必须保存对小吃店的引用并调用它的“关闭”方法。像这样
void Function () close; var snackbar = ScaffoldMessenger.of(context).showsnackbar(Snackbar (content:Text(), action: SnackbarAction(onPressed:()=>close())) close = ()=> snackbar.close();
我想关闭 SnackBar
SnackBarAction
的 onPressed
方法。我尝试使用 Navigator.of(context).pop();
,但 SnackBar
并没有关闭我的屏幕,而是变黑了。
代码如下:
void showInSnackBar(String value) {
homeScaffoldKey.currentState.showSnackBar(new SnackBar(content: new Text(value),
action: SnackBarAction(
label: 'Dissmiss',
textColor: Colors.yellow,
onPressed: () {
// Navigator.of(context).pop();
},
),));
}
尝试使用hideCurrentSnackBar
方法
onPressed: () {
homeScaffoldKey.currentState.hideCurrentSnackBar();
},
更多信息在这里:https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html
你也可以使用,
Scaffold.of(context).hideCurrentSnackBar();
使用上下文时要小心,使用正确的上下文。
注意
在新的Flutter版本中,该方法已弃用。 因此使用
ScaffoldMessenger.of(context).hideCurrentSnackBar();
如果你想替换只显示一次的 snackbar,
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
final snackBar = SnackBar(content: Text("Hello, world"));
还有,
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
还有,
onPressed: () {
_scaffoldKey.currentState.removeCurrentSnackBar();
_scaffoldKey.currentState.showSnackBar(snackBar);
}
ScaffoldMessenger.of(上下文).hideCurrentSnackBar();
Scaffold.of(上下文).hideCurrentSnackBar(); 上面的方法以前用过但是,
ScaffoldMessenger.of(上下文).hideCurrentSnackBar(); 现在推荐这个。
您也可以在没有任何键的情况下显示和关闭这样的小吃店
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Hello from snackbar!'),
action: SnackBarAction(
label: 'Dissmiss',
textColor: Colors.yellow,
onPressed: () {
ScaffoldMessenger.of(context).hideCurrentSnackBar();
},
),
),
);
定义你的SnackBar
:
var snackBar = SnackBar(content: Text('Hello World'));
显示一下:
ScaffoldMessenger.of(context).showSnackBar(snackBar);
隐藏:
ScaffoldMessenger.of(context).hideCurrentSnackBar();
要隐藏最后一个并显示一个新的:
ScaffoldMessenger.of(context)
..hideCurrentSnackBar()
..showSnackBar(snackBar);
要清除以前的 snackbar 并仅显示新的,请使用 removeCurrentSnackBar 方法而不是 hideCurrentSnackBar 方法,因为它不会清除堆栈.所以代码将是
ScaffoldMessenger.of(context)
..removeCurrentSnackBar()
..showSnackBar(snackBar);
所有这些答案都不起作用,因为您无法从 Snackbar 引用 ScarfoldMessenger。
您必须保存对小吃店的引用并调用它的“关闭”方法。像这样
void Function () close; var snackbar = ScaffoldMessenger.of(context).showsnackbar(Snackbar (content:Text(), action: SnackbarAction(onPressed:()=>close())) close = ()=> snackbar.close();