doNativeTraversalsSync method

  1. @override
Future<void> doNativeTraversalsSync(
  1. ResourceDataHolder holder
)
override

Implementation

@override
Future<void> doNativeTraversalsSync(ResourceDataHolder holder) {
  var completer = Completer();
  if (!isInit) {
    holder.resultCode = FetchResultCode.ffiError;
    holder.errorMsg = 'call native processor error, wrapper is destroyed';
    completer.complete();
  } else {
    final paramsPair =
        encodeObject({_kUriKey: holder.url, _kReqHeadersKey: holder.requestHeaders ?? {}});

    if (paramsPair == null) {
      holder.resultCode = FetchResultCode.encodeParamsError;
      holder.errorMsg = 'call native processor error, invalid params';
      completer.complete();
    } else {
      _api._onDartInvoke(_id, paramsPair.left, paramsPair.right, generateCallback((value) {
        if (value is Map) {
          holder.resultCode = parseResultCode(value.safeGet<int>(_kResultCodeKey) ?? -1);
          holder.buffer = value.safeGet<Uint8List>(_kBufferKey);
          holder.responseHeaders = value.safeGetMap<String, String>(_kRspHeadersKey);
          if (holder.resultCode != FetchResultCode.ok) {
            holder.errorMsg = 'call native processor error';
          }
        } else {
          holder.resultCode = FetchResultCode.invalidResultError;
          holder.errorMsg = 'call native processor error, invalid result';
        }
        completer.complete();
      }));
    }
  }
  return completer.future;
}