본문으로 이동

플러터:데이터 저장(간단한 데이터)

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2025년 11월 26일 (수) 01:29 판 (새 문서: {{플러터}} == 개요 == Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 합니다. 이 문서에서는 데시벨 슬라이더 예제를 통해 상태 유지 방법을 단계별로 학습합니다. --- == 1. 화면 내 상태 유지 (StatefulWidget) == === 예제 코드 === <syntaxhighlight lang="dart"> class DecibelPage extends StatefulWidget { @override _DecibelPageStat...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

틀:플러터 Dart:개요 플러터에 대한 지식 분류

  1. 플러터:개요
    1. 플러터:VSCode
    2. 플러터:안드로이드 스튜디오
  2. 플러터:실행
  3. 플러터:개념 잡기
    1. 플러터:화면 하나 만들기
    2. 플러터:변하는 화면(StatefulWidget)
    3. 플러터:화면 전환(화면 쌓기, 하단 네비게이션 바)
    4. 플러터:화면 전환(Drawer)
    5. 플러터:입력 관련
      1. 플러터:버튼
      2. 플러터:키보드 입력
      3. 플러터:슬라이더
    6. 플러터:그래프 그리기(fl chart)
    7. 플러터:데이터 저장(간단한 데이터)
    8. 플러터:인증(Firebase 인증)(미완)
    9. 플러터:인증(OAuth2)(미완)
  4. 권한 사용
    1. 플러터:마이크 입력
  5. 위젯
    1. 플러터:아이콘
    2. 플러터:레이아웃 계열 위젯
    3. 플러터:네비게이션 계열 위젯
    4. 플러터:버튼
    5. 플러터:상태관리(미완)
  6. 플러터:DB연결
    1. 플러터:Firebase(미완)
    2. 플러터:MySQL(미완)
  7. 디자인
    1. 플러터:테마
    2. 플러터:앱바
  8. 플러터:배포
    1. 플러터:배포(안드로이드)(미완)
  9. 플러터:참고자료
  10. 플러터:위젯
    1. 플러터:공간배치용 위젯
  11. 플러터:구글 AdMob(미완)
  12. 플러터:라이브러리
    1. 플러터:logger

개요

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. 실습 순서 추천

  1. StatefulWidget으로 슬라이더 만들기
  2. Provider로 화면 전환 후 값 유지 확인
  3. SharedPreferences로 앱 재시작 후 값 유지 확인

---

5. 핵심 포인트

  • `setDouble` → 저장하는 값
  • `getDouble ?? 기본값` → 값이 없을 때 사용할 안전한 기본값
  • 상태 관리 없이 단순 화면 전환만 하면 값 초기화
  • Provider, Riverpod 등 상태 관리 라이브러리를 사용하면 화면 간 공유 가능
  • SharedPreferences, Hive 등 로컬 저장을 활용하면 앱 종료 후에도 값 유지 가능