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

