How to make network requests in Dart

Fetch data from APIs using Dart's built-in http package

Add the http package

dart pub add http

GET request

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<void> fetchUsers() async {
  final response = await http.get(Uri.parse('https://api.example.com/users'));

  if (response.statusCode == 200) {
    final List<dynamic> data = jsonDecode(response.body);
    for (var user in data) {
      print(user['name']);
    }
  } else {
    throw Exception('Failed to load users: ${response.statusCode}');
  }
}

POST request

Future<void> createUser() async {
  final response = await http.post(
    Uri.parse('https://api.example.com/users'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({'name': 'Ada', 'age': 30}),
  );

  if (response.statusCode == 201) {
    final data = jsonDecode(response.body);
    print('Created user with id: ${data['id']}');
  } else {
    throw Exception('Failed to create user: ${response.statusCode}');
  }
}

PUT, PATCH, DELETE

// PUT — replace entire resource
final putResponse = await http.put(
  Uri.parse('https://api.example.com/users/1'),
  headers: {'Content-Type': 'application/json'},
  body: jsonEncode({'name': 'Ada Lovelace', 'age': 31}),
);

// PATCH — partial update
final patchResponse = await http.patch(
  Uri.parse('https://api.example.com/users/1'),
  headers: {'Content-Type': 'application/json'},
  body: jsonEncode({'age': 31}),
);

// DELETE
final deleteResponse = await http.delete(
  Uri.parse('https://api.example.com/users/1'),
);

Handle errors

Future<void> safeFetch() async {
  try {
    final response = await http
        .get(Uri.parse('https://api.example.com/data'))
        .timeout(Duration(seconds: 10));

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      print(data);
    } else {
      print('Error: ${response.statusCode}');
    }
  } on TimeoutException {
    print('Request timed out');
  } on SocketException {
    print('No internet connection');
  } catch (e) {
    print('Unexpected error: $e');
  }
}