Flutter Widgets 绑定观察者
Flutter Widgets Binding Observer
在 Flutter 中,我想返回到我离开应用程序的页面。但是当我尝试返回时,它总是导航到 LoginPage。例如,我有 3 page.LoginPage,WorkoutPage,ProgressPage.Login 页面是我的启动器。当我在 ProgressPage 时,我离开了应用程序。但是当我恢复时,它导航登录 Page.I 在登录页面中使用了此代码。
登录页面
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。锻炼页面和进度页面。这是锻炼页面。
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,现在在主要和进度之间导航时使用 Navigator.push
这将使主页成为回退到的第一条路线
请仔细阅读
https://api.flutter.dev/flutter/widgets/NavigatorState/pushAndRemoveUntil.html
在 Flutter 中,我想返回到我离开应用程序的页面。但是当我尝试返回时,它总是导航到 LoginPage。例如,我有 3 page.LoginPage,WorkoutPage,ProgressPage.Login 页面是我的启动器。当我在 ProgressPage 时,我离开了应用程序。但是当我恢复时,它导航登录 Page.I 在登录页面中使用了此代码。
登录页面
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。锻炼页面和进度页面。这是锻炼页面。
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,现在在主要和进度之间导航时使用 Navigator.push 这将使主页成为回退到的第一条路线 请仔细阅读 https://api.flutter.dev/flutter/widgets/NavigatorState/pushAndRemoveUntil.html