Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error occured Navigator.pushNamed(context, '/') in initState() of State class #93

Closed
shyandsy opened this issue Dec 25, 2018 · 4 comments

Comments

@shyandsy
Copy link

shyandsy commented Dec 25, 2018

I was trying to do login state check when user jump to login page.

In the initState method, I checked the login state and jumped back to home if the use has logged in.
but the error occured when I try to use navigator method in initState()

"I/flutter ( 4757): setState() or markNeedsBuild() called during build."

class _LoginPageState extends State<LoginPage> with SingleTickerProviderStateMixin{
  Animation animation, delayedAnimation, muchDelayedAnimation;
  AnimationController animationController;

  String username = "";
  String password = "";
  String message = "";

  final usernameController = TextEditingController();
  final passwordController = TextEditingController();

  @override
  void initState(){
    super.initState();
    
    /*  
    error oocured here, program will run fine when:
          a. I put this statement into onPress() of a button control 
          or
          b. remove this statement
   */
    Navigator.pushNamed(context, '/');
  }

error information

Restarted application in 2,193ms.
I/flutter ( 4757): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 4757): The following assertion was thrown building Builder:
I/flutter ( 4757): setState() or markNeedsBuild() called during build.
I/flutter ( 4757): This Overlay widget cannot be marked as needing to build because the framework is already in the
I/flutter ( 4757): process of building widgets. A widget can be marked as needing to be built during the build phase
I/flutter ( 4757): only if one of its ancestors is currently building. This exception is allowed because the framework
I/flutter ( 4757): builds parent widgets before children, which means a dirty descendant will always be built.
I/flutter ( 4757): Otherwise, the framework might not visit this widget during this build phase.
I/flutter ( 4757): The widget on which setState() or markNeedsBuild() was called was:
I/flutter ( 4757):   Overlay-[LabeledGlobalKey<OverlayState>#dd7af](state: OverlayState#697dd(entries:
I/flutter ( 4757):   [OverlayEntry#e8a6b(opaque: false; maintainState: false), OverlayEntry#a23fc(opaque: false;
I/flutter ( 4757):   maintainState: true), OverlayEntry#1e1ac(opaque: false; maintainState: false),
I/flutter ( 4757):   OverlayEntry#9e10f(opaque: false; maintainState: true), OverlayEntry#c0047(opaque: false;
I/flutter ( 4757):   maintainState: false), OverlayEntry#87a57(opaque: false; maintainState: true)]))
I/flutter ( 4757): The widget which was currently being built when the offending call was made was:
I/flutter ( 4757):   Builder
I/flutter ( 4757):
I/flutter ( 4757): When the exception was thrown, this was the stack:
I/flutter ( 4757): #0      Element.markNeedsBuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:3485:11)
I/flutter ( 4757): #1      Element.markNeedsBuild (package:flutter/src/widgets/framework.dart:3511:6)
I/flutter ( 4757): #2      State.setState (package:flutter/src/widgets/framework.dart:1146:14)
I/flutter ( 4757): #3      OverlayState.insertAll (package:flutter/src/widgets/overlay.dart:301:5)
I/flutter ( 4757): #4      OverlayRoute.install (package:flutter/src/widgets/routes.dart:43:24)
I/flutter ( 4757): #5      TransitionRoute.install (package:flutter/src/widgets/routes.dart:185:11)
I/flutter ( 4757): #6      ModalRoute.install (package:flutter/src/widgets/routes.dart:861:11)
I/flutter ( 4757): #7      NavigatorState.push (package:flutter/src/widgets/navigator.dart:1560:11)
I/flutter ( 4757): #8      NavigatorState.pushNamed (package:flutter/src/widgets/navigator.dart:1473:12)
I/flutter ( 4757): #9      Navigator.pushNamed (package:flutter/src/widgets/navigator.dart:740:34)
I/flutter ( 4757): #10     _LoginPageState.initState (package:shadowsock/page/login.dart:33:15)
I/flutter ( 4757): #11     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3830:58)
I/flutter ( 4757): #12     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #13     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #14     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #15     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #16     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #17     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #18     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #19     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #20     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #21     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #22     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #24     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #25     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #26     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #27     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #28     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #29     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #30     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #31     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #32     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #33     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #34     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #35     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #36     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #37     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #38     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #39     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 4757): #40     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #41     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #45     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #46     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #47     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #48     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #49     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #50     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #51     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #52     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 4757): #53     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #54     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #55     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #56     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #57     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #58     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #59     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #60     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #61     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #62     ComponentElement.mount (package:flutter/src/widgets/framework.dart
I/flutter ( 4757): #63     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #64     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #65     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #66     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #67     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #68     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #69     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #70     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #71     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 4757): #72     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #73     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #74     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #75     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #76     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #77     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #78     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #79     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #80     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #81     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
I/flutter ( 4757): #82     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #83     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #84     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #85     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #86     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #87     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #88     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #89     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #90     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #91     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #92     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #93     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 4757): #94     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #95     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #96     Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #97     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #98     Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #99     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
I/flutter ( 4757): #100    StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
I/flutter ( 4757): #101    ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
I/flutter ( 4757): #102    Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
I/flutter ( 4757): #103    Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
I/flutter ( 4757): #104    RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4643:32)
I/flutter ( 4757): #105    MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4975:17)
I/flutter ( 4757): #106    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #107    _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507:16)
I/flutter ( 4757): #108    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #109    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #110    Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #111    StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
I/flutter ( 4757): #112    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #113    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #114    Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #115    ProxyElement.update (package:flutter/src/widgets/framework.dart:3990:5)
I/flutter ( 4757): #116    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #117    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
I/flutter ( 4757): #118    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #119    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #120    Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #121    StatefulElement.update (package:flutter/src/widgets/framework.dart:3878:5)
I/flutter ( 4757): #122    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #123    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
I/flutter ( 4757): #124    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #125    SingleChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4867:14)
I/flutter ( 4757): #126    Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
I/flutter ( 4757): #127    ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
I/flutter ( 4757): #128    Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
I/flutter ( 4757): #129    BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2286:33)
I/flutter ( 4757): #130    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:676:20)
I/flutter ( 4757): #131    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
I/flutter ( 4757): #132    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
I/flutter ( 4757): #133    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
I/flutter ( 4757): #134    _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
I/flutter ( 4757): #135    _invoke (dart:ui/hooks.dart:154:13)
I/flutter ( 4757): #136    _drawFrame (dart:ui/hooks.dart:143:3)
I/flutter ( 4757): ════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter ( 4757): Another exception was thrown: NoSuchMethodError: The getter 'status' was called on null.
I/flutter ( 4757): Another exception was thrown: NoSuchMethodError: The method 'drive' was called on null.

