在Flutter中,我想回到我离开应用的页面。但当我试图返回时,它总是导航到LoginPage。例如,我有3个页面:LoginPage,WorkoutPage,ProgressPage。 当我在ProgressPage上的时候,我离开了应用,但是当我恢复的时候,它导航到了LoginPage。我在登录页面中使用了以下代码。
登录页面
class ProgressTabState extends State with WidgetsBindingObserver{
AppLifecycleState state;
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState appLifecycleState) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
state = appLifecycleState;
}
在登录页面,我使用这段代码来导航到MainTab。
Navigator.push(
context,
MaterialPageRoute(
builder: (_) {
return MainTabs();
},
),
);
在主标签中,我有两个页面的Tabbarviews,分别是Workoutpage和ProgressPage。Workoutpage和ProgressPage。这是锻炼页面。
class WorkoutTabState extends State <WorkoutTab> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body:Text("Workout Page"),
);
}
进度页
class ProgressTabState extends State with WidgetsBindingObserver{
AppLifecycleState state;
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
WidgetsBinding.instance.removeObserver(this);
}
@override
void didChangeAppLifecycleState(AppLifecycleState appLifecycleState) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
state = appLifecycleState;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body:Text("Progress Page"));
}}
在登录页中不要使用Navigator.push,而是使用Navigator.of(context).pushNamedAndRemoveUntil。
不同的是Navigator.push会把登录页面作为第一页,所以它会一直回落到登录页面,在成功登录后你不希望这样,你需要从路由堆栈中删除登录页面,通过使用Navigator.of(context).pushNamedAndRemoveUntil,现在当在main和progress之间导航时使用Navigator.push这将使主页面作为第一条路由来回落到Please read about it heare https:/api.flutter.devflutterwidgetsNavigatorStatepushAndRemoveUntil.html。