개발/Flutter

[Flutter] Hive

laladev 2024. 8. 13. 14:26

Hive

로컬 DB 이다.

 

모든 데이터는 box 에 저장된다.

box 는 SQL 테이블과 비슷한 개념이지만 컬럼 같은 structure 가 따로 없고 임의의 Key-Value 형태 데이터를 담을 수 있다.

box 에 저장되는 데이터는 암호화되어 저장된다.

 

int, string, list 등 기본 데이터 타입 이외에 임의의 데이터 타입을 저장하려면 TypeAdapter 를 사용해야 한다.

TypeAdpater 는 모델 클래스에 Annotation 을 추가한다. (HiveType, HiveField 등)

그리고 터미널에서 아래의 명령어를 실행하면 TypeApdter 가 자동으로 생성된다.

flutter pub run build_runner build

 

 

설치는 아래와 같이 추가

dependencies:
	hive: ^2.2.3
	hive_flutter: ^1.1.0

dev_dependencies:
	build_runner: ^2.4.7
	hive_generator: ^2.0.1

 

Code Template

import 'package:hive/hive.dart';

@HiveType(typeId: 1)
class User {
  @HiveField(0)
  String name;

  User(this.name);

  @override
  String toString() => name; // Just for print()
}

void main() async {
  // Register Adapter
  Hive.registerAdapter(UserAdapter()); 

  var box = await Hive.openBox<User>('userBox');

  box.put('david', User('David'));
  box.put('sandy', User('Sandy'));
  
  // 아래와 같이 기본 타입들도 가능
  box.put('name', 'Paul');
  box.put('friends', ['Dave', 'Simon', 'Lisa']);
  box.put(123, 'test');
  box.putAll({'key1': 'value1', 42: 'life'});
  
  // Key 포함 확인
  box.containsKey('name');
  
  // Key 조회
  box.get('name');
  box.get('name', defaultValue: 'Kim');
  
  // Key 삭제
  box.delete('name');

  print(box.values);
}

// Can be generated automatically
class UserAdapter extends TypeAdapter<User> {
  @override
  final typeId = 0;

  @override
  User read(BinaryReader reader) {
    return User(reader.read());
  }

  @override
  void write(BinaryWriter writer, User obj) {
    writer.write(obj.name);
  }
}

 

참고