Flutter 如何在flatter中处理android的back按钮
我从一个页面导航到另一个页面,就像从页面上的按钮导航一样Flutter 如何在flatter中处理android的back按钮,flutter,Flutter,我从一个页面导航到另一个页面,就像从页面上的按钮导航一样 1st Page <---> 2nd Page <---> 3rd Page <---> 4th Page 第1页第2页第3页第4页 如果在点击安卓系统的后退按钮后我在任何页面上,我想导航到主页,而不是上一页 比如,如果我在第2页,如果我按下后退按钮,我会进入第1页,但我想弹出堆栈上的所有元素,然后进入主主页 Future<bool> pushPage(BuildContext c
1st Page <---> 2nd Page <---> 3rd Page <---> 4th Page
第1页第2页第3页第4页
如果在点击安卓系统的后退按钮后我在任何页面上,我想导航到主页,而不是上一页
比如,如果我在第2页,如果我按下后退按钮,我会进入第1页,但我想弹出堆栈上的所有元素,然后进入主主页
Future<bool> pushPage(BuildContext context) {
// return Navigator.of(context).pop(true);
return Navigator.of(context).pushNamedAndRemoveUntil('/quiz2',
ModalRoute.withName("/landingPage"));
}
class _Quiz1State extends State<Quiz1> {
bool hasSolved = false;
int solvedOption = 0;
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async {
pushPage(context);
return false;
},
child: Scaffold(
body: Stack(
alignment: Alignment.topCenter,
children: [
Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: [
Color(0xffBD00FF),
Color(0xffF1509E),
],
),
),
),
mainQuiz(),
Container(
child: uiElements(context),
margin: EdgeInsets.only(top: 16),
),
],
),
),
);
}
未来推送页(构建上下文){
//返回Navigator.of(context.pop)(true);
返回Navigator.of(context.pushNamedRemoveUntil('/quiz2',
ModalRoute.withName(“/landingPage”);
}
类Quiz1State扩展状态{
bool hasSolved=false;
int solvedOption=0;
@凌驾
小部件构建(构建上下文){
返回式示波器(
onWillPop:()异步{
pushPage(上下文);
返回false;
},
孩子:脚手架(
主体:堆栈(
对齐:alignment.topCenter,
儿童:[
容器(
装饰:盒子装饰(
梯度:线性梯度(
开始:对齐.bottomCenter,
结束:对齐。上止点,
颜色:[
颜色(0xffBD00FF),
颜色(0xffF1509E),
],
),
),
),
mainquick(),
容器(
子元素:uiElements(上下文),
页边距:仅限边缘集(顶部:16),
),
],
),
),
);
}
mainquick()函数是第二页函数,在第一页之后使用Navigator.push替换Navigator.push 您也可以使用此选项进入第一页:
Navigator.of(context).popUntil((route) => route.isFirst);
我们知道Navigator.pop()会将页面移到堆栈中可用的最上面的页面。还有另一个名为Navigator.poptuntil()的函数,它会不断从堆栈中弹出页面,直到到达所需页面为止
首先(如果您还没有这样做),您需要为所有页面命名。当您在函数中引用这些页面时,它们将充当该页面的ID卡。对于小部件MaterialApp所在树的最顶部,请执行以下操作:
MaterialApp(
home: new Screen1(),
routes: <String, WidgetBuilder> {
'/screen1': (BuildContext context) => new Screen1(),
'/screen2' : (BuildContext context) => new Screen2(),
'/screen3' : (BuildContext context) => new Screen3(),
'/screen4' : (BuildContext context) => new Screen4()
},
)
Navigator.popUntil(context, ModalRoute.withName('/screen1'));
这将不断弹出小部件,直到它到达屏幕1。
希望这能解决你的问题
注意:
一旦您在一开始就预定义了所有路线,就不用调用Navigator.push(context,MaterialPageRoute((context)=>Screen1());
您可以这样做:
Navigator.pushNamed(上下文“/screen1”);
编辑:
假设您的主页尚未出现在堆栈中,并且您希望在弹出所有屏幕后显示它。您可以执行以下操作:
Navigator.of(context).pushName和removeUntil('/homepage',(Route-Route)=>false);
这将在删除堆栈中的所有其他屏幕后添加Homepage()。[(路由)=>false”将从堆栈中弹出所有屏幕。]。
然后,如果您只想弹出屏幕直到到达给定屏幕(比如直到我们到达屏幕1),您可以执行以下操作:
Navigator.of(context).pushnamedandremoveintill('/homepage','/screen1'));
我不会使用WillPopScope作为父项,我会调用Navigator返回该页面。我会使用这个方法PushAndRemove,直到希望它能帮助您。如果我使用Navigator.pushReplacement代替Navigator.push,您能在我的代码中将我解释为一个简单的示例吗页面返回当您使用pushReplacement时,新状态将替换当前状态和已删除的当前状态。因此,当您单击“上一步”按钮(物理或软件)时,您将返回到第一个状态。