getForecast static method

ProgressListener getForecast({
  1. required List<WeatherDurationCoordinates> coords,
  2. void onComplete(
    1. GemError,
    2. List<LocationForecast> locationForecasts
    )?,
})

Retrieves weather forecast for coordinates at specified future times.

The duration in each WeatherDurationCoordinates specifies the time offset into the future for which the forecast is requested.

Parameters

Returns

Also see:

Implementation

static ProgressListener getForecast({
  required final List<WeatherDurationCoordinates> coords,
  void Function(GemError, List<LocationForecast> locationForecasts)?
  onComplete,
}) {
  for (final WeatherDurationCoordinates coord in coords) {
    if (coord.coordinates.latitude.abs() > 90 ||
        coord.coordinates.longitude.abs() > 180) {
      onComplete?.call(GemError.invalidInput, <LocationForecast>[]);

      return EventDrivenProgressListener();
    }
  }

  final LocationForecastList result = LocationForecastList.create();
  final EventDrivenProgressListener listener = EventDrivenProgressListener();
  GemKitPlatform.instance.registerEventHandler(listener.id, listener);

  listener.registerOnCompleteWithData((
    final int err,
    final String hint,
    final Map<dynamic, dynamic> json,
  ) {
    GemKitPlatform.instance.unregisterEventHandler(listener.id);
    if (err == 0) {
      onComplete?.call(GemErrorExtension.fromCode(err), result.getJson());
      result.dispose();
    } else {
      onComplete?.call(GemErrorExtension.fromCode(err), <LocationForecast>[]);
    }
  });
  final OperationResult resultString = staticMethod(
    'Weather',
    'getForecast',
    args: <String, dynamic>{
      'coords': coords,
      'result': result.id,
      'listener': listener.id,
    },
  );
  final GemError errCode = GemErrorExtension.fromCode(resultString['result']);
  if (errCode != GemError.success) {
    onComplete?.call(errCode, <LocationForecast>[]);
  }
  return listener;
}