简体   繁体   中英

Flutter Navigator.replace and Navigator.replaceRouteBelow

How to use Navigator.replace() and Navigator.replaceRouteBelow() . I find these two method in Navigator.dart, and try it. From A navigate to B, then to C. And perform this code in C:

Navigator.replace(context,
            oldRoute: MaterialPageRoute(builder: (context) => PushPageB()),
            newRoute: MaterialPageRoute(builder: (context) => PushPageD()));

And app crashed, this is the log:

EXCEPTION CAUGHT BY GESTURE

The following assertion was thrown while handling a gesture:
'package:flutter/src/widgets/navigator.dart': Failed assertion: line 1673 pos 12:

'oldRoute._navigator == this': is not true.

Either the assertion indicates an error in the framework itself, or we should provide substantially

more information in this error message to help you determine and fix the underlying cause.

In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new

When the exception was thrown, this was the stack:

2      NavigatorState.replace (package:flutter/src/widgets/navigator.dart:1673:12)

3      Navigator.replace (package:flutter/src/widgets/navigator.dart:1041:34)

4      ReplacePage.build.<anonymous closure> (package:flutter_navigation/replace_page_demo.dart:45:31)

5      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)

6      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)

7      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)

8      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)

9      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)

10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)

11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)

12     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)

13     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:143:19)

14     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:121:22)

15     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:101:7)

16     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:64:7)

17     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:48:7)

18     _invoke1 (dart:ui/hooks.dart:153:13)

19     _dispatchPointerDataPacket (dart:ui/hooks.dart:107:5)
(elided 2 frames from class _AssertionError)

Handler: onTap

Recognizer:
  TapGestureRecognizer#7d65d(debugOwner: GestureDetector, state: possible, 

won arena, finalPosition:
  Offset(233.6, 383.8), sent tap down)
'oldRoute._navigator == this': is not true.

Show that old route need equals this

Additional, I never use Navigator.replace, instead I use like this

Route route = MaterialPageRoute(builder: (context) => MyHomePage());
Navigator.pushReplacement(context, route);

Hope it helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM