1. 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 (khóa – giá trị), giúp việc lưu trữ và truy xuất dữ liệu trở nên đơn giản và nhanh chóng.

Khác với MySQL thường lưu trữ dữ liệu trên máy chủ, Hive lưu dữ liệu ngay trên thiết bị nên ứng dụng có thể sử dụng dữ liệu đã lưu mà không cần kết nối Internet. Hive phù hợp với các dữ liệu như cài đặt ứng dụng, danh sách yêu thích, ghi chú hoặc thông tin cần sử dụng khi ngoại tuyến.

  1. Nguyên lý hoạt động của Hive

Hive tổ chức dữ liệu thông qua các thành phần gọi là Box. Có thể hiểu Box như một chiếc hộp chứa dữ liệu, trong đó mỗi dữ liệu được xác định bằng một khóa (Key) tương ứng với một giá trị (Value).

Ví dụ, để mở một Box có tên people, ta sử dụng đoạn code sau:

var box = await Hive.openBox('people');

Sau khi mở Box, chúng ta có thể thực hiện các thao tác đọc, ghi, cập nhật và xóa dữ liệu. Nếu Box đã được mở trước đó, có thể lấy lại Box thông qua Hive.box('people').

  1. Các thao tác cơ bản trong Hive

Ghi dữ liệu (Write): Sử dụng phương thức put() để lưu dữ liệu vào Box theo khóa tương ứng.

var box = Hive.box('people');

box.put('name', 'Thuong');
box.put('age', 20);

Trong ví dụ trên, Hive lưu tên và tuổi vào Box. Nếu khóa đã tồn tại, giá trị tương ứng sẽ được cập nhật.

Đọc dữ liệu (Read): Sử dụng phương thức get() để lấy dữ liệu theo khóa.

String? name = box.get('name');
print(name);

Kết quả là Thuong. Nếu khóa không tồn tại và không có giá trị mặc định, phương thức get() có thể trả về null.

Xóa dữ liệu (Delete): Sử dụng phương thức delete() để xóa dữ liệu theo khóa.

box.delete('age');

Sau thao tác này, dữ liệu có khóa age sẽ bị xóa khỏi Box.

Như vậy, các phương thức put(), get() và delete() lần lượt hỗ trợ ghi, đọc và xóa dữ liệu trong Hive.

  1. Sử dụng Hive để lưu đối tượng

Ngoài các kiểu dữ liệu đơn giản, Hive còn có thể lưu những đối tượng do lập trình viên tự định nghĩa, chẳng hạn như một liên hệ gồm tên và tuổi. Để thực hiện điều này, cần tạo một lớp dữ liệu và sử dụng TypeAdapter để Hive biết cách ghi và đọc đối tượng.

Ví dụ, định nghĩa lớp Contact:

@HiveType(typeId: 0)
class Contact {
  @HiveField(0)
  final String name;

  @HiveField(1)
  final int age;

  Contact(this.name, this.age);
}

Trong đó, @HiveType đánh dấu lớp dữ liệu cần được Hive hỗ trợ, còn @HiveField đánh dấu các thuộc tính cần lưu. Với cách sử dụng Hive có hỗ trợ code generation, lập trình viên cần tạo Adapter bằng công cụ sinh code và đăng ký Adapter trước khi lưu đối tượng.

  1. Ưu điểm và hạn chế của Hive

Hive có ưu điểm là dễ sử dụng, truy xuất dữ liệu nhanh, không cần máy chủ và có thể hoạt động khi thiết bị ngoại tuyến. Tuy nhiên, dữ liệu chỉ được lưu cục bộ trên thiết bị nên không tự động đồng bộ giữa nhiều thiết bị. Hive cũng không phù hợp bằng cơ sở dữ liệu quan hệ khi cần truy vấn phức tạp hoặc quản lý dữ liệu tập trung.

  1. Ứng dụng thực tế của Hive

