doNativeTraversalsAsync method

  1. @override
void doNativeTraversalsAsync(
  1. ResourceDataHolder holder,
  2. FetchResourceCallback callback
)
override

Implementation

@override
void doNativeTraversalsAsync(ResourceDataHolder holder, FetchResourceCallback callback) {
  if (!isInit) {
    holder.resultCode = FetchResultCode.ffiError;
    holder.errorMsg = 'call native processor error, wrapper is destroyed';
    callback(holder);
    return;
  }
  final paramsPair = encodeObject({
    _kUriKey: holder.url,
    _kReqHeadersKey: holder.requestHeaders??{}
  });

  if (paramsPair == null) {
    holder.resultCode = FetchResultCode.encodeParamsError;
    holder.errorMsg = 'call native processor error, invalid params';
    callback(holder);
    return;
  }

  _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';
      }
      callback(holder);
    } else {
      holder.resultCode = FetchResultCode.invalidResultError;
      holder.errorMsg = 'call native processor error, invalid result';
      callback(holder);
    }
  }));
}