Currently, the onConnection callback to webSocketHandler is untyped (it's just a Function).
Handler webSocketHandler(Function onConnection,
{Iterable<String>? protocols,
Iterable<String>? allowedOrigins,
Duration? pingInterval})
onConnection is expecting one of two forms:
void Function(WebSocketChannel webSocket)
or
void Function(WebSocketChannel webSocket, String? subprotocol)
If the first form is passed into the param then it is automatically promoted to the 2nd form
if (onConnection is! void Function(Never, Never)) {
final innerOnConnection = onConnection;
// ignore: inference_failure_on_untyped_parameter, avoid_dynamic_calls
onConnection = (webSocket, _) => innerOnConnection(webSocket);
}
I'd like to convert the param to include type information. I think it has to be like this:
typedef ConnectionCallback = void Function(
WebSocketChannel ws, String? subprotocol);
i.e., the caller has to pass in a closure that has two params, even if they never intend to use the subprotocol param. I suspect that 99% of users are currently just passing in a closure w/ one param, so this would require them to update their code.
Even making the typedef into something like typedef ConnectionCallback = void Function(WebSocketChannel ws, [String? subprotocol]); would require their closure to still define the optional param.
Is there any typedef that would let the user not need to have a closure w/ two params?
Or should we specialize webSocketHandler; have the current one take a closure w/ one param (the created websocket), and have a webSocketHandlerSubProtocol() which takes a closure w/ two params?
Currently, the
onConnectioncallback towebSocketHandleris untyped (it's just aFunction).onConnectionis expecting one of two forms:or
If the first form is passed into the param then it is automatically promoted to the 2nd form
I'd like to convert the param to include type information. I think it has to be like this:
i.e., the caller has to pass in a closure that has two params, even if they never intend to use the subprotocol param. I suspect that 99% of users are currently just passing in a closure w/ one param, so this would require them to update their code.
Even making the typedef into something like
typedef ConnectionCallback = void Function(WebSocketChannel ws, [String? subprotocol]);would require their closure to still define the optional param.Is there any typedef that would let the user not need to have a closure w/ two params?
Or should we specialize
webSocketHandler; have the current one take a closure w/ one param (the created websocket), and have awebSocketHandlerSubProtocol()which takes a closure w/ two params?