Dart HTTP GET JSON with timeout

Dart
import 'dart:convert';
import 'dart:io';

Future<Map<String, dynamic>> getJson(String url, {Duration timeout = const Duration(seconds: 10)}) async {
  final client = HttpClient()..connectionTimeout = timeout;
  try {
    final request = await client.getUrl(Uri.parse(url)).timeout(timeout);
    request.headers.set(HttpHeaders.acceptHeader, 'application/json');
    final response = await request.close().timeout(timeout);
    if (response.statusCode != 200) {
      throw HttpException('HTTP ${response.statusCode} for $url');
    }
    final body = await response.transform(utf8.decoder).join().timeout(timeout);
    final decoded = jsonDecode(body);
    if (decoded is! Map<String, dynamic>) throw const FormatException('Expected JSON object');
    return decoded;
  } finally {
    client.close(force: true);
  }
}