pickMultipleFilesAsync method

Future<List<StorageFile>> pickMultipleFilesAsync()

Implementation

Future<List<StorageFile>> pickMultipleFilesAsync() {
  final retValuePtr = calloc<COMObject>();
  final completer = Completer<List<StorageFile>>();

  final hr = ptr.ref.vtable
          .elementAt(16)
          .cast<
              Pointer<
                  NativeFunction<
                      HRESULT Function(Pointer, Pointer<COMObject>)>>>()
          .value
          .asFunction<int Function(Pointer, Pointer<COMObject>)>()(
      ptr.ref.lpVtbl, retValuePtr);

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

  final asyncOperation =
      IAsyncOperation<IVectorView<StorageFile>>.fromRawPointer(
          retValuePtr,
          creator: (Pointer<COMObject> ptr) => IVectorView.fromRawPointer(ptr,
              creator: StorageFile.fromRawPointer,
              iterableIid: '{9ac00304-83ea-5688-87b6-ae38aab65d0b}'));
  completeAsyncOperation(
      asyncOperation, completer, () => asyncOperation.getResults().toList());

  return completer.future;
}