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

When there is a RouteObserver set inside the child of a Hero widget, Flutter crashes #29538

Open
9ukin opened this issue Mar 18, 2019 · 4 comments
Labels
c: crash Stack traces logged to the console f: routes Navigator, Router, and related APIs. found in release: 3.3 Found to occur in 3.3 found in release: 3.6 Found to occur in 3.6 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on P2 Important issues not at the top of the work list team-framework Owned by Framework team triaged-framework Triaged by Framework team

Comments

@9ukin
Copy link

9ukin commented Mar 18, 2019

If you take out only the Hero widget from the below code, everything works as expected.

Code

import 'package:flutter/material.dart';
import 'test_page.dart';
import 'test_widget.dart';

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'HERO and RouteObserver'),
      routes: <String, WidgetBuilder> {
        'test': (BuildContext context) => TestPage(
            routeObserver: routeObserver
        )
      },
      navigatorObservers: [routeObserver],
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Hero(
        tag: "HeroTag",
        child: TestWidget(
          routeObserver: routeObserver
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toTestPage,
        child: Icon(Icons.add),
      ),
    );
  }

  void _toTestPage() {
    Navigator.of(context).pushNamed("test");
  }
}
import 'package:flutter/material.dart';
import 'test_widget.dart';

class TestPage extends StatefulWidget {
  const TestPage({
    this.routeObserver
  });

  final RouteObserver<PageRoute> routeObserver;

  @override
  State<StatefulWidget> createState() => TestPageState();
}

class TestPageState extends State<TestPage> with RouteAware {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    widget.routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void didPush() {
    print("did push: test_page");
  }

  @override
  void didPushNext() {
    print("did push next: test_page");
  }

  @override
  void didPop() {
    print("did pop: test_page");
  }

  @override
  void didPopNext() {
    print("did pop next: test_page");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text("Test Page"),
      ),
      body: Center(
        child: Container(
          width: 200,
          height: 200,
          child: Hero(
            tag: "HeroTag",
            child: TestWidget(
              routeObserver: widget.routeObserver
            ),
          ),
        ),
      ),
    );
  }
}
import 'package:flutter/material.dart';

class TestWidget extends StatefulWidget {
  const TestWidget({
    this.routeObserver
  });

  final RouteObserver<PageRoute> routeObserver;

  @override
  State<StatefulWidget> createState() => TestWidgetState();
}

class TestWidgetState extends State<TestWidget> with RouteAware {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    widget.routeObserver.subscribe(this, ModalRoute.of(context));
  }

  @override
  void didPush() {
    print("did push: test_widget");
  }

  @override
  void didPushNext() {
    print("did push next: test_widget");
  }

  @override
  void didPop() {
    print("did pop: test_widget");
  }

  @override
  void didPopNext() {
    print("did pop next: test_widget");
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red,
      child : Center(
        child: Text("Hero"),
      )
    );
  }
}

Logs

