flutter - android back button does not call onWillPop of WillPopScope

I managed to solve my problem and I think it is a very particular case, but it still might be helpful to someone.

TL;DR: Ensure that you dont have multiple Scaffolds in your widgets

I was using IndexedStack in my menu navigator, obviously wrapped with a Scaffold. The pages of the stack had Scaffold as well, and with this combination WillPopScope was not working neither in the navigator page neither in its stack pages. I solved by removing all the Scaffolds in the stack pages and having only one in the controller. In this way I managed to use WillPopScope correctly.


i know i am too late, but the problem still exists. maybe i found the right solution. make sure you are passing MaterialApp to the runApp method like this:

runApp(MaterialApp(home: MyFirstPage()));

this works for me for all my application's widgets. if you do not want to use it just wrap your widget in MaterialApp but do not forget that in every MaterialApp instance a new Navigator is created, so for me i just created one as above and in all my pages i just used scaffold and everything is ok.


Modify the code to return WillPopScope, and have Scaffold as a child.

return new WillPopScope(
    onWillPop: _willPopCallback,
    child: new Scaffold(
     //then the rest of your code...

First of all do not ever use exit(0). It may be fine in Android environment, but apple won't allow the app on app store if it programmatically shuts down itself.

Here in the docs of onWillPop it clearly mentions that function should resolves to a boolean value.

Future<bool> _willPopCallback() async {
   // await showDialog or Show add banners or whatever
   // then
   return Future.value(true);
}

This only works if your current page is the root of navigation stack.

Tags:

Dart

Flutter