1. Dio & HTTP Client là gì?

Trong quá trình phát triển ứng dụng Flutter, ứng dụng thường cần trao đổi dữ liệu với máy chủ (Backend). Ví dụ, khi người dùng mở ứng dụng bán hàng, ứng dụng cần lấy danh sách sản phẩm từ cơ sở dữ liệu; khi đăng nhập, ứng dụng cần gửi tài khoản và mật khẩu đến máy chủ để xác thực.

Để thực hiện những công việc này, ứng dụng cần một thành phần giúp gửi yêu cầu và nhận phản hồi thông qua HTTP. Thành phần đó được gọi là HTTP Client.

Trong Flutter, lập trình viên có thể sử dụng thư viện http hoặc Dio. Dio là một thư viện HTTP Client dành cho Dart, hỗ trợ gửi yêu cầu HTTP và xử lý phản hồi từ máy chủ. Dio cung cấp nhiều chức năng như cấu hình thời gian chờ, quản lý Header, xử lý lỗi, tải lên và tải xuống tệp, cũng như sử dụng Interceptor để xử lý các yêu cầu một cách tập trung.

  1. Dio hoạt động như thế nào?

Khi người dùng thực hiện một thao tác cần dữ liệu từ máy chủ, ứng dụng Flutter sẽ gọi một hàm sử dụng Dio để gửi yêu cầu đến API. Máy chủ tiếp nhận yêu cầu, xử lý nghiệp vụ và trả về phản hồi. Sau đó, ứng dụng đọc dữ liệu nhận được và cập nhật giao diện.

Ví dụ, khi người dùng mở trang sản phẩm, quy trình có thể diễn ra như sau:

Flutter gửi yêu cầu GET → Backend nhận yêu cầu → Backend truy vấn cơ sở dữ liệu → Backend trả về danh sách sản phẩm → Flutter xử lý dữ liệu và hiển thị sản phẩm trên màn hình

Dio không trực tiếp truy vấn cơ sở dữ liệu. Nó chỉ đảm nhiệm việc giao tiếp HTTP giữa ứng dụng và máy chủ.

  1. Cách sử dụng Dio trong Flutter

Trước tiên, thêm thư viện Dio vào dự án bằng lệnh:

flutter pub add dio

Sau đó, có thể tạo một yêu cầu lấy danh sách sản phẩm:

import 'package:dio/dio.dart';

Future<void> getProducts() async {
  final dio = Dio();

  try {
    final response = await dio.get(
      'https://example.com/api/products',
    );

    print(response.data);
  } on DioException catch (e) {
    print('Lỗi khi lấy sản phẩm: ${e.message}');
  }
}

Trong ví dụ trên, Dio() tạo đối tượng dùng để gửi yêu cầu HTTP. Phương thức get() gửi yêu cầu GET đến API. Từ khóa await cho phép chờ kết quả của thao tác bất đồng bộ mà không chặn toàn bộ giao diện ứng dụng.

response.data chứa dữ liệu mà máy chủ trả về. Nếu yêu cầu gặp lỗi, chương trình có thể bắt lỗi thông qua DioException.

Địa chỉ example.com chỉ là địa chỉ minh họa. Khi áp dụng vào dự án thật, cần thay bằng địa chỉ API thực tế.

  1. Một số chức năng quan trọng của Dio
  • Request và Response: Dio hỗ trợ gửi yêu cầu và nhận phản hồi từ máy chủ thông qua các phương thức HTTP như GET, POST, PUT, PATCH và DELETE.
  • Base URL: Có thể thiết lập địa chỉ API chung để không phải viết lại toàn bộ URL trong từng yêu cầu.
  • Timeout: Cho phép quy định thời gian tối đa chờ kết nối hoặc chờ máy chủ phản hồi. Nếu vượt quá thời gian này, ứng dụng có thể xử lý lỗi phù hợp.
  • Interceptor: Cho phép can thiệp vào quá trình gửi yêu cầu hoặc nhận phản hồi. Ví dụ, ứng dụng có thể tự động thêm token xác thực vào Header của các yêu cầu.
  • Upload và Download: Hỗ trợ tải tệp lên máy chủ hoặc tải tệp từ máy chủ về thiết bị.
  1. Khi nào nên sử dụng Dio?

