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

Flutter登录成功后无法跳转页面问题求助(附代码)

Flutter JWT登录后页面跳转失败排查与解决方案

常见问题排查与修复方案

1. 路由配置是否正确

确保目标页面已在MaterialApp的路由表中注册,或者跳转时使用了正确的路由方式:

MaterialApp(
  routes: {
    '/login': (context) => LoginPage(),
    '/home': (context) => HomePage(), // 必须注册目标页面路由
  },
);

如果使用无命名路由,跳转代码需传入正确的页面实例:

Navigator.push(context, MaterialPageRoute(builder: (context) => HomePage()));

2. 跳转逻辑是否在异步回调内执行

JWT登录是异步操作,跳转代码必须放在登录请求成功的回调里,避免逻辑提前触发:

// AuthController中的登录方法示例
Future<void> login(String email, String password) async {
  try {
    final response = await http.post(
      Uri.parse('你的登录接口地址'),
      body: {'email': email, 'password': password},
    );
    if (response.statusCode == 200) {
      // 解析并存储JWT Token
      final token = jsonDecode(response.body)['token'];
      await SharedPreferences.getInstance().then((prefs) {
        prefs.setString('token', token);
      });
      // 登录成功后执行跳转
      Navigator.pushReplacementNamed(context, '/home');
    }
  } catch (e) {
    // 处理登录错误
  }
}

注意:如果AuthController无法直接获取context,可以通过GlobalKey<NavigatorState>或状态管理工具(如GetX、Provider)传递上下文或触发跳转事件。

3. 状态管理是否正确更新

如果用了状态管理工具,要确保登录成功后状态已更新,且跳转逻辑正确触发:

// GetX AuthController示例
class AuthController extends GetxController {
  RxBool isLoggedIn = false.obs;

  Future<void> login(String email, String password) async {
    // 登录请求逻辑...
    if (登录成功) {
      isLoggedIn.value = true;
      Get.offAllNamed('/home'); // 使用GetX自带的跳转方法更可靠
    }
  }
}

避免依赖状态监听触发跳转时,因监听逻辑遗漏导致跳转失败。

4. 路由守卫是否拦截了跳转

如果设置了路由守卫(如检查Token是否存在),需确认Token已正确存储,守卫逻辑无错误:

MaterialApp(
  onGenerateRoute: (settings) async {
    final prefs = await SharedPreferences.getInstance();
    final token = prefs.getString('token');
    if (settings.name == '/home' && token == null) {
      return MaterialPageRoute(builder: (context) => LoginPage());
    }
    // 其他路由处理逻辑
  },
);

排查小技巧:登录成功后立即打印Token,确认是否已正确写入本地存储。

针对你的代码的额外检查点

  • 确认跳转代码是在登录请求成功且Token存储完成后执行的
  • 检查跳转时使用的context是否有效(未被页面销毁)
  • 优先使用pushReplacementNamed或Get.offAllNamed这类替换路由的方法,避免用户返回登录页

内容的提问来源于stack exchange,提问作者Sitt Paing Minn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:22:37