gpt4 book ai didi

flutter - 如何杀死导航堆栈?在 Flutter 中弹出所有以前的屏幕?

转载 作者:IT老高 更新时间:2023-10-28 12:37:32 25 4
gpt4 key购买 nike

所以我有这种将用户从一个屏幕推送到另一个屏幕的演练(总共六个屏幕)。在最后一页中,我希望用户按“完成”并将他带回第一个屏幕,而不能弹回之前的任何屏幕。

现在它会弹出最后一个屏幕,但不会弹出任何其他屏幕,因此它可以将我带回我的原始屏幕,并能够在最后一个屏幕之前弹出回屏幕(希望最后一句话对你有意义,因为弹出了最后一个屏幕,所以我回到了前一个屏幕)。

知道如何解决这个问题吗?

谢谢!

最佳答案

要从导航堆栈中弹出多个屏幕,就像在您给定的场景中一样,我们可以使用 Navigator.popUntil .它需要一个 BuildContext 和一个 RoutePredicate 作为参数。 Navigator 调用 pop 直到给定 RoutePredicate 的返回值为 true。

这是一个非常基本的例子。它使用 ModalRoute.withName创建 RoutePredicate:

enter image description here

import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
routes: {
'/': (BuildContext context) => Home(),
'/another': (BuildContext context) => Another()
},
);
}
}

class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Home'),
RaisedButton(
child: Text('Take me to another screen!'),
onPressed: () => Navigator.pushNamed(context, '/another'),
)
],
),
),
);
}
}

class Another extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RaisedButton(
child: Text('Next screen.'),
onPressed: () => Navigator.pushNamed(context, '/another'),
),
RaisedButton(
child: Text('Pop em all.'),
onPressed: () => Navigator.popUntil(
context,
ModalRoute.withName('/'),
),
),
],
),
),
);
}
}

关于flutter - 如何杀死导航堆栈?在 Flutter 中弹出所有以前的屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53285612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com