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);
}
}