addSerializedJavaScriptHandler<TRequest, TResponse> method

void addSerializedJavaScriptHandler<TRequest, TResponse>({
  1. required String handlerName,
  2. required TRequest decodeRequest(
    1. Object? value
    ),
  3. required FutureOr<TResponse> callback(
    1. TRequest request
    ),
  4. required Object? encodeResponse(
    1. TResponse response
    ),
})

Adds a handler for a JSON string payload and serializes its response.

This is useful when an existing page contract sends one serialized JSON argument rather than a structured JavaScript object.

Implementation

void addSerializedJavaScriptHandler<TRequest, TResponse>({
  required String handlerName,
  required TRequest Function(Object? value) decodeRequest,
  required FutureOr<TResponse> Function(TRequest request) callback,
  required Object? Function(TResponse response) encodeResponse,
}) {
  addJsonJavaScriptHandler<TRequest, TResponse>(
    handlerName: handlerName,
    decodeRequest: (rawRequest) {
      final serialized = rawRequest is String
          ? rawRequest
          : jsonEncode(rawRequest);
      return decodeRequest(jsonDecode(serialized));
    },
    callback: callback,
    encodeResponse: (response) => jsonEncode(encodeResponse(response)),
  );
}