我正在尝试使用.popUntil,但得到!_debugLocked不是真正的断言。所有在线解决方案都无法帮助我。我相信这是我设置导航的方式。
下面是我的main.dart文件,routes.dart(导航器文件)和pages.dart文件。请注意,这是我的代码的简化版本。但是,该结构类似于我的实际代码。代码的结构必须更改,因为我在代码中使用了嵌套的导航器!
main.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(debugShowCheckedModeBanner: false, home: Routes());
}
}
routes.dart
import 'package:flutter/material.dart';
import 'package:honeybee_flutter/screens/test/pages.dart';
class Routes extends StatelessWidget {
Routes({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: 'route/one',
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case 'route/one':
return MaterialPageRoute(builder: (_) => Route1());
case 'route/two':
return MaterialPageRoute(builder: (_) => Route2());
case 'route/three':
return MaterialPageRoute(builder: (_) => Route3());
default:
throw MaterialPageRoute(builder: (_) => Route1());
}
});
}
}
pages.dart
import 'package:flutter/material.dart';
class Route1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamed(context, 'route/two'),
child: Text('route/one'))),
);
}
}
class Route2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamed(context, 'route/three'),
child: Text('route/two'))),
);
}
}
class Route3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: FlatButton(
onPressed: () =>
Navigator.popUntil(context, ModalRoute.withName('route/one')), // This doesn't work, gives me !_debugLocked is not true
child: Text('route/three'))),
);
}
}
在Route3中使用popUntil返回到Route1时,出现!_debugLocked错误。我尝试使用此解决方案(Error thrown on navigator pop until : "!_debugLocked': is not true."),但会出现黑屏,并且“在调度程序回调期间引发了以下StateError: 颤动:状态错误:将来已完成”错误。
我也尝试过pushNamedAndRemoveUntil
,但不会正确弹出。例如,我将像这样从Route3弹出到Route2:
class Route3 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Center(
child: FlatButton(
onPressed: () => Navigator.pushNamedAndRemoveUntil(
context, 'route/two', ModalRoute.withName('route/one')),
child: Text('route/three'))),
);
}
}
我正在推动路线2,并删除所有路线,直到路线1。但是,当我按一下路线2,然后按返回按钮进入.pop时,我只会出现黑屏,而不是转到路线1。
不确定为什么会这样。
感谢您的帮助。谢谢