move method Null safety

Future<void> move(
  1. String profileToken,
  2. PanTilt direction
)

Implementation

Future<void> move(String profileToken, PanTilt direction) async {
  loggy.debug('move');

  try {
    await relativeMove(
        profileToken, PtzPosition(panTilt: direction, zoom: Zoom(x: 0)));
  } catch (err) {
    PanTilt? panTilt;

    Zoom? zoom;

    loggy.error('Relative move failed');

    loggy.error(err);

    loggy.error('Attempting workaround with AbsoluteMove');

    final ptzStatus = await onvif.ptz.getStatus(profileToken);

    if (ptzStatus.position.panTilt != null) {
      panTilt = PanTilt(
          x: ptzStatus.position.panTilt!.x + direction.x,
          y: ptzStatus.position.panTilt!.y + direction.y);
    } else {
      panTilt = PanTilt(x: 0, y: 0);
    }

    if (ptzStatus.position.zoom != null) {
      zoom = Zoom(x: ptzStatus.position.zoom!.x);
    }

    await absoluteMove(
        profileToken, PtzPosition(panTilt: panTilt, zoom: zoom));
  }
}