[+1116 ms] I/flutter (18702): did push next: test_widget
[  +26 ms] I/flutter (18702): did push: test_page
[   +3 ms] I/flutter (18702): did push: test_widget
[  +96 ms] I/flutter (18702): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
[   +2 ms] I/flutter (18702): The following assertion was thrown building Positioned(left: 65.2, top: 171.0, right: 65.2, bottom:
[   +1 ms] I/flutter (18702): 91.0):
[   +1 ms] I/flutter (18702): 'package:flutter/src/widgets/routes.dart': Failed assertion: line 1369 pos 12: 'route != null': is
[   +1 ms] I/flutter (18702): not true.
[        ] I/flutter (18702): 
[        ] I/flutter (18702): Either the assertion indicates an error in the framework itself, or we should provide substantially
[        ] I/flutter (18702): more information in this error message to help you determine and fix the underlying cause.
[        ] I/flutter (18702): In either case, please report this assertion by filing a bug on GitHub:
[        ] I/flutter (18702):   https://github.com/flutter/flutter/issues/new?template=BUG.md
[        ] I/flutter (18702): 
[        ] I/flutter (18702): When the exception was thrown, this was the stack:
[        ] I/flutter (18702): #2      RouteObserver.subscribe (package:flutter/src/widgets/routes.dart:1369:12)
[        ] I/flutter (18702): #3      TestWidgetState.didChangeDependencies (package:hero_error/test_widget.dart:28:26)
[        ] I/flutter (18702): #4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3862:12)
[        ] I/flutter (18702): #5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:3711:5)
[        ] I/flutter (18702): #6      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #7      Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #8      SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
[        ] I/flutter (18702): #9      Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #10     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #11     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
[        ] I/flutter (18702): #12     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #13     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #14     SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4876:14)
[        ] I/flutter (18702): #15     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #16     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #17     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3747:16)
[        ] I/flutter (18702): #18     Element.rebuild (package:flutter/src/widgets/framework.dart:3559:5)
[        ] I/flutter (18702): #19     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3716:5)
[        ] I/flutter (18702): #20     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3711:5)
[        ] I/flutter (18702): #21     ParentDataElement.mount (package:flutter/src/widgets/framework.dart:4063:11)
[        ] I/flutter (18702): #22     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #23     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #24     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3747:16)
[        ] I/flutter (18702): #25     Element.rebuild (package:flutter/src/widgets/framework.dart:3559:5)
[        ] I/flutter (18702): #26     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3716:5)
[        ] I/flutter (18702): #27     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
[        ] I/flutter (18702): #28     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3711:5)
[        ] I/flutter (18702): #29     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #30     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #31     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3747:16)
[        ] I/flutter (18702): #32     Element.rebuild (package:flutter/src/widgets/framework.dart:3559:5)
[        ] I/flutter (18702): #33     ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3716:5)
[        ] I/flutter (18702): #34     StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3864:11)
[        ] I/flutter (18702): #35     ComponentElement.mount (package:flutter/src/widgets/framework.dart:3711:5)
[        ] I/flutter (18702): #36     Element.inflateWidget (package:flutter/src/widgets/framework.dart:2956:14)
[        ] I/flutter (18702): #37     Element.updateChild (package:flutter/src/widgets/framework.dart:2759:12)
[        ] I/flutter (18702): #38     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4659:32)
[        ] I/flutter (18702): #39     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4992:17)
[        ] I/flutter (18702): #40     Element.updateChild (package:flutter/src/widgets/framework.dart:2748:15)
[        ] I/flutter (18702): #41     _TheatreElement.update (package:flutter/src/widgets/overlay.dart:508:16)
[        ] I/flutter (18702): #42     Element.updateChild (package:flutter/src/widgets/framework.dart:2748:15)
[        ] I/flutter (18702): #43     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3747:16)
[        ] I/flutter (18702): #44     Element.rebuild (package:flutter/src/widgets/framework.dart:3559:5)
[        ] I/flutter (18702): #45     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2273:33)
[        ] I/flutter (18702): #46     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:700:20)
[        ] I/flutter (18702): #47     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:268:5)
[        ] I/flutter (18702): #48     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:988:15)
[        ] I/flutter (18702): #49     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:928:9)
[        ] I/flutter (18702): #50     _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:840:5)
[        ] I/flutter (18702): #54     _invoke (dart:ui/hooks.dart:209:10)
[        ] I/flutter (18702): #55     _drawFrame (dart:ui/hooks.dart:168:3)
[        ] I/flutter (18702): (elided 5 frames from class _AssertionError and package dart:async)
[        ] I/flutter (18702): ════════════════════════════════════════════════════════════════════════════════════════════════════
[  +50 ms] I/flutter (18702): Another exception was thrown: 'package:flutter/src/widgets/routes.dart': Failed assertion: line 1369 pos 12: 'route != null': is not true.
[ +171 ms] I/flutter (18702): did push: test_widget
[+2099 ms] I/flutter (18702): did push: test_widget

Analyzing hero_error...
No issues found! (ran in 1.6s)
[√] Flutter (Channel stable, v1.2.1, on Microsoft Windows [Version 10.0.17134.590], locale ja-JP)
    • Flutter version 1.2.1 at C:\Users\z.shota.yuki\Documents\flutter
    • Framework revision 8661d8aecd (4 weeks ago), 2019-02-14 19:19:53 -0800
    • Engine revision 3757390fa4
    • Dart version 2.1.2 (build 2.1.2-dev.0.0 0a7dcf17eb)

