자료를 저장하는데 db가 좋으다..
플러터에는 sqlite도 있는데 hive가 인기가 더 좋다..
쿼리를 써야하는 상황이라면 sqlite 리스트형태로 관리고 싶으면 hive 쓰면됨
그리고 hive와 sharedpreferences중 뭘써야 좋을지 고민이라면 둘다써야된다..
한프로젝트에다가.. hive는 vo를 직렬형태로 계속 쌓아주는데
특화되어있고 sharedpreferences는 키벨류로 자료를 저장하는데 목적이있다.
둘이 다르다.. 그래서 둘다 필요한상황이라면 둘다쓰는게 맞다.. ㅇㅇ
어쨌든 hive 설정방법은
1. 먼저 pubspec.yaml에서 dependencies를 추가한다.
hive: ^
hive_flutter: ^
그밑에 dev_dependencies를 추가한다.
hive_generator: ^
build_runner: ^
dependencies와 dev_dependencies의 차이는
뭐 일반적인 라이브러리와 프로젝트헬퍼(?)의 차이라고 할수 있음..
2. 그다음 별도의 다트파일에서 HiveObject를 상속받는 vo클래스를 만든다.
(여기서 간단히 이름하고 나이가 있는 사람클래스로 예시함)
import 'package:hive/hive.dart'
part 'person.g.dart'
@HiveType(typeId: 0)
class Person extends HiveObject {
@HiveField(0)
int index;
@HiveField(1)
String name:
@HiveField(2)
int age;
}
이렇게 어노테이션을 이용하여 각필드와 클래스에 hive용 vo로 선언하고
상단 import 하는 부분에서 part 'person.g.dart' 도 추가했다.
3. 터미널을 열고 다음명령어 입력
flutter packages pub run build_runner build
이명령으로 2번에서 선언된 person.g.dart파일이 생성되면서 hive와
연결이 되는 **Adapter 어뎁터 dart파일을 만들어준다.
vo에 수정을 가하고 싶으면 이 어뎁터파일을 지우고 vo를 수정하고 다시 빌드하면됨.
4. main메소드에서 hive 초기화와 어뎁터등록 (hive_flutter를 import)
Future<void> main async {
await Hive.initFlutter();
Hive.registerAdapter(PersonAdapter());
//
returnApp(MyApp());
}
5. 이렇게 생성된 모델을 CRUD 할수있는 싱글톤클래스를 만들어서 사용한다.
class PersonHelper {
static final PersonHelper _single = PersonHelper._internal();
factory PersonHelper() {
return _single;
}
//
Box<Person>? personBox;
Future<void> openBox() async {
personBox = await Hive.openBox('PS_BOX');
}
Future<int> addnew(Person psn) async {
return personBox!.add(psn);
}
Future<List<Person>> read() async {
return personBox!.values.toList();
}
Future<void> update(int index, Person psn) async {
personBox!.putAt(index, psn);
}
Future<void> delete(int index) async {
personBox!.deleteAt(index);
}
Future<void> clear() async {
personBox!.clear();
}
}
요로코롬 쓰면됨.. ㅇㅇ
댓글 없음:
댓글 쓰기