completeOperation method
Makes this CancelableCompleter.operation complete with the same result
as result.
If propagateCancel is true (the default), and the operation of this
completer is canceled before result completes, then result is also
canceled.
Implementation
void completeOperation(CancelableOperation<T> result,
    {bool propagateCancel = true}) {
  if (!_mayComplete) throw StateError('Already completed');
  _mayComplete = false;
  if (isCanceled) {
    if (propagateCancel) result.cancel();
    result.value.ignore();
    return;
  }
  result.then<void>((value) {
    _inner?.complete(
        value); // _inner is set to null if this.operation is cancelled.
  }, onError: (error, stack) {
    _inner?.completeError(error, stack);
  }, onCancel: () {
    operation.cancel();
  });
  if (propagateCancel) {
    _cancelCompleter?.future.whenComplete(result.cancel);
  }
}