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

Flutter点击Continue按钮无法跳转Login页面问题求助

问题解决:Navigator.onGenerateRoute为null导致命名路由跳转失败

错误根源

出现Navigator.onGenerateRoute was null, but the route named "/login" was referenced错误,是因为你的MaterialApp未正确配置命名路由的处理逻辑,导致Navigator.pushNamed找不到对应路由。

正确配置步骤

1. 统一管理路由映射(Routes.dart)

用常量定义路由名称,避免拼写错误:

import 'package:flutter/material.dart';
import 'path/to/your/login_page.dart'; // 替换为你的登录页实际路径

class Routes {
  static const String login = "/login";

  static Route<dynamic> generateRoute(RouteSettings settings) {
    switch (settings.name) {
      case login:
        return MaterialPageRoute(builder: (_) => const LoginPage());
      // 可添加其他路由映射
      default:
        // 处理未定义路由
        return MaterialPageRoute(
          builder: (_) => Scaffold(
            body: Center(child: Text("未找到路由: ${settings.name}")),
          ),
        );
    }
  }
}

2. 配置MaterialApp(main.dart)

必须给MaterialApp设置onGenerateRoute或routes属性,二选一即可:

import 'package:flutter/material.dart';
import 'Routes.dart';
import 'path/to/your/body_page.dart';

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Title',
      initialRoute: '/',
      home: const BodyPage(),
      // 方式一:使用自定义路由生成器
      onGenerateRoute: Routes.generateRoute,
      // 方式二:直接用routes映射(适合简单场景)
      // routes: {
      //   Routes.login: (context) => const LoginPage(),
      // },
    );
  }
}

3. 正确调用pushNamed(Body.dart)

按钮点击事件中使用与路由表一致的名称,推荐用常量:

import 'package:flutter/material.dart';
import 'Routes.dart';

class BodyPage extends StatelessWidget {
  const BodyPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 两种写法都可行,推荐用常量避免拼写错误
            Navigator.pushNamed(context, Routes.login);
            // Navigator.pushNamed(context, "/login");
          },
          child: const Text("Continue"),
        ),
      ),
    );
  }
}

关键注意点

  • 路由名称大小写敏感,必须完全匹配
  • 不要同时用routes和onGenerateRoute处理同一个路由(优先级:onGenerateRoute > routes)
  • 确保登录页文件已正确导入,无路径错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:55:23