Flutter snackbar 在 SnackBarAction onPressed 上解散

Flutter snackbar dismiss on SnackBarAction onPressed

我想关闭 SnackBar SnackBarActiononPressed 方法。我尝试使用 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();