Flutter快餐栏在SnackBarAction onPressed上关闭

Amm*_*ang 6 dart snackbar flutter

我想放弃SnackBarSnackBarActiononPressed方法。我尝试过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();
    },
  ),));
}
Run Code Online (Sandbox Code Playgroud)

Ach*_*uru 44

您还可以使用,

Scaffold.of(context).hideCurrentSnackBar();
Run Code Online (Sandbox Code Playgroud)

使用context时要小心,使用正确的上下文。

笔记

在新的 Flutter 版本中,此方法已被弃用。因此使用

ScaffoldMessenger.of(context).hideCurrentSnackBar();
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 Scaffold.of(context).removeCurrentSnackBar() 立即关闭 SnackBar,而不使用退出动画。 (3认同)

Riz*_*sar 10

ScaffoldMessenger.of(context).hideCurrentSnackBar();

  • 这是对新来的人的最新答案 --> 自 Flutter 2.0 以来,scaffold.snackbar 已被弃用,scaffold Messenger 是新的方法 (2认同)

die*_*per 8

尝试使用hideCurrentSnackBar方法

onPressed: () {
    homeScaffoldKey.currentState.hideCurrentSnackBar();
},
Run Code Online (Sandbox Code Playgroud)

此处提供更多信息:https : //docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html


小智 8

要清除以前的小吃栏并仅显示新的小吃栏,请使用removeCurrentSnackBar方法而不是hideCurrentSnackBar,因为它不会清除堆栈。所以代码将是

ScaffoldMessenger.of(context) 
  ..removeCurrentSnackBar()
  ..showSnackBar(snackBar);
Run Code Online (Sandbox Code Playgroud)


Hus*_*dar 5

如果你想替换只显示一次的小吃店,

  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  final snackBar = SnackBar(content: Text("Hello, world"));
Run Code Online (Sandbox Code Playgroud)

并且,

@override
Widget build(BuildContext context) {
return Scaffold(
  key: _scaffoldKey,
Run Code Online (Sandbox Code Playgroud)

并且,

onPressed: () {
    _scaffoldKey.currentState.removeCurrentSnackBar();
    _scaffoldKey.currentState.showSnackBar(snackBar);
     }
Run Code Online (Sandbox Code Playgroud)