Flutter Widgets Binding Observer

问题描述 投票:0回答:1

在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"));


      }}
flutter onresume
1个回答
0
投票

在登录页中不要使用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。

© www.soinside.com 2019 - 2024. All rights reserved.