I am trying to show a non dismissable dialog after verifying the textfields in a form but it keeps printing:
03-22 12:34:46.373 8974-9001/com.mywebsite I/flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
03-22 12:34:46.397 8974-9001/com.mywebsite I/flutter: The following assertion was thrown while handling a gesture:
03-22 12:34:46.397 8974-9001/com.mywebsite I/flutter: Navigator operation requested with a context that does not include a Navigator.
03-22 12:34:46.397 8974-9001/com.mywebsite I/flutter: The context used to push or pop routes from the Navigator must be that of a widget that is a
03-22 12:34:46.397 8974-9001/com.mywebsite I/flutter: descendant of a Navigator widget.
03-22 12:34:46.404 8974-9001/com.mywebsite I/flutter: When the exception was thrown, this was the stack:
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #0 Navigator.of.<anonymous closure> (package:flutter/src/widgets/navigator.dart:725:9)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #1 Navigator.of (package:flutter/src/widgets/navigator.dart:731:6)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #2 showDialog (package:flutter/src/material/dialog.dart:486:20)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #3 SignupBodyState._showProgressDialog (package:truck_am_easy/signup.dart:310:5)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #4 SignupBodyState._verifyInputs (package:truck_am_easy/signup.dart:332:9)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #5 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:478:14)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #6 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:530:30)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #7 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #8 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:161:9)
03-22 12:34:46.419 8974-9001/com.mywebsite I/flutter: #9 TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:123:7)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #10 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #11 BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:147:20)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #12 BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #13 BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #14 BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #15 BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #16 _invoke1 (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:134)
03-22 12:34:46.420 8974-9001/com.mywebsite I/flutter: #17 _dispatchPointerDataPacket (file:///b/build/slave/Linux_Engine/build/src/flutter/lib/ui/hooks.dart:91)
03-22 12:34:46.425 8974-9001/com.mywebsite I/flutter: Handler: onTap
03-22 12:34:46.425 8974-9001/com.mywebsite I/flutter: Recognizer:
03-22 12:34:46.425 8974-9001/com.mywebsite I/flutter: TapGestureRecognizer#01b7d(debugOwner: GestureDetector, state: ready, won arena, finalPosition:
03-22 12:34:46.425 8974-9001/com.mywebsite I/flutter: Offset(187.0, 542.0), sent tap down)
03-22 12:34:46.425 8974-9001/com.mywebsite I/flutter: ════════════════════════════════════════════════════════════════════════════════════════════════════
but refused to show the dialog.
Please what am I doing wrong?
@override
Widget build(BuildContext context) {
return new MediaQuery(
data: new MediaQueryData(),
child: new MaterialApp(
home: _buildHomeUI(),
));
}
Widget _buildHomeUI() {
return new Scaffold(
key: _scaffoldKey,
body: new SafeArea(
top: false,
bottom: false,
child: new Container(
decoration: new BoxDecoration(color: MyColors.colorPrimary),
child: new ListView(
children: <Widget>[
// I removed the text fields.
new Container(
decoration:
new BoxDecoration(color: MyColors.colorBackground),
padding: const EdgeInsets.only(
top: 10.0, left: 15.0, right: 15.0),
child: new Form(
key: _formKey1,
autovalidate: _autoValidate,
child: new Column(
children: <Widget>[
new Container(
margin: const EdgeInsets.symmetric(
horizontal: 50.0, vertical: 25.0),
padding:
const EdgeInsets.symmetric(horizontal: 30.0),
decoration: new BoxDecoration(
borderRadius: new BorderRadius.circular(30.0),
color: MyColors.colorAccent),
child: new Container(
margin:
const EdgeInsets.symmetric(horizontal: 10.0),
padding:
const EdgeInsets.symmetric(vertical: 5.0),
child: new FlatButton(
onPressed: _verifyInputs,
child: const Text(Strings.signUp),
highlightColor: MyColors.colorAccentDark,
textColor: Colors.white),
),
),
],
),
),
)
],
)),
));
}
void _showProgressDialog() {
showDialog(
context: context,
barrierDismissible: false,
child: new Dialog(
child: new Row(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new CircularProgressIndicator(),
new Text(
"Creating your details...",
style: const TextStyle(fontFamily: Strings.customFont),
)
],
),
));
}
void _verifyInputs() {
final form = _formKey1.currentState;
if (form.validate()) {
if (checkBoxValue) {
form.save();
_showProgressDialog();
_parseResponse();
} else {
final snackBar = new SnackBar(
content: new Text(
"Please accept the terms and conditions",
style: const TextStyle(fontFamily: Strings.customFont),
),
);
_scaffoldKey.currentState.showSnackBar(snackBar);
}
} else {
_autoValidate = true;
}
}
void _parseResponse() async {
Map response = await registerUser();
Navigator.pop(context);
print(response);
}
This happens because when you do Navigator.of (context), it will start from the widget associated to the context used. And then go upward in the widget tree until it either find a Navigator or there’s no more widget. Navigator operation requested with a context that does not include a Navigator.
As per this comment If your navigator is inside Material context navigator push will give this error. if you create a new widget and assign it to the material app home navigator will work.
This is because the context that you're using is from the app level before a Navigator has actually been created. This is a common problem when creating "simple" single file apps in Flutter. There are a number of possible solutions.
[SOLVED] Unhandled Exception: Navigator operation requested with a context that does not include a Navigator. This happens because when you do Navigator.of (context), it will start from the widget associated to the context used. And then go upward in the widget tree until it either find a Navigator or there’s no more widget.
The issue could be because of the MaterialApp context in the library. Creating a new Widget as home in MaterialApp may solve this
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new HomeScreen());
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Title"),
),
body: new Center(child: new Text("Click Me")),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.add),
backgroundColor: Colors.orange,
onPressed: () {
print("Clicked");
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => new AddTaskScreen()),
);
},
),
);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With