invoke method

  1. @override
String invoke(
  1. String method,
  2. dynamic params,
  3. InvokeModuleCallback callback
)
override

Implementation

@override
String invoke(String method, params, InvokeModuleCallback callback) {
  Uri uri = _resolveUri(method);
  Map<String, dynamic> options = params;

  _handleError(Object error, StackTrace? stackTrace) {
    String errmsg = '$error';
    if (stackTrace != null) {
      errmsg += '\n$stackTrace';
    }
    callback(error: errmsg);
  }

  if (uri.host.isEmpty) {
    // No host specified in URI.
    _handleError('Failed to parse URL from $uri.', null);
  } else {
    HttpClientResponse? response;
    NetworkOpItem? currentNetworkOp;
    if (enableWebFProfileTracking) {
      currentNetworkOp = WebFProfiler.instance.startTrackNetwork(uri.toString());
    }

    getRequest(uri, options['method'], options['headers'], options['body']).then((HttpClientRequest request) {
      if (_disposed) return Future.value(null);
      return request.close();
    }).then((HttpClientResponse? res) {
      if (res == null) {
        return Future.value(null);
      } else {
        response = res;
        return consolidateHttpClientResponseBytes(res);
      }
    }).then((Uint8List? bytes) {
      if (bytes != null) {
        callback(data: [EMPTY_STRING, response?.statusCode, bytes]);
      } else {
        throw FlutterError('Failed to read response.');
      }
    }).catchError(_handleError).then((value) {
      if (enableWebFProfileTracking) {
        WebFProfiler.instance.finishTrackNetwork(currentNetworkOp!);
      }
    });
  }

  return EMPTY_STRING;
}