[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at C:\Users\z.shota.yuki\AppData\Local\Android\sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • ANDROID_HOME = C:\Users\z.shota.yuki\AppData\Local\Android\sdk
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
    • All Android licenses accepted.

[√] Android Studio (version 3.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 29.0.1
    • Dart plugin version 173.4700
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)

[√] VS Code, 64-bit edition (version 1.29.1)
    • VS Code at C:\Program Files\Microsoft VS Code
    • Flutter extension version 2.21.1

[√] Connected device (1 available)
    • Pixel 3 • 8ADX0R099 • android-arm64 • Android 9 (API 28)

• No issues found!
@HansMuller HansMuller added the framework flutter/packages/flutter repository. See also f: labels. label Mar 18, 2019
@HansMuller
Copy link
Contributor

cc @goderbauer

@goderbauer goderbauer added the f: routes Navigator, Router, and related APIs. label Mar 18, 2019
@AyushBherwani1998
Copy link
Member

AyushBherwani1998 commented Jun 18, 2020

I was able to reproduce the issue here.

The issue is because of ModalRoute.of(context) returning null inside the TestWidgetState.didUpdateDependencies because of RouteObserver being under the Hero.

Since your TestWidget is inside the Hero the TestWidgetState.didUpdateDependencies is triggered multiple times because of Animation used in the Hero and one of that times your ModalRoute.of(context) is returning null. And I assume it is returning null when Hero is in flight. This is just my thought, and I may be wrong.

While to avoid the error, you can simply check if the ModalRoute.of(context) is null or not inside TestWidgetState.didUpdateDependencies, if it's not null pass it to RouteObserver.subsricbe.

 @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    dynamic route = ModalRoute.of(context);
    if (route != null) {
      widget.routeObserver.subscribe(this, route);
    }
 }

Edit:
Researching a bit more, it feels like when TestWidget is inside the Overlay, you are not able to access the inherited properties, in this case, a route since the .of method uses dependOnInheritedWidgetOfExactType, have a look here. There are open issues for the Hero which you can go through[36220, 213], not mentioning them in case if my assumptions are wrong, it will link wrong issues.

@darshankawar
Copy link
Member

Issue replicable on latest stable (1.20.2).

log
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown building Positioned(left: 80.0, top: 336.0, right: 80.0, bottom:
56.0):
'package:flutter/src/widgets/routes.dart': Failed assertion: line 1610 pos 12: 'route != null': is
not true.

The relevant error-causing widget was:
  MaterialApp
  file:///Users/deeptibelsare/Documents/DarshanUdacity/Flutter/hello_world/lib/main.dart:9491:12

When the exception was thrown, this was the stack:
#2      RouteObserver.subscribe (package:flutter/src/widgets/routes.dart:1610:12)
#3      RouteAwareWidgetState.didChangeDependencies (package:hello_world/main.dart:9558:19)
#4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4705:12)
#5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
...     Normal element mounting (44 frames)
#49     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3490:14)
#50     Element.updateChild (package:flutter/src/widgets/framework.dart:3258:18)
#51     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:5624:32)
#52     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6001:17)
#53     Element.updateChild (package:flutter/src/widgets/framework.dart:3245:15)
#54     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4571:16)
#55     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4719:11)
#56     Element.rebuild (package:flutter/src/widgets/framework.dart:4262:5)
#57     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2667:33)
#58     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:866:20)
#59     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:286:5)
#60     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1117:15)
#61     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1056:9)
#62     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:972:5)
#66     _invoke (dart:ui/hooks.dart:253:10)
#67     _drawFrame (dart:ui/hooks.dart:211:3)
(elided 5 frames from class _AssertionError and dart:async)

════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown building Positioned(left: 80.0, top: 336.0, right: 80.0, bottom: 56.0):
'package:flutter/src/widgets/routes.dart': Failed assertion: line 1610 pos 12: 'route != null': is not true.

The relevant error-causing widget was: 
  MaterialApp file:///Users/deeptibelsare/Documents/DarshanUdacity/Flutter/hello_world/lib/main.dart:9491:12
