Fast, Enjoyable & Secure NoSQL Database, HIVE
pubspec.yaml
dependencies:
hive: ^2.0.4
hive_flutter: ^1.0.0
(타입어댑터는 추후에 다시 서술)
pubspec.yaml
dev_dependencies:
hive_generator: ^1.1.0
build_runner: ^2.0.4
runApp() 전에 하이브DB를 초기화 해줍니다.
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
Future<void> main() async {
await Hive.initFlutter();
runApp(MyApp());
}
var path = Directory.current.path;
Hive
..init(path)
..registerAdapter(PersonAdapter()); //타입어댑터도 같이 적용 할 때
- Hive의 모든 데이터는 Box에 저장한다. SQL의 테이블과 유사하지만 정해진 구조가 없으며 타입을 정해놓지 않으면 하나의 박스에 여러 타입의 값을 값을 다 넣을 수 있다.
- Box의 타입을 지정할 수 있으며, Hive에서 쓰는 모델 클래스인 TypeAdapter도 설정할 수 있다.
var box = await Hive.openBox<E>('boxName');
var box = Hive.box('myBox');
var box = Hive.box('myBox');
box.put('name', 'Paul');
box.put('friends', ['Dave', 'Simon', 'Lisa']);
box.put(123, 'test');
box.putAll({'key1': 'value1', 42: 'life'}); //여러 값 한번에 저장
box.putAt(3, 'index_value'); //key가 아니라 index를 지정해서 데이터를 넣을 수 있다.
```dart
var box = Hive.box('myBox');
String name = box.get('name');
DateTime birthday = box.get('birthday');
String thirdValue = box.getAt(3);
String allValues = box.values.toString();
String allKeys = box.keys.toString();
final valueMap = box.getAllValues();
final keyMap = box.getAllKeys();
```
```dart
var friends = await Hive.openBox('friends');
friends.clear();
friends.add('Lisa'); // index 0, key 0
friends.add('Dave'); // index 1, key 1
friends.put(123, 'Marco'); // index 2, key 123
friends.add('Paul'); // index 3, key 124
print(friends.getAt(0));
print(friends.get(0));
print(friends.getAt(1));
print(friends.get(1));
print(friends.getAt(2));
print(friends.get(123));
print(friends.getAt(3));
print(friends.get(124));
}
```
bool isValueExsist = box.containsKey('key');
var filteredUsers = userBox.values.where((user) => user.name.startsWith('s'));
var lazyBox = await Hive.openLazyBox('myLazyBox');
var lazyBox = Hive.lazyBox('myLazyBox');
var value = await lazyBox.get('lazyVal');