getGeopositionAsyncWithAgeAndTimeout method

Future<Geoposition?> getGeopositionAsyncWithAgeAndTimeout(
  1. Duration maximumAge,
  2. Duration timeout
)

Implementation

Future<Geoposition?> getGeopositionAsyncWithAgeAndTimeout(
    Duration maximumAge, Duration timeout) {
  final retValuePtr = calloc<COMObject>();
  final completer = Completer<Geoposition?>();
  final maximumAgeDuration = maximumAge.inMicroseconds * 10;
  final timeoutDuration = timeout.inMicroseconds * 10;

  final hr =
      ptr.ref.vtable
              .elementAt(14)
              .cast<
                  Pointer<
                      NativeFunction<
                          HRESULT Function(Pointer, Uint64 maximumAge,
                              Uint64 timeout, Pointer<COMObject>)>>>()
              .value
              .asFunction<
                  int Function(Pointer, int maximumAge, int timeout,
                      Pointer<COMObject>)>()(
          ptr.ref.lpVtbl, maximumAgeDuration, timeoutDuration, retValuePtr);

  if (FAILED(hr)) {
    free(retValuePtr);
    throw WindowsException(hr);
  }

  final asyncOperation = IAsyncOperation<Geoposition?>.fromRawPointer(
      retValuePtr,
      creator: Geoposition.fromRawPointer);
  completeAsyncOperation(
      asyncOperation, completer, asyncOperation.getResults);

  return completer.future;
}