Flutter: Disable Swipe to Navigate Back in iOS
WillPopScope
is the correct way to do this.
(it seems too complicated... it should be easier... like a setting on the root app).
It is not complicated. It's a one liner :
WillPopScope(
onWillPop: () async => false,
child: <children here>
)
A configuration file would make things more complicated as it's harder to read and maintain.
And remember that in flutter everything is a widget not just half of them. Authentification, configurations, everything.
I have one additional point here. I was just solving this problem, but I also needed my user to be able to go back by pressing the "native" back button on the AppBar (did not want to reimplement AppBar just because of this), and I found this niche little flag: userGestureInProgress
on the Navigator object, so what I use (and presume is the preferred way) is:
onWillPop: () async {
if (Navigator.of(context).userGestureInProgress)
return false;
else
return true;
},
MaterialPageRoute
has a parameter called fullscreenDialog
which is set to false by default. When true your page animates a bit differently and swipe to go back on iOS will be disabled.
Example usage:
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => HomePage(), fullscreenDialog: true));
See some discussion here: https://github.com/flutter/flutter/issues/14203