Navigator.dart中有两个函数: removeRoute和removeRouteBelow。我不知道如何使用这两种方法。这是页面路由:/ -> A -> B -> C -> D。我在页面D中执行以下代码:
Navigator.removeRoute(context,builder(MaterialPageRoute:(context) => PushPageB();但是出了点问题:
══╡ EXCEPTION CAUGHT BY GESTURE ╞═════════════════════════════════
The following assertion was thrown while handling a gesture:
'package:flutter/src/widgets/navigator.dart': Failed assertion: line 1832 pos 12: 'route._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.removeRoute (package:flutter/src/widgets/navigator.dart:1832:12)
3 Navigator.removeRoute (package:flutter/src/widgets/navigator.dart:1221:34)
4 PushPageE.build.<anonymous closure> (package:flutter_navigation/push_page_1.dart:223:29)
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#2a91c(debugOwner: GestureDetector, state: possible, won arena, finalPosition:
Offset(211.1, 411.1), sent tap down)
══════════════════════════════════════════════════════════════════我不知道为什么会发生这种情况,以及如何正确使用这两种方法。
发布于 2018-12-25 20:54:18
您在Navigator.removeRoute调用中创建的MaterialPageRoute没有连接到导航器,因为它还没有被推送。因此,你得到了一个错误。
为了正确使用removeRoute方法,您需要记住推送到导航器的路由。
我使用下面的代码在导航器中只保留页面的一个实例。
var filterRoutes = <String, MaterialPageRoute<dynamic>>{'page1': null, 'page2': null, 'page3': null, 'page4': null};
MaterialPageRoute getNextRoute(BuildContext context, String nextPage) {
var route;
switch (nextPage) {
case 'page1':
route = MaterialPageRoute(builder: (context) => Page1());
break;
case 'page2':
route = MaterialPageRoute(builder: (context) => Page2());
break;
case 'page3':
route = MaterialPageRoute(builder: (context) => Page3());
break;
case 'page4':
route = MaterialPageRoute(builder: (context) => Page4());
break;
default:
route = MaterialPageRoute(builder: (context) => SomeOtherPage());
}
if (nextPage != null) {
if (filterRoutes[nextPage] != null) {
Navigator.removeRoute(context, filterRoutes[nextPage]);
}
filterRoutes[nextPage] = route;
}
return route;
}发布于 2021-04-30 15:04:41
如果您想从设置中删除blow路由器,转到新的路由,如注销,并转到登录页面,您可以这样做:
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) =>
LoginScreen()), (Route<dynamic> route) => false);https://stackoverflow.com/questions/53043925
复制相似问题