Hive là gì ? Cách dùng Hive trong Flutter như thế nào ?

Tram Ho

Hive là gì ?

Hive là một dạng lưu trữ local databse, Hive được tổ chức dưới dạng các Box. Mỗi Box có thể coi là tương ứng với một Table của SQL nhưng là lưu trữ dữ liệu dạng không có cấu trúc (NoSQL ) tức là dạng < key, value > và có thể lưu trữ bất cứ kiểu dữ liệu nào.

Mở Box trong Hive

Để sử dụng một Box thì bạn phải mở Box ra thì mới dùng được nha.

Phương thức trên cực kỳ hữu ích trong Flutter vì nó có thể gọi bất cứ đâu mà không cần phải truyền giữa các Widgets.

Nhưng nếu Box đã được mở rồi thì đoạn code ở trên sẽ bị vô hiệu và sẽ các tham số bên trong cũng bị bỏ qua.

Một khi đã mở Box lên thì có thể tiến hành Read, Write, Delete các phần tử trong đó.

Các tham số mà một Box sẽ có như sau:

ParameterDescription
nameTên của Box đã chỉ định vị trí lưu trữ và được sử dụng để kiểm tra xem hộp đã tồn tại chưa.
encryptionKeyDùng để chứa dữ liệu mã hoá và giải mã của Box nhưng phải là mảng 32 byte.
keyComparatorTheo mặc định, các khóa được sắp xếp theo bảng chữ cái. Thông số này cho phép bạn cung cấp một thứ tự sắp xếp tùy chỉnh theo ý bạn.
compactionStrategyChỉ định quy tắc nén của bạn và Hive sẽ nén theo quy tắc đó.
crashRecoveryNếu ứng dụng của bạn bị tắt trong khi hoạt động ghi đang chạy, mục cuối cùng có thể bị hỏng. Mục này sẽ tự động bị xóa khi ứng dụng bắt đầu lại. Nếu bạn không muốn hành vi này, bạn có thể vô hiệu hóa nó.
pathTheo mặc định, các Box được lưu trữ trong thư mục được cung cấp Hive.init (). Với tham số này, bạn có thể chỉ định vị trí nơi Box sẽ được lưu trữ.
byteBạn có thể cung cấp Box ở dạng nhị phân và mở Box trong bộ nhớ.
ETham số loại tùy chọn chỉ định loại của các giá trị trong Box.

Read, Write, Delete trong Hive

Read trong Hive

Vì các Box trong Hive sử dụng kiểu truy vấn <key, value> nên chỉ cần gọi key thì có thể get ra dữ liệu tương ứng:

Nếu khóa không tồn tại, nó sẽ trả về null. Theo tùy chọn, bạn có thể chỉ định defaultValue được trả về trong trường hợp khóa không tồn tại.

Write trong Hive

Write vào Box giống như viết vào Map<key, value>. Tất cả các key phải là chuỗi ASCII có độ dài tối đa 255 ký tự hoặc số nguyên 32 bit không dấu.

Một thế mạnh của Hive là việc cập nhật được diễn ra ngay lập tức mà không cần phải dùng đến async trong Flutter, còn nếu muốn chắc chắn get được dữ liệu thì bạn có thể thêm await của lớp Future.

Với lazyBox nếu việc get dữ liệu không thành công thì sẽ trả về null còn nếu thêm await với future sẽ trả về giá trị cũ.

Delete trong Hive

Hive cung cấp cho ta các phương thức để thực viện việc Delete.

Hive trong app Flutter đơn giản

Mình sẽ viết một app có tính năng là:

  • Thêm mới một liên hệ,
  • Xoá liên hệ theo index.
  • Hiển thị danh sách liên hệ đã lưu.

Add thư viện Hive

Vào file pubspec.yaml và thêm vào đoạn bên dưới.

Init Hive vào trong App

Hive cần phải được khởi tạo, chỉ ra path trong thư mục nào để nó lưu trữ dữ liệu. Tốt nhất là khởi tạo Hive ngay trong phương thức main()

Và để ngăn chặn dữ liệu không cần thiết load lên RAM khi thoát app thì nên close() Hive lại.

Tạo một lớp Contacts

Tạo một Widgets ContactPage nơi sẽ hiển thị ra danh sách các liên hệ đã lưu.

WatchBoxBuilder() là một Widgets của package flutter_hive dùng để cập nhật UI khi có sự thay đổi của Box.

Để thêm một liên hệ mới ta tạo thêm một Widgets new_contact_form.dart

Vì Hive yêu cầu phải lưu dữ liệu dưới dạng Json nên phương thức contactsBox.add() muốn thực hiện được thì ở hàm main() ta phải thêm vào một Adapter nữa.

Các bước để tạo ra Adapter:

Vào class Contact thêm vào các annotation, HiveType sẽ dành cho class và HiveField sẽ dành cho properties của class đó.

Gõ lệnh sau để flutter sẽ tự sinh ra một file adapter cho chúng ta:

> flutter packages pub run build_runner build

Kết quả là ta có được một file contact.g.dart có nội dung như sau:

Cuối cùng build lên điện thoại để test nào:

Vậy là mình đã giới thiệu xong về Hive. Cảm ơn mọi người đã xem hy vọng giúp ích được cho mọi người.

Link code

https://github.com/nghiaptx-2124/HiveAppDemo

Các bạn có thể đọc thêm ở đây :

https://docs.hivedb.dev/#/basics/hive_in_flutter?id=initialize-flutter-apps

https://resocoder.com/2019/09/30/hive-flutter-tutorial-lightweight-fast-database/#WatchBoxBuilder_Widget

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo