본문으로 이동

플러터:데이터 저장(간단한 데이터): 두 판 사이의 차이

학교의 모든 지식. SMwiki
새 문서: {{플러터}} == 개요 == Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 합니다. 이 문서에서는 데시벨 슬라이더 예제를 통해 상태 유지 방법을 단계별로 학습합니다. --- == 1. 화면 내 상태 유지 (StatefulWidget) == === 예제 코드 === <syntaxhighlight lang="dart"> class DecibelPage extends StatefulWidget { @override _DecibelPageStat...
 
2번째 줄: 2번째 줄:


== 개요 ==
== 개요 ==
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 합니다.
Flutter에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.
이 문서에서는 데시벨 슬라이더 예제를 통해 상태 유지 방법을 단계별로 학습합니다.


---
SharedPreferences를 사용하여 간단한 key에 값을 저장하는 방법에 대해 다룬다. 대량 데이터 저장엔 적합하지 않음.


== 1. 화면 내 상태 유지 (StatefulWidget) ==
=== 저장위치 ===
{| class="wikitable"
|+
!운영체제
!설명
!비고
|-
|안드로이
|/data/data/<패키지명>/shared_prefs/<파일명>.xml
|
* 이 경로는 앱만 접근 가능
* 사용자가 파일 앱으로 볼 수 없음
* 앱을 삭제하면 같이 삭제됨
* 앱을 종료하거나 재부팅해도 파일은 그대로 있음
|-
|iOS
|Library/Preferences/<bundle_identifier>.plist
|
* 앱 내부 전용 저장 공간
* 앱 종료 후에도 유지
* 앱 삭제 시 같이 삭제
|-
|
|
|
|}


=== 예제 코드 ===
== 앱 재시작 후에도 데이터 유지(SharedPreferences) ==
<syntaxhighlight lang="dart">
간단한 숫자, 문자열, bool 저장 가능.
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;
          });
        },
      ),
    );
  }
}
</syntaxhighlight>
 
=== 특징 ===
* 화면 내에서만 값 유지
* 다른 화면으로 이동하면 값 초기화
 
---
 
== 2. 화면 간 상태 공유 (Provider) ==
 
=== 준비 ===
<syntaxhighlight lang="yaml">
dependencies:
  provider: ^6.0.0
</syntaxhighlight>
 
=== 예제 코드 ===
<syntaxhighlight lang="dart">
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),
)
</syntaxhighlight>
 
=== 특징 ===
* 앱이 켜져 있는 동안 값 유지
* 여러 화면에서 값 공유 가능
 
---
 
== 3. 앱 재시작 후에도 데이터 유지 (SharedPreferences) ==


=== 준비 ===
=== 준비 ===
108번째 줄: 56번째 줄:
* 저장된 값이 없으면 null 반환
* 저장된 값이 없으면 null 반환
* null일 경우 안전하게 0으로 사용 (`?? 0`)
* null일 경우 안전하게 0으로 사용 (`?? 0`)
=== 특징 ===
* 앱 재시작 후에도 값 유지
* 간단한 숫자, 문자열, bool 저장 가능
---
== 4. 실습 순서 추천 ==
# StatefulWidget으로 슬라이더 만들기 
# Provider로 화면 전환 후 값 유지 확인 
# SharedPreferences로 앱 재시작 후 값 유지 확인 
---
== 5. 핵심 포인트 ==
* `setDouble` → 저장하는 값 
* `getDouble ?? 기본값` → 값이 없을 때 사용할 안전한 기본값 
* 상태 관리 없이 단순 화면 전환만 하면 값 초기화 
* Provider, Riverpod 등 상태 관리 라이브러리를 사용하면 화면 간 공유 가능 
* SharedPreferences, Hive 등 로컬 저장을 활용하면 앱 종료 후에도 값 유지 가능

2025년 11월 26일 (수) 02:09 판

틀:플러터 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에서 화면을 이동하거나 앱을 재시작해도 데이터를 유지하려면 상태 관리와 로컬 저장 방법을 이해해야 한다.

SharedPreferences를 사용하여 간단한 key에 값을 저장하는 방법에 대해 다룬다. 대량 데이터 저장엔 적합하지 않음.

저장위치

운영체제 설명 비고
안드로이 /data/data/<패키지명>/shared_prefs/<파일명>.xml
  • 이 경로는 앱만 접근 가능
  • 사용자가 파일 앱으로 볼 수 없음
  • 앱을 삭제하면 같이 삭제됨
  • 앱을 종료하거나 재부팅해도 파일은 그대로 있음
iOS Library/Preferences/<bundle_identifier>.plist
  • 앱 내부 전용 저장 공간
  • 앱 종료 후에도 유지
  • 앱 삭제 시 같이 삭제

앱 재시작 후에도 데이터 유지(SharedPreferences)

간단한 숫자, 문자열, bool 저장 가능.

준비

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`)