Flutter构建SearchScreen时报The getter 'placeName' was called on null如何解决?
Flutter NoSuchMethodError异常问题解决
错误原因
报错是代码第19行的空校验逻辑失效导致:你仅对placeName属性设置了?? "n/a"的默认值兜底,但此时通过Provider获取的AppData实例中,pickUpLocation属性本身已经是null,在null对象上调用placeName属性会直接触发空对象异常,后续的默认值逻辑不会生效。
通常该场景出现在进入SearchScreen页面时,pickUpLocation还未完成初始化(比如未获取到定位、用户未选择上车点),仍为初始的null值。
解决方案
- 方案1(最快修复):使用Dart空安全调用符
?.先对pickUpLocation做非空判断,修改第19行代码为:
String placeAddress = Provider.of<AppData>(context).pickUpLocation?.placeName ?? "n/a";
当pickUpLocation为null时,表达式会直接返回null,触发??的兜底逻辑返回n/a,不会抛出异常。
- 方案2:在
AppData类初始化时,给pickUpLocation设置默认非空值,比如创建默认的Location实例,placeName设为"请选择上车点",保证pickUpLocation永远不为null。 - 方案3:跳转进入SearchScreen前增加逻辑校验,确认
pickUpLocation已经完成赋值后再执行跳转操作,从业务路径上避免未初始化的场景进入页面。
内容的提问来源于stack exchange,提问作者Luis Carlos Fernandez
相关产品推荐
相关产品推荐

