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

Flutter页面导航报错:type 'String' is not a subtype of type 'Route<Object?>'

解决方案:type 'String' is not a subtype of type 'Route<Object?>' in type cast

这个错误的核心原因是路由配置存在问题,框架试图将字符串(而非合法的Route对象)转换为Route类型,导致类型转换失败。以下是具体修复步骤:

  • 检查路由注册是否正确
    在你的MaterialApp(或CupertinoApp)配置中,确保命名路由/home的映射关系是返回Widget的builder函数,而非字符串:

    // 正确的路由注册示例
    MaterialApp(
      routes: {
        '/home': (context) => HomePage(), // 这里必须返回Widget的builder
        '/cart': (context) => CartPage(),
      },
    )
    

    如果你使用onGenerateRoute动态生成路由,确保返回的是MaterialPageRoute这类Route子类,而非字符串:

    MaterialApp(
      onGenerateRoute: (settings) {
        if (settings.name == '/home') {
          return MaterialPageRoute(builder: (context) => HomePage()); // 正确返回Route对象
        }
        // 其他路由处理逻辑
        return MaterialPageRoute(builder: (context) => NotFoundPage());
      },
    )
    

    错误的路由配置(比如把路由映射到字符串)会直接触发这个类型转换报错。

  • 确认Navigator调用逻辑
    你当前的Navigator.pushNamedAndRemoveUntil(context, '/home', (route) => false);写法本身是正确的——它会跳转到首页,并清空之前的路由栈(实现无法返回购物车的需求)。只要路由注册正确,这个方法就能正常工作。

  • 额外排查点
    确保调用Navigator时使用的context是包含Navigator的上下文(比如页面组件的context,而非MaterialApp本身的context),否则可能导致路由查找异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:02:55