개발/Flutter

[flutter] 플러터 데이터 관리 - shared_preferences

qkrgusqls 2023. 9. 18. 13:35

shared_preferences

데이터베이스를 사용하지 않아도 장치내에 데이터를 저장 가능해 데이터를 손쉽게 관리할 수 있는 패키지이다. 

https://pub.dev/packages/shared_preferences

 

 

shared_preferences | Flutter Package

Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android.

pub.dev

패키지 설명 페이지를 참고했다.

 

  • 프로젝트 내의 pubspec.yaml 파일을 열어, dependencies아래에 코드 추가
  shared_preferences: ^2.2.0

 

  • Shared Preference를 써야하는 파일 최상단에 불러오기
import 'package:shared_preferences/shared_preferences.dart';

 

  • pub get 해주기

데이터를 받는 차트페이지 

  Future<void> initializeChartData() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    final String? score = prefs.getString('globalScore');
    double parsedScore = double.tryParse(score ?? '') ?? 0.0;

    data = [
      ChartData(
        parsedScore,
      ),
    ];
  }

 

차트에 데이터를 받아올때 shared_preferences 패캐지를 사용했다. 

위의 코드에서 SharedPreferences.getInstance()를 사용해서 앱의 SharedPreferences 인스턴스를 얻는다.

그리고, SharedPreferences에서 문자열 데이터를 가져오고, score변수에 저장된다.

마지막으로 score 문자열을 double 형식으로 파싱한다. 만약 파싱에 실패하면, 기본값으로 차트에 나타나는 값이 0.0이 된다. 

여기서 await은 해당 작업이 완료될 때까지 다음 코드를 실행하지 않도록 한다. (await 때문에 async 사용!)

 

데이터를 보내는 페이지

      SharedPreferences prefs = await SharedPreferences.getInstance();
      prefs.setString('globalScore', Score);

 

데이터를 보내는 파일에도 저장하는 코드를 추가해주어야한다.

변수의 값을 문자열로 저장해준다.

 

      Navigator.of(context).push(
        MaterialPageRoute(
          builder: (context) => Page(
            Score: Score,
         
          ),
        ),
      );
    } else {
      setState(() {
        Score = 'Error: ${response.statusCode}';
      });
    }
  }

 

그리고 데이터를 차트페이지에 전달할 때, Navigator.push에 Score데이터를 매개변수로 넣어주어야한다.