플러터:데이터 저장(간단한 데이터): 두 판 사이의 차이
보이기
편집 요약 없음 |
편집 요약 없음 |
||
| 4번째 줄: | 4번째 줄: | ||
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다. | Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다. | ||
이 문서에선 Hive를 이용한 로컬 DB 기반 데이터 저장에 대해 다룬다. | |||
=== Hive의 특징 === | === Hive의 특징 === | ||
* 매우 빠름 (binary 기반) | * 매우 빠름 (binary 기반) | ||
* 리스트, Map, 객체까지 저장 가능 | * 리스트, Map, 객체까지 저장 가능(클래스 형태도 저장) | ||
* 오프라인 DB 역할 수행 | * 오프라인 DB 역할 수행 | ||
* iOS/Android 모두 지원 | * iOS/Android 모두 지원 | ||
* 수백~수천 개 데이터 저장해도 빠름 | |||
== Hive 저장 위치 == | === Hive 저장 위치 === | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
| 38번째 줄: | 37번째 줄: | ||
== Hive로 데이터 유지하기 == | == Hive로 데이터 유지하기 == | ||
=== 준비 === | === 준비 === | ||
<syntaxhighlight lang="yaml"> | <syntaxhighlight lang="yaml"> | ||
| 51번째 줄: | 48번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | === 전체 코드 === | ||
<syntaxhighlight lang="dart">import 'package:flutter/material.dart'; | |||
import 'package:hive_flutter/hive_flutter.dart'; | |||
void main() async { | void main() async { | ||
WidgetsFlutterBinding.ensureInitialized(); | WidgetsFlutterBinding.ensureInitialized(); | ||
await Hive.initFlutter(); | await Hive.initFlutter(); | ||
await Hive.openBox(' | await Hive.openBox('box'); // 단일 박스 열기 | ||
runApp(MyApp()); | 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), | |||
), | |||
), | |||
); | |||
} | |||
} | |||
</syntaxhighlight> | |||
2025년 11월 26일 (수) 02:13 판
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 플러터:배포
- 플러터:배포(안드로이드)(미완)
- 플러터:참고자료
- 플러터:위젯
- 플러터:구글 AdMob(미완)
- 플러터:라이브러리
개요
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.
이 문서에선 Hive를 이용한 로컬 DB 기반 데이터 저장에 대해 다룬다.
Hive의 특징
- 매우 빠름 (binary 기반)
- 리스트, Map, 객체까지 저장 가능(클래스 형태도 저장)
- 오프라인 DB 역할 수행
- iOS/Android 모두 지원
- 수백~수천 개 데이터 저장해도 빠름
Hive 저장 위치
| 운영체제 | 설명 | 비고 |
|---|---|---|
| 안드로이드 | /data/data/<패키지명>/files/hive/ |
|
| iOS | Application/<UUID>/Documents/hive/ |
|
Hive로 데이터 유지하기
준비
dependencies:
hive: ^2.2.3
hive_flutter: ^1.1.0
dev_dependencies:
hive_generator: ^2.0.0
build_runner: ^2.4.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'); // 단일 박스 열기
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),
),
),
);
}
}