앱을 껐다가 켜면 state는 초기화됩니다.
그래서 state 안에 있던걸 어디 저장해두고 싶으면
서버로 보내서 Database에 저장을 하든가 아니면
shared preferences 라는 로컬 공간에 저장하면 됩니다. 우린 서버가 없으니 이거나 써봅시다.
유저가 설정들어가서 앱 데이터 삭제누르지 않는 이상 영구적으로 남아있습니다.
웹브라우저로 치면 localStorage와 똑같은 곳임
shared_preferences 설치
패키지 설치해야 이용가능합니다.
shared_preferences: ^2.0.11
pubspec.yaml 파일에 추가하고 pub get 누르면 됩니다.
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
그리고 이 패키지 사용할 파일 맨 위에 이거 추가하면 됩니다.
convert는 유용한 함수 몇개 들어있는 기본 패키지임
shared preferences에 데이터 저장하는 법
saveData(){
var storage = await SharedPreferences.getInstance();
storage.setString('name', 'john');
}
SharedPreferences.getInstance() 이거 실행해야 저장소를 불러올 수 있고
setString('자료이름', '저장할자료') 쓰면 저장됩니다.
저장했던 자료 출력하는 법
saveData(){
var storage = await SharedPreferences.getInstance();
storage.setString('name', 'john');
var result = storage.getString('name');
print(result);
}
getString('자료이름') 쓰면 저장해놨던 자료가 출력됩니다.
실은 getString() 말고 get() 만 써도 출력되긴 하는데 getString() 이래야 타입지정도 잘해줍니다.
진짠지 확인해보려면 saveData() 이거 initState() 이런데 안에서 실행해보십시오
숫자도 저장가능
storage.setString('name', 'john');
storage.setBool('name', true);
storage.setInt('name', 20);
storage.setDouble('name', 20.5);
storage.setStringList('name', ['john', 'park']);
실은 숫자, 문자, Bool, List<String> 자료형도 저장가능합니다.
참고로 List<int> 이런거 저장 못해서 List<String>으로 바꿔서 저장하든 해야합니다.
저것들 출력하려면 set어쩌구를 get어쩌구로만 바꿔주면 출력가능합니다.
자료 삭제는
storage.remove('name');
이러면 'name' 이름으로 저장한 자료가 삭제됩니다.
Map 자료 저장은
storage.setString('map', jsonEncode({ 'age' : 20 }) );
Map 저장은 바로 못해서 Map을 문자로 변환하면 저장이 가능합니다.
jsonEncode() 쓰면 Map -> JSON으로 변환해줍니다.
JSON은 따옴표친 Map인데 문자취급을 해줘서 저장가능한 것임
var result = storage.getString('map') ?? '없는데요';
print(jsonDecode(result));
JSON으로 저장하면 자료 꺼내도 JSON입니다.
JSON -> Map 변환하고 싶으면 jsonDecode() 안에 넣어주면 됩니다.
?? 이건 null check 위해서 쓴겁니다 안쓰면 뭐라그럴 수 있음
아무튼 결론은 데이터베이스 대용품으로 사용가능합니다.
- 유저의 앱 설정같은걸 넣어둘 수도 있고
- 게임의 경우 게임 세이브파일을 보관하기도 하고
- 메모나 캘린더앱의 경우 유저가 작성한 데이터를 보관해둘 수도 있고
- 인스타그램의 경우 이미 본 게시물들은 shared_preferences에 저장해두면
GET요청 없이도 빨리 기존 게시물을 띄워줄 수 있겠군요.
'APP > Flutter' 카테고리의 다른 글
플러터 앱출시, 플러터 배포하기 (0) | 2022.08.23 |
---|---|
[Flutter] Android MultiDex 해결하기 (0) | 2022.08.22 |
플러터 폰에 저장된 이미지 가져오려면 image_picker 설치, 사용 (0) | 2022.08.12 |
크롤링에서 css 선택자 (크롤링할 HTML 태그를 선택하는 것) (0) | 2022.08.09 |
플러터 서버와 통신 하는 방법 , 초기 셋팅 (0) | 2022.08.08 |