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