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.