我正在尝试获取用户当前位置,但在 l.latitude 和 l.longitude 上出现此错误
参数类型“double?”不能分配给参数类型“double”。
void _onMapCreated(GoogleMapController _cntlr) {
_controller = _cntlr;
_location.onLocationChanged.listen((l) {
_controller.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(l.latitude, l.longitude),
zoom: 15,
),
),
);
});
}
答案 0 :(得分:2)
您得到的错误来自空安全,double?
类型意味着它可以是 double
或 null
,但您的参数只接受 {{1} },没有double
。
为此,您可以通过在变量末尾添加 null
来“强制”使用“非空”变量,但这样做时要小心。
!
您可以在官方文档中了解有关空安全语法和原则的更多信息:https://flutter.dev/docs/null-safety
答案 1 :(得分:0)
您还可以对局部变量进行空检查,从而使您的代码空安全:
when location changes
if (lat/lon are not null) {
animate camera
}
这样的事情可能会奏效:
void _onMapCreated(GoogleMapController _cntlr) {
_controller = _cntlr;
_location.onLocationChanged.listen((l) {
if (l.latitude != null && l.longitude != null) {
_controller.animateCamera(
CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(l.latitude, l.longitude),
zoom: 15,
),
),
);
}
});
}
从逻辑上讲,将动画设置为空纬度/经度是没有意义的,因此如果是这种情况,您可以完全跳过该侦听器调用。