Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fix "Navigator operation requested with a context that does not include a Navigator" when attempting to display a dialog

Tags:

flutter

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?

Part of my Code

@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);
  }
like image 845
X09 Avatar asked Mar 22 '18 11:03

X09


People also ask

Why navigator operation is not working in the widget?

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.

Why is my navigator not working in material app?

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.

Why can't I create navigators in flutter?

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.

What is unhandled exception in Salesforce navigator?

[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.


1 Answers

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()),
          );
        },
      ),
    );
  }
}
like image 198
Abhishek Anand Avatar answered Sep 21 '22 12:09

Abhishek Anand