getPreviewExtendedData method

ProgressListener? getPreviewExtendedData(
  1. void onComplete(
    1. GemError error,
    2. SearchableParameterList? parameters
    ), {
  2. PTStopScheduleFilter? filter,
})

Asynchronously retrieve the preview extended data for this item.

The operation is asynchronous and delivers results via the provided callback.

Parameters

Parameters

  • onComplete: Function called when the operation is completed. The function is called with:
    • GemError.success for error and non-null parameters on success.
    • GemError.invalidInput for error and null parameters if no listener was provided or the provided filter is inconsistent (negative time; empty string entry in lineNames / headings; headings non-empty while lineNames is empty) - validated client-side, no request is sent.
    • GemError.couldNotStart for error and null parameters if the request couldn't be started.
    • GemError.notSupported for error and null parameters if called even though hasPreviewExtendedData returned false.
    • GemError.general for error and null parameters in any other error case.
    • Other error codes for error and null parameters if an error occurred.
  • filter: Optional departures filter (public transport items only). Narrows only the trips (departures) section of the preview extended data - the stops[].routes[] line catalogue is always returned complete. An empty / omitted filter produces the legacy, unfiltered request. See PTStopScheduleFilter.

Returns

See also:

Implementation

ProgressListener? getPreviewExtendedData(
  void Function(GemError error, SearchableParameterList? parameters)
  onComplete, {
  PTStopScheduleFilter? filter,
}) {
  final EventDrivenProgressListener progListener =
      EventDrivenProgressListener();
  GemKitPlatform.instance.registerEventHandler(progListener.id, progListener);
  final SearchableParameterList params = SearchableParameterList();

  progListener.registerOnCompleteWithData((
    int err,
    String hint,
    Map<dynamic, dynamic> json,
  ) {
    GemKitPlatform.instance.unregisterEventHandler(progListener.id);
    if (err != 0) {
      onComplete(GemErrorExtension.fromCode(err), null);
    } else {
      onComplete(GemErrorExtension.fromCode(err), params);
    }
  });

  // An omitted or empty filter routes to the legacy call path - both produce identical requests.
  final bool useFilter = filter != null && !filter.isEmpty;

  final OperationResult resultString = objectMethod(
    pointerId,
    'OverlayItem',
    useFilter ? 'getPreviewExtendedDataFiltered' : 'getPreviewExtendedData',
    args: <String, dynamic>{
      'list': params.pointerId,
      'listener': progListener.id,
      if (useFilter) ...filter.toJson(),
    },
  );

  final int id = resultString['result'];

  if (id != 0) {
    GemKitPlatform.instance.unregisterEventHandler(progListener.id);
    onComplete(GemErrorExtension.fromCode(id), null);
    return null;
  }

  return progListener;
}