Flutter跳转ReviewPage时出现Null与String类型不匹配错误
排查与解决「type 'Null' is not a subtype of type 'String'」错误
1. 先查ReviewPage的参数接收逻辑
这个错误核心是某个本该是String的变量被塞了null,首当其冲看ReviewPage的构造函数——是不是声明了必填的非空String参数,但跳转时传了null:
// 错误示例:参数要求非空String,但跳转时可能传null class ReviewPage extends StatelessWidget { final String placeId; ReviewPage({required this.placeId}); // ... }
2. 检查PlaceDetailsPage的跳转代码
看点击「Make a review」按钮时的跳转逻辑,确认传递给ReviewPage的参数有没有null风险:
// 错误示例:widget.placeId可能是可空类型,直接传递会触发错误 Navigator.push( context, MaterialPageRoute( builder: (context) => ReviewPage(placeId: widget.placeId), ), );
如果PlaceDetailsPage里的placeId是String?可空类型,直接传给要求非空的ReviewPage参数,就会炸。
3. 针对性解决方法
确保参数非空再跳转
跳转前先做null校验,避免无效跳转:if (widget.placeId != null) { Navigator.push( context, MaterialPageRoute( builder: (context) => ReviewPage(placeId: widget.placeId!), ), ); } else { // 给用户提示,比如弹个SnackBar ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text("无法获取地点信息,无法提交评价")), ); }让ReviewPage支持可空参数
如果评价页面允许无地点ID的场景,把参数改成可空类型,使用时处理null情况:class ReviewPage extends StatelessWidget { final String? placeId; const ReviewPage({this.placeId}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(placeId ?? "匿名评价")), // ... ); } }确认PlaceDetailsPage的参数稳定性
检查从WelcomePage传到PlaceDetailsPage的参数,是不是在PlaceDetailsPage的逻辑中被意外置为null了——比如某些异步操作、状态更新把原本非空的变量改成了null。
4. 额外排查点
如果不是跳转参数的问题,就去ReviewPage里找其他String类型的变量:比如从API拉取的数据、状态管理里的字段,有没有被赋值为null的情况,逐个排查即可。
内容的提问来源于stack exchange,提问作者Ismah Ismail
相关产品推荐
相关产品推荐

