无法将参数类型 'double?' 分配给参数类型 'double'。飞镖(argument_type_not_assignable)

The argument type 'double?' can't be assigned to the parameter type 'double'. dart(argument_type_not_assignable)

我正在尝试获取用户当前位置,但我在 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,
          ),
        ),
      );
    });
  }

您收到的错误来自空安全,类型 double? 意味着它可以是 doublenull,但您的参数只接受 double,没有 null.

为此,您可以通过在变量末尾添加 ! 来“强制”使用 'non-null' 变量,但这样做时要小心。

CameraPosition(
    target: LatLng(l.latitude!, l.longitude!),
    zoom: 15,
)

您可以在官方文档中了解更多关于 null-safety 语法和原则:https://flutter.dev/docs/null-safety

您还可以对局部变量进行空检查,从而使您的代码空安全:

    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,
            ),
          ),
        );
      }
    });
  }

从逻辑上讲,将动画设为 null latitude/longitude 是没有意义的,因此如果是这种情况,您可以完全跳过该侦听器调用。

Filip talks about this situation & handling here.

上述解决方案对我不起作用,如果它对您也不起作用,问题将是因为您尝试访问的两个变量都必须进行空检查,所以只需这样做,

CameraPosition(
target: LatLng(l!.latitude!, l!.longitude!),
zoom: 15,

) 只需添加!在l前面,另一个在纬度或经度前面,这将完美修复代码