Để tạo HTTP requests trong Flutter, bạn có thể sử dụng gói http. Gói này cung cấp một API dễ sử dụng để thực hiện các yêu cầu HTTP đến một server, cho phép bạn gửi và nhận dữ liệu dưới dạng JSON, XML hoặc bất kỳ định dạng nào khác.

Bước 1: Thêm Gói http vào Dự án của Bạn

Để sử dụng gói http, bạn cần thêm nó vào file pubspec.yaml của dự án Flutter của bạn. Mở file này và thêm dòng sau vào phần dependencies:

dependencies:
  http: ^0.14.0  # hoặc phiên bản mới nhất

Sau đó, bạn cần chạy lệnh sau trong terminal để cài đặt gói:

flutter pub get

Bước 2: Tạo Yêu cầu HTTP

Sau khi cài đặt gói http, bạn có thể tạo các yêu cầu HTTP khác nhau như GET, POST, PUT, DELETE, v.v. Dưới đây là các ví dụ cụ thể cho từng loại yêu cầu.

Yêu cầu GET

Yêu cầu GET thường được sử dụng để lấy dữ liệu từ một API. Ví dụ dưới đây minh họa cách thực hiện yêu cầu GET:

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

Future<void> fetchData() async {
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));

  if (response.statusCode == 200) {
    // Nếu server trả về một phản hồi thành công, phân tích dữ liệu JSON
    List<dynamic> data = jsonDecode(response.body);
    print(data); // In ra danh sách các bài viết
  } else {
    // Nếu server không trả về phản hồi thành công, ném một ngoại lệ
    throw Exception('Failed to load data');
  }
}

void main() {
  fetchData(); // Gọi hàm fetchData để lấy dữ liệu
}

Trong ví dụ này, chúng ta gửi yêu cầu GET đến một API giả lập và in ra danh sách các bài viết. Nếu yêu cầu thành công (status code 200), chúng ta phân tích dữ liệu JSON và in nó ra console.

Yêu cầu POST

Yêu cầu POST thường được sử dụng để gửi dữ liệu đến một API. Dưới đây là ví dụ về cách thực hiện yêu cầu POST:

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

Future<void> postData() async {
  final response = await http.post(
    Uri.parse('https://jsonplaceholder.typicode.com/posts'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({
      'title': 'foo',
      'body': 'bar',
      'userId': 1,
    }),
  );

  if (response.statusCode == 201) {
    // Nếu server trả về một phản hồi thành công, phân tích dữ liệu JSON
    var data = jsonDecode(response.body);
    print('Response: $data'); // In ra phản hồi từ server
  } else {
    // Nếu server không trả về phản hồi thành công, ném một ngoại lệ
    throw Exception('Failed to post data');
  }
}

void main() {
  postData(); // Gọi hàm postData để gửi dữ liệu
}

Trong ví dụ này, chúng ta gửi yêu cầu POST với một đối tượng JSON chứa tiêu đề, nội dung và ID người dùng. Nếu yêu cầu thành công (status code 201), chúng ta phân tích dữ liệu JSON và in nó ra console.

Yêu cầu PUT

Yêu cầu PUT thường được sử dụng để cập nhật dữ liệu trên server. Dưới đây là ví dụ về cách thực hiện yêu cầu PUT:

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

Future<void> updateData() async {
  final response = await http.put(
    Uri.parse('https://jsonplaceholder.typicode.com/posts/1'),
    headers: {'Content-Type': 'application/json'},
    body: jsonEncode({
      'id': 1,
      'title': 'updated title',
      'body': 'updated body',
      'userId': 1,
    }),
  );

  if (response.statusCode == 200) {
    var data = jsonDecode(response.body);
    print('Updated Response: $data'); // In ra phản hồi từ server
  } else {
    throw Exception('Failed to update data');
  }
}

void main() {
  updateData(); // Gọi hàm updateData để cập nhật dữ liệu
}

Trong ví dụ này, chúng ta gửi yêu cầu PUT để cập nhật một bài viết với ID là 1. Nếu yêu cầu thành công (status code 200), chúng ta phân tích dữ liệu JSON và in nó ra console.

Yêu cầu DELETE

Yêu cầu DELETE được sử dụng để xóa dữ liệu trên server. Dưới đây là ví dụ về cách thực hiện yêu cầu DELETE:

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

Future<void> deleteData() async {
  final response = await http.delete(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));

  if (response.statusCode == 200) {
    print('Deleted successfully'); // In ra thông báo khi xóa thành công
  } else {
    throw Exception('Failed to delete data');
  }
}

void main() {
  deleteData(); // Gọi hàm deleteData để xóa dữ liệu
}

Trong ví dụ này, chúng ta gửi yêu cầu DELETE để xóa một bài viết với ID là 1. Nếu yêu cầu thành công (status code 200), chúng ta in ra thông báo xóa thành công.

Xử lý Lỗi

Khi làm việc với HTTP requests, bạn cũng nên xử lý các lỗi có thể xảy ra, chẳng hạn như khi không thể kết nối đến server. Bạn có thể sử dụng try-catch để xử lý các ngoại lệ:

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

Future<void> fetchData() async {
  try {
    final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'));
    
    if (response.statusCode == 200) {
      List<dynamic> data = jsonDecode(response.body);
      print(data);
    } else {
      throw Exception('Failed to load data');
    }
  } catch (e) {
    print('Error: $e'); // Xử lý lỗi
  }
}

void main() {
  fetchData();
}

Tóm tắt

Trong Flutter, bạn có thể tạo HTTP requests dễ dàng bằng cách sử dụng gói http. Các bước chính bao gồm:

  • Thêm gói http vào dự án của bạn.
  • Sử dụng các phương thức như get, post, put, và delete để thực hiện các yêu cầu tương ứng.
  • Xử lý phản hồi và lỗi từ server.