1. 디펜던시
defendency
hive
hive_flutter
dev_defendency
build_runner
hive_generator
2. 모델 생성
2-1. 코드작성
class WordModel
모델을 Hive에서 사용하려면 어노테이션을 사용해야함
@HiveType(typeId:1) : 타입ID는 1부터 시작함.
@HiveField(0)
import 'package:hive/hive.dart';
part 'word_model.g.dart';
@HiveType(typeId: 1)
class WordModel{
@HiveField(0)
final int id;
@HiveField(1)
final String engWord;
@HiveField(2)
final String korWord;
@HiveField(3)
final int correctCount;
WordModel({
required this.id,
required this.engWord,
required this.korWord,
required this.correctCount
});
}
2-2. 코드제너레이션
flutter pub run build_runner build
WordModelAdapter 클래스가 생성됨.
Hive는 원시타입들과 List, Map DtateTime, Unit8List 타입을 지원합니다.
그 외 타입을 저장하기 위해서는 오브젝트를 바이너리로 컨버팅해주는 TypeAdapter를 등록해야합니다. typeadapter를 만들 때 typeId가 필요합니다. typeId은 0~223 사이의 값입니다. 그리고 연속된 값을 사용해야합니다.
2-3. 어댑터 등록
void main() async{
await Hive.initFlutter(); // 플러터 초기화
Hive.registerAdapter(WordModelAdapter()); //adapter 등록
await Hive.openBox<WordModel>('word'); //데이터베이스 사용.
runApp(MyApp());
}
3. Hive 관련함수들
3-1. 함수들
Hive.initFlutter() Hive 초기화
Hive.registerAdapter : 어댑터 등록 :
Hive.openBox<WordModel>(‘word’);
=> Hive.openBox를 한 이 후로는 Hive.box를 통해서 box를 가져올 수 있음.
box.put : 아이디 필요함.
box.put(id, WordModel (id, engWord : ~~);
box.add : 아이디 필요 없음.
box.isNotEmtpy
box.length
box.get (key)
box.getAt (index) 인덱스는 변경이 될 수 있음. 리스트등을 사용할 때 사용할 수 있음
3-2. 값 삽입
final box = Hive.box<WordModel>('word');
int id = 0;
if(box.isNotEmpty){
final prevItem = box.getAt(box.length-1);
if(prevItem!=null){
id = prevItem.id+1;
}
}
box.put(
id,
WordModel(
id:id,
engWord:engWord,
korWord:korWord,
correctCount : 0
)
);
3-3. 값 가져오기
body:Center(
child:Padding(
padding: EdgeInsets.all(16.0),
child: ValueListenableBuilder( //<<<< 이것으로 받음.
valueListenable: Hive.box<WordModel>("word").listenable(),
builder: (context, Box<WordModel> box, child) { //<<<< box가 여기로 옴.
return ListView.separated(
itemBuilder: (context, index){
final item = box.getAt(index); //<<<< box의 값을 꺼내서 사용
if(item==null){
return Container();
}else{
return WordCard(
onBodyTab: (){
ScaffoldMessenger
.of(context)
.showSnackBar(SnackBar(
content: Text("${item.korWord}")
)
);
},
onCheckTab:(){
var newModel = WordModel(
id:item.id,
engWord: item.engWord,
korWord: item.korWord,
correctCount: item.correctCount +1
);
box.put(item.id, newModel);
},
engWord: item.engWord,
korWord: item.korWord,
correctCount: item.correctCount);
}
},
separatorBuilder: (context, index){
return Padding(
padding: EdgeInsets.only(bottom: 8.0),
child: Divider(),);
},
itemCount: box.length);
}
),
)
)
'flutter.dev' 카테고리의 다른 글
dart 병렬처리 (0) | 2021.07.13 |
---|---|
json 파싱 (0) | 2021.07.06 |
permission_handler 사용법 (0) | 2021.04.12 |
[하는 중.]어셋과 이미지 추가하기 (0) | 2019.11.26 |
Provider (0) | 2019.11.05 |