Dio phù hợp với những ứng dụng có nhiều chức năng giao tiếp với API, cần quản lý token, xử lý lỗi tập trung hoặc tải dữ liệu và tệp. Đối với ứng dụng nhỏ, thư viện http cũng có thể đáp ứng tốt nhu cầu cơ bản.

Khi phát triển dự án thực tế, nên tổ chức phần gọi API trong các lớp Service hoặc Repository thay vì viết trực tiếp trong mọi widget. Cách tổ chức này giúp mã nguồn dễ đọc, dễ kiểm thử và dễ bảo trì hơn.

  1. Kết luận

Dio là một thư viện quan trọng trong quá trình phát triển ứng dụng Flutter có kết nối Backend. Việc hiểu cách gửi yêu cầu, nhận phản hồi và xử lý lỗi bằng Dio giúp lập trình viên xây dựng các chức năng như đăng nhập, lấy danh sách sản phẩm và tạo đơn hàng. Dio thường được sử dụng kết hợp với REST API, JSON Serialization và API Error Handling để hoàn thiện quá trình giao tiếp dữ liệu.

 

Bài viết khác

Tìm hiểu về Dependency Injection là gì?

  Dependency Injection là gì? Dependency Injection (DI), hay tiêm phụ thuộc, là kỹ thuật cung cấp những đối tượng hoặc thành phần mà một đối tượng cần sử dụng từ bên ngoài, thay vì để đối tượng đó tự tạo ra tất cả những thành phần cần thiết. Để hiểu đơn giản, hãy tưởng […]

Tìm hiểu về Provider & Notifier là gì?

  Provider & Notifier là gì? Trong quá trình phát triển ứng dụng Flutter, State Management (quản lý trạng thái) là một phần quan trọng giúp quản lý dữ liệu và cập nhật giao diện khi dữ liệu thay đổi. Đối với những ứng dụng đơn giản, có thể sử dụng setState() để cập nhật […]

Tìm hiểu về Riverpod / BLoC / Provider

  Tổng quan Trong Flutter, State Management (quản lý trạng thái) là quá trình quản lý dữ liệu và trạng thái của ứng dụng, giúp giao diện được cập nhật khi dữ liệu thay đổi. Đối với ứng dụng đơn giản, có thể sử dụng setState() để cập nhật giao diện. Tuy nhiên, khi ứng […]

tìm hiểu về State Management

  State Management là gì? State Management (quản lý trạng thái) là quá trình quản lý dữ liệu và trạng thái của các thành phần trong ứng dụng. Trong quá trình sử dụng, dữ liệu của ứng dụng có thể thay đổi và giao diện cần được cập nhật tương ứng để hiển thị thông […]

Go Fundamentals

Go là gì? Go, còn được biết đến với tên gọi Golang, là một ngôn ngữ lập trình mã nguồn mở, được thiết kế tại Google bởi Robert Griesemer, Rob Pike và Ken Thompson. Go là ngôn ngữ biên dịch (compiled language) và có hệ thống kiểu dữ liệu tĩnh (statically typed). Khác với những […]

Tìm hiểu về Hive Local

  Hive Local Storage là gì? Hive là một thư viện cơ sở dữ liệu cục bộ (Local Database) được sử dụng trong Flutter và Dart để lưu trữ dữ liệu trực tiếp trên thiết bị của người dùng. Hive hoạt động theo mô hình NoSQL, tổ chức dữ liệu theo dạng Key – Value […]

Leave a Reply

Your email address will not be published. Required fields are marked *