You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Firebase Auth后用户登录登出未自动跳转页面问题求助

故障根因
  • 存在多层MaterialApp嵌套:你在MyApp中已经初始化了根MaterialApp,Wrapper中根据登录状态又分别返回了两个独立的子MaterialApp,每个MaterialApp都有独立的导航栈。你从Welcome页跳转注册页时,路由压入了未登录状态下的子MaterialApp导航栈,注册成功后Wrapper会销毁整个未登录子MaterialApp、替换为已登录子MaterialApp,但当前显示页面还停留在旧导航栈的注册页,不会自动切换。
  • 注册逻辑缺少后续处理:调用注册接口成功后没有主动清理旧导航栈、跳转目标页面,导致页面停留在注册页。
修复步骤

1. 移除冗余的MaterialApp嵌套,统一路由管理

修改MyApp代码,移除根节点的MaterialApp,将全局唯一的MaterialApp放到Wrapper中统一管理路由:

class MyApp extends StatelessWidget {
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: _initialization,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          return StreamProvider<User>.value(
            value: AuthService().user,
            child: const Wrapper(),
          );
        }
        return const MaterialApp(home: Center(child: CircularProgressIndicator()));
      },
    );
  }
}

修改Wrapper代码,统一配置全量路由,根据用户状态动态控制根路由显示的页面:

class Wrapper extends StatelessWidget {
  const Wrapper({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final user = Provider.of<User>(context);
    return MaterialApp(
      routes: {
        '/': (context) => user != null ? const Home() : const Welcome(),
        '/profile': (context) => const Profile(),
        '/signup': (context) => const SignUp(),
        '/signin': (context) => const SignIn(),
      },
    );
  }
}

2. 注册成功后主动清空导航栈跳转根路由

在注册按钮的点击逻辑中,处理注册结果,成功后清空当前导航栈跳转到根路由,此时全局用户状态已更新,根路由会自动显示Home页:

onPressed: () async {
  // 调用注册方法,inputEmail、inputPassword为你收集的用户输入值
  String res = await AuthService().signUp(inputEmail, inputPassword);
  if (context.mounted) {
    if (res == "") {
      // 注册成功,清空所有历史路由跳转到根页
      Navigator.pushNamedAndRemoveUntil(context, '/', (route) => false);
    } else {
      // 此处可添加错误提示逻辑
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(res)));
    }
  }
}

内容的提问来源于stack exchange,提问作者blessedone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:54:02