Search code examples
flutter

Flutter prevent close dialog on back pressed


I am using the showDialog function to build a dialog box, but I need to avoid that when the user presses the back button, the dialog box does not close, this is my code:

showDialog(
      barrierDismissible: false,
      context: context,

      builder: (BuildContext context) {
        // return object of type Dialog
        return AlertDialog(
          title: new Text("Hello"),
          content: new SingleChildScrollView(
            child: Container(),
          actions: <Widget>[
            // usually buttons at the bottom of the dialog

            new FlatButton(
              child: new Text("Close"),
              onPressed: () {
              },
            ),
          ],
        );
      },
    );

How can I get it to not close?


Solution

  • You need to enclose your AlertDialon on a WillPopScope like this:

    showDialog(
          barrierDismissible: false,
          context: context,
    
          builder: (BuildContext context) {
            // return object of type Dialog
            return WillPopScope(
                onWillPop: (){},
                child:AlertDialog(
                title: new Text("Hello"),
                content: new SingleChildScrollView(
                  child: Container(),),
                actions: <Widget>[
                  // usually buttons at the bottom of the dialog
                  new FlatButton(
                    child: new Text("Close"),
                    onPressed: () {
                    },
                  ),
                ],
              )
            )
          },
        );
    

    The WillPopScope provides you a onWillPop parameter, where you can pass a function of what you want when the child pop. In this case, the parameter receive an empty function so it wont pop.