我已推送到两个屏幕,并希望返回到我的主页。我尝试通过使用popUntil来做到这一点,但是它没有给我要求的结果,而只是显示黑屏。即使我不想为其创建新的实例,也需要为主页设置新的路线吗?
我的代码:
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',但是那还是行不通。
答案 0 :(得分:0)
popUntil
中的路线具有名为isFirst
的属性,如果该路线是导航器中的第一条路线,则返回true。因此,在您的情况下,您可以使用类似以下内容的
Navigator.of(context).popUntil((route) {
return route.isFirst;
});
答案 1 :(得分:0)
您可以尝试
Navigator.popUntil(
context,
ModalRoute.withName(
Navigator.defaultRouteName,
),
),
应用defaultRouteName
作为应用启动时打开的第一个屏幕。
编辑
因此,如下所述,命名路由不适用于Navigator.defaultRouteName
或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('/'));
希望对您有用。