connect method
Establishes a connection to the resource referenced by this UrlConnection.
Must be implemented by subclasses to perform protocol-specific logic
(e.g., building a HttpClientRequest, sending the request, and receiving the response).
Throws a NetworkException if any error occurs during the connection process.
Implementation
@override
Future<void> connect() async {
if (_connected) return;
final client = HttpClient();
try {
final request = await client.getUrl(url.toUri());
_setRequest(request);
final response = await request.close();
_setResponse(response);
} on SocketException catch (e) {
throw NetworkException(
'Failed to connect to ${url.toString()}: ${e.message}',
cause: e
);
} on HandshakeException catch (e) {
throw NetworkException(
'SSL/TLS handshake failed for ${url.toString()}: ${e.message}',
cause: e
);
} on HttpException catch (e) {
throw NetworkException(
'HTTP error for ${url.toString()}: ${e.message}',
cause: e
);
} catch (e) {
throw NetworkException(
'An unknown network error occurred for ${url.toString()}: $e',
cause: e
);
} finally {
client.close(); // Ensure the client is closed
}
}