플러터:데이터 저장(간단한 데이터): 두 판 사이의 차이
보이기
편집 요약 없음 |
잔글 →Hive 저장 위치 |
||
| 34번째 줄: | 34번째 줄: | ||
* 앱 종료 후에도 유지 | * 앱 종료 후에도 유지 | ||
* 앱 삭제 시 같이 삭제 | * 앱 삭제 시 같이 삭제 | ||
|- | |||
|Windows | |||
|%APPDATA%\<앱폴더>\hive | |||
|예시: C:\Users\<사용자>\AppData\Roaming\com.example.myapp\hive\ | |||
|- | |||
|브라우저 | |||
|브라우저 로컬 저장소 사용. | |||
F5 눌러도 저장된 값이 그대로 유지된다. | |||
|(dart에서 작성한 <code>box</code>, <code>decibelBox</code> 등이 그대로 DB 이름이 됨) | |||
|} | |} | ||
| 42번째 줄: | 51번째 줄: | ||
hive: ^2.2.3 | hive: ^2.2.3 | ||
hive_flutter: ^1.1.0 | hive_flutter: ^1.1.0 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 55번째 줄: | 60번째 줄: | ||
WidgetsFlutterBinding.ensureInitialized(); | WidgetsFlutterBinding.ensureInitialized(); | ||
await Hive.initFlutter(); | await Hive.initFlutter(); | ||
await Hive.openBox('box'); // | await Hive.openBox('box'); // 'box'라는 이름으로 열기. | ||
runApp(MyApp()); | runApp(MyApp()); | ||
} | } | ||
| 69번째 줄: | 74번째 줄: | ||
@override | @override | ||
void initState() { | void initState() { // 앱 시작 시 초기화 | ||
super.initState(); | super.initState(); | ||
count = box.get('count', defaultValue: 0); // 저장된 값 불러오기 | count = box.get('count', defaultValue: 0); // 저장된 값 불러오기 | ||
2025년 11월 26일 (수) 02:27 판
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 플러터:배포
- 플러터:배포(안드로이드)(미완)
- 플러터:참고자료
- 플러터:위젯
- 플러터:구글 AdMob(미완)
- 플러터:라이브러리
개요
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.
이 문서에선 Hive를 이용한 로컬 DB 기반 데이터 저장에 대해 다룬다.
Hive의 특징
- 매우 빠름 (binary 기반)
- 리스트, Map, 객체까지 저장 가능(클래스 형태도 저장)
- 오프라인 DB 역할 수행
- iOS/Android 모두 지원
- 수백~수천 개 데이터 저장해도 빠름
Hive 저장 위치
| 운영체제 | 설명 | 비고 |
|---|---|---|
| 안드로이드 | /data/data/<패키지명>/files/hive/ |
|
| iOS | Application/<UUID>/Documents/hive/ |
|
| Windows | %APPDATA%\<앱폴더>\hive | 예시: C:\Users\<사용자>\AppData\Roaming\com.example.myapp\hive\ |
| 브라우저 | 브라우저 로컬 저장소 사용.
F5 눌러도 저장된 값이 그대로 유지된다. |
(dart에서 작성한 box, decibelBox 등이 그대로 DB 이름이 됨)
|
Hive로 데이터 유지하기
준비
dependencies:
hive: ^2.2.3
hive_flutter: ^1.1.0
전체 코드
import 'package:flutter/material.dart';
import 'package:hive_flutter/hive_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Hive.initFlutter();
await Hive.openBox('box'); // 'box'라는 이름으로 열기.
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final box = Hive.box('box');
int count = 0;
@override
void initState() { // 앱 시작 시 초기화
super.initState();
count = box.get('count', defaultValue: 0); // 저장된 값 불러오기
}
void increase() {
setState(() {
count++;
box.put('count', count); // 저장
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("Hive 초간단 예제")),
body: Center(child: Text("$count", style: TextStyle(fontSize: 40))),
floatingActionButton: FloatingActionButton(
onPressed: increase,
child: Icon(Icons.add),
),
),
);
}
}