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

Dart空安全下路由提取参数报错String?无法赋值给String类型问题

报错原因

Dart 2.12+ 开启空安全后,存在两个容易被忽略的类型规则:

  • 即使你已经将路由参数强转为Map<String, String>类型,通过[]取Map值的返回值天生是可空的String?——编译期无法确认'title'这个键一定存在于Map中,所以取值结果默认按可空处理。
  • Text组件的文本参数要求必须是不可空的String类型,可空的String?自然无法直接传入,就触发了这个报错。
  • 你之前在ModalRoute.of(context)后加的!是符合规范的,只要确认该页面只会通过路由跳转打开、不会出现路由实例为null的场景就没有问题。

解决方案

根据你的业务场景二选一即可:

方案1:确定参数必传时直接断言非空

如果你能保证跳转时一定会传入title参数,直接在取值后加!告知编译器该值一定不为空:

final categoryTitle = routeArgs['title']!;

修改后categoryTitle的类型会被推导为不可空的String,就可以直接传给Text组件。

方案2:设置默认值兜底(更稳定)

如果存在参数缺失的可能,用空合并运算符??给空值场景设置默认值,避免崩溃:

final categoryTitle = routeArgs['title'] ?? '默认分类名称';

可选优化

如果项目里路由传参的场景较多,更推荐用自定义的实体类封装传参,而非用Map传递,可以避免手写键名拼写错误、类型不匹配的隐性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:07