본문 바로가기

CS/Flutter | Dart

미세먼지 측정 앱 #2 - Hive

Hive

NoSQL 데이터베이스면서 동시에 인메모리 데이터베이스다

데이터를 파일에 저장하기 때문에 앱의 생명주기와 관계없이 데이터가 유지되지만

앱이 실행되는 순간 파일에 저장돼 있던 모든 데이터가 메모리에 올라온다

-> 빠른 속도 자랑!

 

 

import 'package:hive_flutter/hive_flutter.dart';

플러터 하이브를 import 해줘야 더 많은 기능 사용 가능하다

 

 

void main() async {
  await Hive.initFlutter();

main.dart에서 하이브 초기화

 

 

Hive box

SQL의 테이블처럼 똑같은 타입의 데이터를 모아두는 공간이다

특정 데이터를 저장하고 다루기 위해서는 박스를 열어야 한다

박스를 열 때는 어떤 타입의 데이터를 저장할지, 박스 이름을 지정해준다

for(ItemCode itemCode in ItemCode.values){
  await Hive.openBox<StatModel>(itemCode.name);
}

 

 

 

stat_model.dart

하이브에 저장될 모든 클래스는 HiveType 어노테이션을 사용해 프로젝트에서 유일한 typeId를 지정해줘야 한다

추후 클래스의 구조가 변경됐을 때 하이브는 typeId를 기반으로 변경된 클래스를 인식한다

한 프로젝트 내에서 겹치지 않는 숫자기만 하면 된다

 

터미널에서 flutter pub run build_runner build 실행해 코드 제너레이션을 진행한다

 

 

 

하이브 box 주요 함수

add(value) 박스에 값 추가할 때 사용
자동으로 키 값 지정됨
put(key, value) 박스에  값 추가할 때 사용
첫 번재 매개변수에 키 입력하고 두 번째 매개변수에 값 입력
키 값이 자동으로 지정되지 않고 입력된 키 값으로 지정됨
putAt(index, value) 특정 인덱스에 값 추가
첫 번째 매개변수에 값 추가하고 싶은 인덱스 입력하고 두 번째 매개변수에 값 입력
get(key) 키 기반으로 값 가져옴
getAt(index) 인덱스 기반으로 값 가져옴
delete(key) 키 기반으로 값 삭제
deleteAt(index)  인덱스 기반으로 값 삭제
clear() 박스 내부의 모든 값 삭제

 

 

 

어느정도 앱바가 닫히면 지역, 날짜, 시간을 간단히 보여준다

return SliverAppBar(
  backgroundColor: status.primaryColor,
  pinned: true,
  title: isExpanded ? null : Text(
    "$region ${DataUtils.getTimeFromDataTime(dateTime: dateTime)}",
    style: ts.copyWith(
      fontFamily: "Indie",
      fontWeight: FontWeight.w600,
      fontSize: 24.0,
      color: Colors.black54,
    ),
  ),

 

 

 

 

 

대기오염 정도별로 전체적인 배경 등 색상을 다르게 지정해 한 눈에 오염 정도를 확인할 수 있다

카테고리별 통계도 오른쪽 스와이프 잘 동작하고

시간별 미세먼지도, drawer도 잘 동작한다

공공데이터포털 API를 활용해 실시간으로 값을 받아와 잘 출력한다

미세먼지 측정 앱 끝!

 

 

 

 

 


Tiny Star