Trong ứng dụng Flutter, Hive có thể được dùng để lưu cài đặt, danh sách sản phẩm yêu thích, giỏ hàng cục bộ hoặc dữ liệu cần sử dụng khi ngoại tuyến. Ví dụ, trong ứng dụng bán hàng, Hive có thể lưu tạm các sản phẩm người dùng thêm vào giỏ hàng để dữ liệu vẫn còn khi mở lại ứng dụng.

  1. Kết luận

Hive Local Storage là một giải pháp lưu trữ dữ liệu cục bộ hữu ích trong Flutter. Thông qua mô hình Key – Value và cơ chế Box, Hive giúp lập trình viên dễ dàng quản lý dữ liệu ngay trên thiết bị. Việc nắm được cách mở Box, sử dụng các phương thức put(), get(), delete() và lưu đối tượng bằng Adapter là kiến thức cơ bản để áp dụng Hive vào các ứng dụng Flutter thực tế.

 

Bài viết khác

BÀI 5: TÌM HIỂU CHUYÊN SÂU VỀ LANGUAGE SWITCHING TRONG FLUTTER

1. Language Switching là gì? Trong một ứng dụng hỗ trợ nhiều ngôn ngữ, việc có sẵn các bản dịch chưa đủ để tạo ra trải nghiệm đa ngôn ngữ hoàn chỉnh. Ứng dụng còn cần xác định ngôn ngữ nào sẽ được sử dụng và cho phép thay đổi ngôn ngữ khi cần thiết. […]

TÌM HIỂU CHUYÊN SÂU VỀ UTC & LOCAL TIME CONVERSION TRONG FLUTTER

1. UTC & Local Time Conversion là gì? Trong một ứng dụng Flutter, thời gian xuất hiện ở rất nhiều chức năng như ngày tạo tài khoản, thời gian đặt hàng, lịch sử giao dịch, lịch hẹn, thời gian gửi thông báo và thời hạn của chương trình khuyến mãi. Khi ứng dụng chỉ chạy […]

TÌM HIỂU CHUYÊN SÂU VỀ DATE / NUMBER / CURRENCY FORMATTING TRONG FLUTTER

1. Date / Number / Currency Formatting là gì? Trong một ứng dụng Flutter, dữ liệu thường được lưu trữ và xử lý dưới dạng số, ngày giờ hoặc các kiểu dữ liệu có cấu trúc. Tuy nhiên, dữ liệu dùng để tính toán không nhất thiết giống với cách dữ liệu được hiển thị […]

TÌM HIỂU CHUYÊN SÂU VỀ LOCALIZATION (l10n) TRONG FLUTTER

1. Localization (l10n) là gì? Khi một ứng dụng được sử dụng ở nhiều quốc gia, sự khác biệt không chỉ nằm ở ngôn ngữ mà còn ở cách người dùng đọc ngày tháng, số, tiền tệ, đơn vị đo lường và các thông tin trên giao diện. Ví dụ, một ứng dụng bán hàng […]

TÌM HIỂU CHUYÊN SÂU VỀ INTERNATIONALIZATION (i18n) TRONG FLUTTER

1. Internationalization (i18n) là gì? Trong quá trình phát triển ứng dụng, lập trình viên thường xây dựng giao diện bằng một ngôn ngữ ban đầu, chẳng hạn như tiếng Việt. Khi ứng dụng được sử dụng bởi người dùng ở nhiều quốc gia, việc chỉ hỗ trợ một ngôn ngữ có thể khiến người […]

TÌM HIỂU CHUYÊN SÂU VỀ APP RELEASE & DEPLOYMENT TRONG FLUTTER

1. App Release & Deployment là gì? Trong quá trình phát triển ứng dụng Flutter, sau khi hoàn thành các chức năng, lập trình viên cần đưa ứng dụng đến người dùng thực tế. Ví dụ, một nhóm đã xây dựng xong ứng dụng bán hàng với những chức năng như đăng nhập, xem sản […]

Leave a Reply

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