I use WillPopScope widget into Home Page Screen to prevent app from exiting. When user press back button without confirmation alert dialog
body: WillPopScope(
onWillPop: () => StaticUI()
.onScreenPop(Routes.customerProcessScreen, context) as Future<bool>,
child: SingleChildScrollView(
...
),
);
Future<bool>? onScreenPop(String route, BuildContext context) async => await showDialog(
useSafeArea: true,
context: context,
barrierDismissible: true, // user must tap button!
builder: (BuildContext context) {
return Stack(
children: [
...
],
);
},
);
But I get a null error when I press back button to dismiss alert (when closing alert)!
E/flutter ( 4688): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: type 'Null' is not a subtype of type 'FutureOr<bool>'
E/flutter ( 4688): #0 StaticUI.onScreenPop (package:hesabate/Utils/statics.dart:275:74)
E/flutter ( 4688): <asynchronous suspension>
E/flutter ( 4688): #1 ModalRoute.willPop (package:flutter/src/widgets/routes.dart:1357:11)
E/flutter ( 4688): <asynchronous suspension>
E/flutter ( 4688): #2 NavigatorState.maybePop (package:flutter/src/widgets/navigator.dart:4966:45)
E/flutter ( 4688): <asynchronous suspension>
E/flutter ( 4688):
SDK version
environment:
sdk: '>=2.12.0 <3.0.0'
CodePudding user response:
You need to return either true
or false
from the onScreenPop
function. To do that make sure you return either true
or false
from your showDialog
. Refer this link to learn more about how to return values from showDialog
in flutter.
CodePudding user response:
I did some edits in my code to check for null returns , so it's working now .
Future<bool> onScreenPop(String route, BuildContext context) async {
final result = await showDialog(
useSafeArea: true,
context: context,
barrierDismissible: true, // user must tap button!
builder: (BuildContext context) {
return Stack(
children: [
...
],
);
},
);
if (result == null) {
return false;
} else {
return result;
}
}