프로젝트들/날씨앱

[날씨앱] P7. Flutter Shared Preferences 추가

Choi Jaekuk 2023. 4. 14. 15:35

https://github.com/cjk09083/ftweather

 

이번 포스트에서는 날씨앱에 Shared Preferences 기능을 추가하여 맵에 추가한 마커들을 저장해두고, 앱 실행 시 불러오도록 하였다.

 

1. Shared Preferences  추가

pubspec.yaml에 아래와 같이 패키지 추가 후 Pub get 해준다. 

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.9

 

2. 마커 목록 (markers) 저장

 아래와 같이 마커 추가 함수인 _createMarker 마지막에 새로운 마커가 추가된 마커목록 _markers를 json형태로 바꿔 저장한다.

  // 마커 생성 및 목록에 추가하는 메서드
  void _createMarker(String name) async {
    if (_controller != null) {
      /* 마커 생성 코드들 */
      
      // 마커 목록에 추가
      _markers.add(marker);

      // 마커 리스트 -> json String으로 변환
      String jsonData = toJson(_markers);
      log('$TAG Markers to Json : $jsonData');
      
      // jsonData 저장
      SharedPreferences prefs = await SharedPreferences.getInstance();
      prefs.setString('markers', jsonData);
    }
    
    // 마커가 추가되었음을 알림
    notifyListeners();
  }

 

2. 마커 목록 불러오기

MapWidget.dart에서 처음 MapModel이 생성될때만 작동하는 MapModel() 메소드를 작성한다. 

MapModel에서는 jsonData를 저장소에서 불러와서 List로 변환해 초기화한다.

class MapModel extends ChangeNotifier {

    // 마커 목록 관리
    final List<Marker> _markers = [];
    List<Marker> get markers => _markers;

	// 모델 생성시 실행될 메소드
    MapModel() {
    	initializeMarkers();
    }
	
    // 마커 목록 초기화 메소드
    void initializeMarkers() async {
        SharedPreferences prefs = await SharedPreferences.getInstance();
        // 마커 목록 불러오기
        String markersJson = prefs.getString('markers') ?? '[]';
        // markers 리스트 채우기
        _markers.addAll(fromJson(markersJson));
        // 변경 알림
        notifyListeners();
    }
  
}