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);
}
}
참고
- https://docs.hivedb.dev/#/
- https://velog.io/@tygerhwang/Flutter-HiveNoSQL-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B3%B4%EA%B8%B0#dependencies
'개발 > Flutter' 카테고리의 다른 글
[Flutter] Provider (0) | 2024.08.16 |
---|---|
[Flutter] Go Router (1) | 2024.08.14 |
[Flutter] SharedPreferences (0) | 2024.08.11 |
[Flutter] GestureDetector (0) | 2024.08.01 |
[Flutter] LinearProgressIndicator (0) | 2024.07.30 |