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

Flutter Web路由url名称被转换为数字而非正确路径如何解决

Flutter Web路由路径显示为数字的修复方案

该问题本质是路由跳转时传入的路径参数并非预先配置的字符串值,而是传入了数字类型的枚举索引/变量,核心修复步骤如下:

1 排查路由跳转逻辑

找到跳转到目标页面的代码,确认Navigator.pushNamed(或第三方路由的跳转方法)传入的路径参数为字符串类型,而非枚举的索引值:

  • 错误示例:
// 枚举的index属性默认为数字,若TestRoute.screen是第7个枚举值(从0计数),index即为6
Navigator.pushNamed(context, TestRoute.screen.index);
  • 正确写法:
// 直接传入预先配置的字符串路径
Navigator.pushNamed(context, '/tests/screen');

// 若使用枚举管理路由,给枚举绑定路径属性再调用
enum TestRoute {
  screen,
}
extension TestRouteExt on TestRoute {
  String get path {
    switch(this) {
      case TestRoute.screen: return '/tests/screen';
    }
  }
}
// 跳转时调用path属性而非index
Navigator.pushNamed(context, TestRoute.screen.path);

2 检查路由表配置

确认MaterialApp(或CupertinoApp)的routes路由表中,对应页面的key为字符串路径,而非数字:

  • 错误示例:
routes: {
  6: (context) => const TestScreen(), // 错误使用数字作为路由key
}
  • 正确写法:
routes: {
  '/tests/screen': (context) => const TestScreen(), // 路由key为预定义的字符串路径
}

3 第三方路由框架特殊排查

若使用GoRouter等第三方路由框架:

  • 确认GoRoute配置项的path字段为字符串类型
  • 确认跳转时调用go()/push()方法传入的参数为路径字符串,而非数字变量

修改完成后重新编译运行,跳转目标页面即可看到浏览器地址栏正常显示/tests/screen路径。

内容的提问来源于stack exchange,提问作者Márcio Valim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:21:02