플러터:데이터 저장(간단한 데이터)
보이기
- 플러터:개요
- 플러터:실행
- 플러터:개념 잡기
- 권한 사용
- 위젯
- 플러터:DB연결
- 플러터:Firebase(미완)
- 플러터:MySQL(미완)
- 디자인
- 플러터:배포
- 플러터:배포(안드로이드)(미완)
- 플러터:참고자료
- 플러터:위젯
- 플러터:구글 AdMob(미완)
- 플러터:라이브러리
개요
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 합니다. 이 문서에서는 데시벨 슬라이더 예제를 통해 상태 유지 방법을 단계별로 학습합니다.
---
1. 화면 내 상태 유지 (StatefulWidget)
예제 코드
class DecibelPage extends StatefulWidget {
@override
_DecibelPageState createState() => _DecibelPageState();
}
class _DecibelPageState extends State<DecibelPage> {
double currentValue = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Slider(
min: 0,
max: 120,
value: currentValue,
onChanged: (value) {
setState(() {
currentValue = value;
});
},
),
);
}
}
특징
- 화면 내에서만 값 유지
- 다른 화면으로 이동하면 값 초기화
---
2. 화면 간 상태 공유 (Provider)
준비
dependencies:
provider: ^6.0.0
예제 코드
class DecibelModel extends ChangeNotifier {
double value = 0;
void setValue(double v) {
value = v;
notifyListeners();
}
}
void main() {
runApp(
ChangeNotifierProvider(
create: (_) => DecibelModel(),
child: MyApp(),
),
);
}
// 슬라이더 연결
Slider(
min: 0,
max: 120,
value: context.watch<DecibelModel>().value,
onChanged: (v) => context.read<DecibelModel>().setValue(v),
)
특징
- 앱이 켜져 있는 동안 값 유지
- 여러 화면에서 값 공유 가능
---
3. 앱 재시작 후에도 데이터 유지 (SharedPreferences)
준비
dependencies:
shared_preferences: ^2.1.1
저장하기
final prefs = await SharedPreferences.getInstance();
await prefs.setDouble('decibel', 85);
- `'decibel'` key에 85 저장
- “기본값 85” 의미가 아니라, 지금 저장하는 값
불러오기
double decibel = prefs.getDouble('decibel') ?? 0;
- 저장된 값이 없으면 null 반환
- null일 경우 안전하게 0으로 사용 (`?? 0`)
특징
- 앱 재시작 후에도 값 유지
- 간단한 숫자, 문자열, bool 저장 가능
---
4. 실습 순서 추천
- StatefulWidget으로 슬라이더 만들기
- Provider로 화면 전환 후 값 유지 확인
- SharedPreferences로 앱 재시작 후 값 유지 확인
---
5. 핵심 포인트
- `setDouble` → 저장하는 값
- `getDouble ?? 기본값` → 값이 없을 때 사용할 안전한 기본값
- 상태 관리 없이 단순 화면 전환만 하면 값 초기화
- Provider, Riverpod 등 상태 관리 라이브러리를 사용하면 화면 간 공유 가능
- SharedPreferences, Hive 등 로컬 저장을 활용하면 앱 종료 후에도 값 유지 가능