코드 예시
# models.py
import 'package:hive/hive.dart';
part 'models.g.dart';
@HiveType(typeId: 0)
class Model extends HiveObject {
// @HiveField(index)
@HiveField(0)
int id;
@HiveField(1)
String name;
@HiveField(2)
List<int> array;
@HiveField(3)
DateTime dt = DateTime.now();
// 추가됨
@HiveField(4, defaultValue: -1.1)
double float;
// 추가됨
@HiveField(5, defaultValue: {'key': 'defaultValue'})
Map dict;
@HiveField(6)
dynamic d;
Model(this.id, this.name, this.array, this.float, this.dict, this.d);
// print() 명령시 출력되는 문구
@override
String toString() => 'Model 객체는 다음과 같습니다. id: $id, name: $name, array: $array, dt: $dt, float: $float, dict: $dict, d: $d';
}
# handle.dart
import 'package:hive/hive.dart';
import 'package:example/Hive/models.dart';
void main() async {
Hive.registerAdapter(ModelAdapter());
Hive.init('modelbox');
var box = await Hive.openBox('modelbox');
for (final i in box.values) {
print(i);
}
box.close();
}
결과
Model 객체는 다음과 같습니다. id: 4, name: , array: [54123], dt: 2022-02-22 00:00:00.000, float: -1.1, dict: {key: defaultValue}, d: null
Model 객체는 다음과 같습니다. id: 1111, name: data4, array: [], dt: 2023-12-12 16:31:08.954, float: -1.1, dict: {key: defaultValue}, d: null
설명
위 코드는 이전 글에서 사용한 model Class에서 일부 Column을 추가할 것이다.
@HiveField({index}, defaultValue: {value})
코드에서 확인할 수 있듯이 float과 dict Column이 추가되었으며, 기존에는 해당 데이터가 없었기 때문에 기본값인 -1.1과 {key: defaultValue}가 데이터에 추가되어있는 것을 확인할 수 있다.
만약 Column을 추가하더라도 기본값(defaultValue)을 지정하지 않았다면 null이 존재하게 된다.
build
당연한 말이지만, model adapter의 내용이 변경되었기 때문에 새로 build해주어야 한다.
만약 이게 무슨 말인지 모르겠다면 이 링크를 확인하면 된다.