参数类型“double?”不能分配给参数类型“double”。飞镖(argument_type_not_assignable)

时间:2021-06-25 12:52:22

标签: flutter google-maps dart position

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

2 个答案:

答案 0 :(得分:2)

您得到的错误来自空安全,double? 类型意味着它可以是 doublenull,但您的参数只接受 {{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,
            ),
          ),
        );
      }
    });
  }

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

Filip talks about this situation & handling here