Flutter snackbar dismiss on SnackBarAction onPressed

21,209

Solution 1

Try using hideCurrentSnackBar method

onPressed: () {
    homeScaffoldKey.currentState.hideCurrentSnackBar();
},

More info here: https://docs.flutter.io/flutter/material/ScaffoldState/hideCurrentSnackBar.html

Solution 2

You can also use,

Scaffold.of(context).hideCurrentSnackBar();

Be careful when you use context, use the correct context.

NOTE

In the new Flutter Version, this method is deprecated. Therefore use

ScaffoldMessenger.of(context).hideCurrentSnackBar();

Solution 3

ScaffoldMessenger.of(context).hideCurrentSnackBar();

Solution 4

If you want to replace snackbar that show only one time,

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

And also,

@override
Widget build(BuildContext context) {
return Scaffold(
  key: _scaffoldKey,

And also,

onPressed: () {
    _scaffoldKey.currentState.removeCurrentSnackBar();
    _scaffoldKey.currentState.showSnackBar(snackBar);
     }

Solution 5

Define your SnackBar:

var snackBar = SnackBar(content: Text('Hello World'));

To show it:

ScaffoldMessenger.of(context).showSnackBar(snackBar);

To hide it:

ScaffoldMessenger.of(context).hideCurrentSnackBar();

To hide the last one and show a new one:

ScaffoldMessenger.of(context) 
  ..hideCurrentSnackBar()
  ..showSnackBar(snackBar);
Share:
21,209
Ammy Kang
Author by

Ammy Kang

Android Developer

Updated on November 12, 2021

Comments

  • Ammy Kang
    Ammy Kang over 2 years

    I want to dismiss SnackBar on SnackBarAction's onPressed method. I tried with Navigator.of(context).pop(); but SnackBar is not dismissing my screen get black instead.

    Here is code:

     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();
        },
      ),));
    }