클래스 선언문 위에 @HiveType(typeId: n)
라고 주석을 표기한다.
build_runner를 실행하기 위해 part ‘파일명.g.dart
라고 표기한다.
모든 클래스 안의 필드에 @HiveField(n)
를 표기한다.
(이 필드 번호는 바이너리 포맷으로 필드를 식별하는데 사용되며, 어댑터 클래스를 사용 중인 후에는 변경하면 안된다.)
터미널에 $ flutter packages pub run build_runner build
라고 실행!
(이미 빌드러너가 만든 코드가 있는 경우 에러가 난다, $ flutter pub run build_runner build --delete-conflicting-outputs
라고 입력하면 에러 없이 잘 생성된다.)
만들어진 어댑터 클래스는 기본적으로 “클래스 이름 + Adapter”로 만들어진다.
해당 이름은 변경이 가능하다.
//person.dart
import 'package:hive/hive.dart';
part 'person.g.dart';
(typeId: 1) //0번부터 순서대로
class Person {
(0) //어댑터당 새롭게 0번부터 시작
String name;
(1)
int? age;
(2)
List<Person> friends;
}
어댑터의 필드는 nullable로 짤 수 있다.
어댑터 안의 필드가 추가될 경우, 기존 필드와 필드 번호는 내버려두고
새로운 번호를 가진 새로운 필드를 그 아래 선언하면 된다.
다 했으면 다시 $ flutter pub run build_runner build --delete-conflicting-outputs
실행
필드 “번호”만 같으면, 이름은 변경 가능하다.
초깃값 설정이 가능하다. annotation에 기재한다.
(typeId: 2)
class Customer {
(1, defaultValue: 0.0)
double balance;
}
Hive.registerAdapter(MyObjectAdapter());
await Hive.openBox<MyObjectAdapter>('user');
Map<String, dynamic> toJson() {
return {
'name' : name,
'age' : age ?? 0,
};
}
factory Person.fromJson(Map<String, dynamic> map) {
return Person(
name: json['name'] as String,
age: json['age']?.toInt() ?? 0,
);
}