因此,我有这种演练,它将用户从一个屏幕推送到另一个屏幕(总共六个屏幕)。在最后一页中,我希望用户按“完成”,然后将他带回到第一个屏幕,而又无法弹出到先前的任何屏幕。
现在它会弹出最后一个屏幕,但不会弹出任何其他屏幕,因此它使我回到了原来的屏幕,并且能够跳回到最后一个屏幕之前的屏幕(希望最后一句话对您有意义,因为最后一个屏幕弹出后,我需要回到那个屏幕之前)。
任何想法如何解决?
谢谢!
ten*_*obi 10
您正在寻找的方法是popUntil(),查看实现https://docs.flutter.io/flutter/widgets/Navigator/popUntil.html或https://docs.flutter.io/flutter/widgets/NavigatorState/弹出直到.html
你可能不得不做类似的事情
Navigator.of(context).popUntil(ModalRoute.withName('/my-target-screen'));
Run Code Online (Sandbox Code Playgroud)
(看看https://docs.flutter.io/flutter/widgets/ModalRoute/withName.html)
或使用一些自定义函数(https://docs.flutter.io/flutter/widgets/RoutePredicate.html)。
要从导航堆栈中弹出多个屏幕,就像您给定的情况一样,我们可以使用Navigator.popUntil。它以a BuildContext和a RoutePredicate作为参数。导航器将调用pop直到给定的返回值为RoutePredicatetrue 为止。
这是非常基本的例子。它使用ModalRoute.withName创建RoutePredicate:
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('/'),
),
),
],
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3990 次 |
| 最近记录: |