When the exception was thrown, this was the stack: 
#2      RouteObserver.subscribe (package:flutter/src/widgets/routes.dart:1610:12)
#3      RouteAwareWidgetState.didChangeDependencies (package:hello_world/main.dart:9558:19)
#4      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4705:12)
#5      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4520:5)
...     Normal element mounting (44 frames)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
I/flutter (18378): didPush FirstPage
I/zygote  (18378): Do partial code cache collection, code=62KB, data=54KB
I/zygote  (18378): After code cache collection, code=62KB, data=54KB
I/zygote  (18378): Increasing code cache capacity to 256KB
W/libEGL  (18378): EGLNativeWindowType 0xe9071808 disconnect failed
I/FIAM.Headless(18378): went foreground
I/FIAM.Headless(18378): Forcing fetch from service rather than cache. Test Device: false | App Fresh Install: true
I/FIAM.Headless(18378): Recoverable exception while reading cache: /data/user/0/com.example.hello_world/files/fiam_impressions_store_file (No such file or directory)
I/FIAM.Headless(18378): Fetching campaigns from service.
W/DynamiteModule(18378): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(18378): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(18378): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/FIAM.Headless(18378): Service fetch error: PERMISSION_DENIED: Firebase In-App Messaging API has not been used in project 613586627532 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/firebaseinappmessaging.googleapis.com/overview?project=613586627532 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.

@darshankawar darshankawar added found in release: 1.20 Found to occur in 1.20 has reproducible steps The issue has been confirmed reproducible and is ready to work on labels Sep 1, 2020
@maheshmnj
Copy link
Member

Reproducible on latest stable and the master channel.

code sample
import 'package:flutter/material.dart';

final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'HERO and RouteObserver'),
      routes: <String, WidgetBuilder> {
        'test': (BuildContext context) => TestPage(
            routeObserver: routeObserver
        )
      },
      navigatorObservers: [routeObserver],
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key,required this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Hero(
        tag: "HeroTag",
        child: TestWidget(
          routeObserver: routeObserver
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _toTestPage,
        child: Icon(Icons.add),
      ),
    );
  }

  void _toTestPage() {
    Navigator.of(context).pushNamed("test");
  }
}


class TestPage extends StatefulWidget {
  const TestPage({
    required this.routeObserver
  });

  final RouteObserver<PageRoute> routeObserver;

  @override
  State<StatefulWidget> createState() => TestPageState();
}

class TestPageState extends State<TestPage> with RouteAware {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    widget.routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute);
  }

  @override
  void didPush() {
    print("did push: test_page");
  }

  @override
  void didPushNext() {
    print("did push next: test_page");
  }

  @override
  void didPop() {
    print("did pop: test_page");
  }

  @override
  void didPopNext() {
    print("did pop next: test_page");
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.blue,
      appBar: AppBar(
        title: Text("Test Page"),
      ),
      body: Center(
        child: Container(
          width: 200,
          height: 200,
          child: Hero(
            tag: "HeroTag",
            child: TestWidget(
              routeObserver: widget.routeObserver
            ),
          ),
        ),
      ),
    );
  }
}


class TestWidget extends StatefulWidget {
  const TestWidget({
    required this.routeObserver
  });

  final RouteObserver<PageRoute> routeObserver;

  @override
  State<StatefulWidget> createState() => TestWidgetState();
}

class TestWidgetState extends State<TestWidget> with RouteAware {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    widget.routeObserver.subscribe(this, ModalRoute.of(context) as PageRoute);
  }

  @override
  void didPush() {
    print("did push: test_widget");
  }

  @override
  void didPushNext() {
    print("did push next: test_widget");
  }

  @override
  void didPop() {
    print("did pop: test_widget");
  }

  @override
  void didPopNext() {
    print("did pop next: test_widget");
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.red,
      child : Center(
        child: Text("Hero"),
      )
    );
  }
}
logs
Launching lib/main.dart on iPhone 12 Pro in debug mode...
Xcode build done.                                           10.1s
Connecting to VM Service at ws://127.0.0.1:60705/2-uKaUY6b-w=/ws
flutter: did push: test_widget
flutter: did push next: test_widget
flutter: did push: test_page
flutter: did push: test_widget
══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following _CastError was thrown building MediaQuery(MediaQueryData(size: Size(390.0, 844.0),
devicePixelRatio: 3.0, textScaleFactor: 1.0, platformBrightness: Brightness.light, padding:
EdgeInsets(0.0, 0.0, 0.0, 34.0), viewPadding: EdgeInsets(0.0, 0.0, 0.0, 34.0), viewInsets:
EdgeInsets.zero, alwaysUse24HourFormat: false, accessibleNavigation: false, highContrast: false,
disableAnimations: false, invertColors: false, boldText: false, navigationMode: traditional,
gestureSettings: DeviceGestureSettings(touchSlop: null), displayFeatures: [])):
type 'Null' is not a subtype of type 'PageRoute<dynamic>' in type cast

