Skip to content

Assertion failed: "onGenerateRoute" shows assertion when I try to go the same route for the 2nd time. #44128

Description

@ClozedJP

Condition:

  • using Chrome-Develop for the web

  • using "flutter channel master" 2019-11-5 tokyo
    ("flutter version" shows tons of v 1.XX.XX . so I am not sure what to write here)

Step:

  1. With the code below, start the app by "flutter run -d chrome"
    2.Click "to the Home" button.
    3.Click "to the Root" button.
    4.You see the Red Screen with the assertion message.

Comment:

  • as you can see from the code, I have tested using onGenerateRoute with the switch case. This works.

  • but what I want to achieve is to create routing table from setting file. which probably need Map

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  final Map rootMap;
  MyApp():
    rootMap = {
      "/": MaterialPageRoute(builder:(context) => Root()),
      '/Home': MaterialPageRoute(builder:(context) => Home()),
    };

  Route<dynamic> generateRouteByMap(RouteSettings settings) {
    if(rootMap[settings.name] != null){
      return rootMap[settings.name];
    }
    else{
      return MaterialPageRoute(builder:(context) => Root());
    }
  }

  Route<dynamic> generateRouteBySwitch(RouteSettings settings) {
    switch(settings.name){
      case "/Home":
        return MaterialPageRoute(builder:(context) => Home());
      default:
        return MaterialPageRoute(builder:(context) => Root());
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Reproduce',
        // routes: {
        //   "/": (context) => Root(),
        //   "/Home": (context) => Home(),
        // },
      //  onGenerateRoute: generateRouteBySwitch,
      onGenerateRoute: generateRouteByMap,
    );
  }
}

class Root extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Text("Root"),
        FlatButton(
          child: Text("to the Home"),
          onPressed: () {
            Navigator.popAndPushNamed(context, "/Home");
          },
        ),
      ],
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        Text("home"),
        FlatButton(
          child: Text("to The Root"),
          onPressed: () {
            Navigator.popAndPushNamed(context, "/");
          },
        ),
      ],
    );
  }
}

and the Assertion message is following
══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
The following assertion was thrown while handling a gesture:
Assertion failed: org-dartlang-app:///packages/flutter/src/widgets/navigator.dart:1788:12
route._navigator == null
is not true
package:flutter/src/gestures/binding.dart 156:7
[_handlePointerEvent]
package:flutter/src/gestures/binding.dart 102:7
[_flushPointerEventQueue]
package:flutter/src/gestures/binding.dart 86:32
[_handlePointerDataPacket]
package:build_web_compilers/src/dev_compiler/C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/pointer_binding.dart 89:15
[_onPointerData]
package:build_web_compilers/src/dev_compiler/C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/pointer_binding.dart 261:7
package:build_web_compilers/src/dev_compiler/C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/pointer_binding.dart 173:16

Handler: "onTap"
Recognizer:
TapGestureRecognizer#0a0fa
════════════════════════════════════════════════════════════════════════════════════════════════════
Another exception was thrown: Assertion failed: org-dartlang-app:///packages/flutter/src/widgets/navigator.dart:2330:12

Metadata

Metadata

Assignees

Labels

a: error messageError messages from the Flutter frameworkc: crashStack traces logged to the consolef: routesNavigator, Router, and related APIs.frameworkflutter/packages/flutter repository. See also f: labels.waiting for PR to land (fixed)A fix is in flight

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions