我是 flutter 的新手,我正在开发一个具有多个屏幕的应用程序。
我想知道如何阻止 flutter 创建同一路线的多个屏幕,
例如我有 第1页和 第2页 ,如果我单击按钮导航到第 2 页并再次单击同一个按钮,应用程序将推送一个新屏幕 第2页我会得到它两次,如果我点击返回按钮,它会将我发送回第一个创建的 第2页
有没有办法只创建每个页面一次然后重新打开它,如果它已经被推送到堆栈中?
我正在使用 Navigator.push
对于我所有的导航
最佳答案
在这里使用一个简单的逻辑
Navigator.push(context,route)
. Navigator.pushReplacement(context,route)
. 如果您使用的是命名路由,则为
Navigator.pushNamed(context,name)
. Navigator.pushReplacementNamed(context,name)
. 完整代码示例
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SO(),
);
}
}
class SO extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageOne(),
);
}
}
class PageOne extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page 1'),
),
backgroundColor: Colors.amber,
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
RaisedButton(
onPressed: () {
print('creating replacement page 1');
Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) {
return PageOne();
}));
},
child: Text('Go to page 1'),
),
RaisedButton(
onPressed: () {
print('creating new page 2');
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) {
return PageTwo();
}));
},
child: Text('Go to page 2'),
),
],
),
),
);
}
}
class PageTwo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Page 2'),
),
backgroundColor: Colors.brown,
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
RaisedButton(
onPressed: () {
print('creating new page 1');
Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => PageOne()));
},
child: Text('Go to page 1'),
),
RaisedButton(
onPressed: () {
print('creating replacement page 2');
Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => PageTwo()));
},
child: Text('Go to page 2'),
),
],
),
),
);
}
}
关于Flutter 导航,重新打开页面而不是再次推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59457306/