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
相关产品推荐
相关产品推荐

