dart - 如何正确使用 popUntil 到达栈根?
问题描述
我已经推到两个屏幕并希望回到我的主页。我尝试通过使用 popUntil 来做到这一点,但是它没有给我 req 结果而只是显示黑屏。我是否需要为我的主页设置一条新路由,即使我不想创建它的新实例?
我的代码:
class Completed extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Completed Screen',
home: CompleteScreen(),
routes: <String, WidgetBuilder>{
// "/my-app": (BuildContext context) => MyApp()
}
);
}
}
class CompleteScreen extends StatelessWidget{
@override
Widget build(BuildContext context){
Container Complete = Container(
child: Column(
.....
FlatButton(
onPressed: (){
Navigator.popUntil(
context,
ModalRoute.withName('/'),
);
// Navigator.popUntil(context, ModalRoute.withName(Navigator.defaultRouteName));
},
),
],
));
return Scaffold(
body: Complete
);
}
}
我的主页
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
home: DefaultTabController(length: 2,child: MyHomePage(title: '')),
routes: <String, WidgetBuilder>{
"/TaskScreen": (BuildContext context) => new task(),
}
);
}
}
class MyHomePage extends StatelessWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
Widget build(BuildContext context){
final list = ListView.builder(
itemBuilder: (context, position) {
return Ink(
child: InkWell(
onTap: (){
Navigator.of(context).pushNamed("/TaskScreen");
},
child: Card(
...
),),); },);
return Scaffold(
...
}
}
我尝试使用 '/TaskScreen' 和 '/my-app' 但即使这样也没有用。
解决方案
你可以试试这个
Navigator.popUntil(
context,
ModalRoute.withName(
Navigator.defaultRouteName,
),
),
就像defaultRouteName
应用程序启动时打开的第一个屏幕一样。
编辑
因此,如下所述,命名路线不适用于Navigator.defaultRouteName
nor route.isFirst
,我发现解决此问题的最佳方法是在主页中声明您的所有路线,因为这些路线将成为全球性的(或者这就是我所理解的),所以您的代码会结束这样的事情
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'My App',
home: DefaultTabController(length: 2,child: MyHomePage(title: '')),
routes: <String, WidgetBuilder>{
"/": (BuildContext context) => MyApp(), (or MyHomePage())
"/TaskScreen": (BuildContext context) => new task(),
}
);
}
}
完成后,只要您想返回主页,您只需调用
Navigator.popUntil(context, ModalRoute.withName('/'));
希望这对你有用。
推荐阅读
- pandas - 删除列值
- php - 在新的 mongo db 查询命令中按字母顺序排序
- javascript - React Native - TypeError:null 不是对象
- spring - Spring中的Setter注入
- erlang - 如何在 common_test 中启动 ct_logs
- pyqt - 如何在样式表方法中使用 QStyle::StandardPixmap 设置 QTreeView 背景图像?
- c# - 为什么多个短任务最终得到相同的 id?
- java - 基于 Java 套接字的文件传输应用程序客户端在调试时运行,但在正常运行时失败
- python - 如何从 Python 中的多行字符串中提取某些子字符串?
- elasticsearch - 通过 POST 调用进行 ElasticSearch 健康检查