The relevant error-causing widget was:
  MaterialApp MaterialApp:file:///Users/mahesh/Desktop/flutter_issue/lib/main.dart:10:12

When the exception was thrown, this was the stack:
#0      TestWidgetState.didChangeDependencies (package:flutter_issue/main.dart:158:65)
#1      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5119:11)
#2      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4944:5)
...     Normal element mounting (57 frames)
#59     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3953:16)
#60     MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6512:36)
#61     Element.updateChild (package:flutter/src/widgets/framework.dart:3682:18)
#62     RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:6041:32)
#63     MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:6537:17)
#64     Element.updateChild (package:flutter/src/widgets/framework.dart:3660:15)
#65     ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4993:16)
#66     StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5133:11)
#67     Element.rebuild (package:flutter/src/widgets/framework.dart:4690:5)
#68     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2743:19)
#69     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:867:21)
#70     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:381:5)
#71     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1289:15)
#72     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1218:9)
#73     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1076:5)
#74     _invoke (dart:ui/hooks.dart:145:13)
#75     PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:338:5)
#76     _drawFrame (dart:ui/hooks.dart:112:31)

════════════════════════════════════════════════════════════════════════════════════════════════════

flutter: did push: test_widget
flutter doctor -v (mac)
[✓] Flutter (Channel master, 3.6.0-6.0.pre.33, on macOS 12.6 21G115 darwin-arm64,
    locale en-IN)
    • Flutter version 3.6.0-6.0.pre.33 on channel master at
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision a9858ec524 (72 minutes ago), 2022-11-21 10:58:11 -0500
    • Engine revision 46a6b54295
    • Dart version 2.19.0 (build 2.19.0-406.0.dev)
    • DevTools version 2.19.0
    • If those were intentional, you can disregard the above warnings; however it is
      recommended to use "git" directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.70.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.53.20221101

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios
      • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64
      • macOS 12.6 21G115 darwin-arm64
    • Chrome (web)           • chrome                               • web-javascript
      • Google Chrome 107.0.5304.110

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
[✓] Flutter (Channel stable, 3.3.8, on macOS 12.6 21G115 darwin-arm, locale en-IN)
    • Flutter version 3.3.8 on channel stable at /Users/mahesh/Development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 52b3dc25f6 (13 days ago), 2022-11-09 12:09:26 +0800
    • Engine revision 857bd6b74c
    • Dart version 2.18.4
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.70.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.53.20221101

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS
      12.6 21G115 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google
      Chrome 107.0.5304.110

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

@maheshmnj maheshmnj added found in release: 3.3 Found to occur in 3.3 found in release: 3.6 Found to occur in 3.6 and removed found in release: 1.20 Found to occur in 1.20 labels Nov 22, 2022
@goderbauer goderbauer added c: crash Stack traces logged to the console P2 Important issues not at the top of the work list labels Feb 7, 2023
@flutter-triage-bot flutter-triage-bot bot added team-framework Owned by Framework team triaged-framework Triaged by Framework team labels Jul 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c: crash Stack traces logged to the console f: routes Navigator, Router, and related APIs. found in release: 3.3 Found to occur in 3.3 found in release: 3.6 Found to occur in 3.6 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on P2 Important issues not at the top of the work list team-framework Owned by Framework team triaged-framework Triaged by Framework team
Projects
None yet
Development

No branches or pull requests

6 participants