@brianegan
Copy link
Owner

brianegan commented Jan 7, 2019

Hey there -- sorry about the delay, was on vacay for a bit. Unfortunately, you cannot directly push to the navigator during initState from any Flutter component.

Two solutions:

  1. Do not push a new route in initState, but push in a callback after a successful login attempt
  2. If you need to push in initState, you must wrap the call in a scheduleMicrotask or a Future.delay type of call. This will then run the initState asynchronously, AFTER the build has completed.

Hope that helps!

@Rajakalla
Copy link

Hi ,
I also facing the same issue. But i didnot used the Navigator in initState , I used it on the button press. But same error is coming for me. Need help for this. Hope for your quick response.

RaisedButton(
child: Text("Login"),
onPressed: loginviewmodel.value== null || loginviewmodel.value== '' ? loginviewmodel.login() : loginviewmodel.navigateToPage(context),

@brianegan
Copy link
Owner

brianegan commented Feb 10, 2019

Hey all: it looks like you're attempting to Navigate while Flutter is building the Widget tree, which isn't allowed.

@shyandsy -- Please do not call Navigator.of directly in the initState method. You must wrap that in a scheduleMicrotask callback so the code runs asynchronously AFTER the Widgets are built.

@Rajakalla You've actually got a small syntax error which is causing your app to navigate during the build. The code should look like this:

// Note how I'm providing a FUNCTION to `onPressed`
onPressed: () => loginviewmodel.value== null || loginviewmodel.value== '' ? loginviewmodel.login() : loginviewmodel.navigateToPage(context),

@Rajakalla
Copy link

Thank you @brianegan it worked with flutter redux navigation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants