provider는 전역적으로 사용되는 데이터를 담당할 서비스로 만들고, 해당 데이터에
CRUD 서비스를 추가함
Create
Read
Update
Delete
> 그래서 사용하는것이 상태관리 패키지를 사용함
State Management란
즉, 최신상태의 데이터를 보여주도록 페이지 간 데이터를 주고받고 관리하는 행위
데이터를 일괄 관리하는 서비스(클래스)에 지정해서 여러개의 위젯들이 카트에서
가져다 편하게 사용하는 방법
예) MyAppBar에서 상태관리 패키지 미 사용 시에는 MyCart -> MyApp -> MyCatalog -> MyAppbar 이렇게 처리가 됨
MyApp
MyCatalog MyCart
MyAppBar MyListitem
**
MyListitem
MyListitem
Consumeer : 화면을 새로 그려야할 때 > 계속 새로고침 > 무거움
context.read : 화면을 새로 그리지 않을 떄(1회성으로 변수에 접근할 때) > 가벼움
Extract Method : 함수로 따로 선언해서 코드 리팩토링에 사용
앱을 재시작하면 휘발성 메모리에 저장되어 재시작하면 삭제된다
> 즉 어플 종료할 때마다 사라짐
방법
1. 기기에 파일로 저장 : shared_preferences
2. 기기 DB 저장 : sqflite 패키지 사용
3. 다른 컴퓨터(서버)에 저장 : 인터넷을 통해 다른 컴퓨터 또는 서버에 전송 저장 방식
shared_preferences패키지는
String, List, int, double, bool 타입만 저장이 가능
await 함수 사용하기위해선 async()함수를 사용해야함
data를 저장/로드 하는 로직 추가함
saveMemoList() {
List memoJsonList = memoList.map((memo) => memo.toJson()).toList();
// [{"content": "1"}, {"content": "2"}]
String jsonString = jsonEncode(memoJsonList);
// '[{"content": "1"}, {"content": "2"}]'
prefs.setString('memoList', jsonString);
}
loadMemoList() {
String? jsonString = prefs.getString('memoList');
// '[{"content": "1"}, {"content": "2"}]'
if (jsonString == null) return; // null 이면 로드하지 않음
List memoJsonList = jsonDecode(jsonString);
// [{"content": "1"}, {"content": "2"}]
memoList = memoJsonList.map((json) => Memo.fromJson(json)).toList();
}