반이나 왔다 3주차 패키지 사용 및 구현 방법

박정한·2023년 6월 19일
0

provider는 전역적으로 사용되는 데이터를 담당할 서비스로 만들고, 해당 데이터에
CRUD 서비스를 추가함

  1. 데이터 기본 처리 구현 CRUD

Create
Read
Update
Delete

  1. 이전에 사용했던 StatefulWidget의 setState만을 사용해서는 서로다른 페이지
    는 갱신이 어려움
    방법이 없지는 않음 > 부모위제세서 자녀위젯으로 계속 넘겨주면 가능한대
    앱 사이즈가 커질수록 코드가 너무 많아져 복잡해지는 단점이 있음
    > 그 이유는 자기 페이지에서만 가능함

> 그래서 사용하는것이 상태관리 패키지를 사용함
State Management란
즉, 최신상태의 데이터를 보여주도록 페이지 간 데이터를 주고받고 관리하는 행위

데이터를 일괄 관리하는 서비스(클래스)에 지정해서 여러개의 위젯들이 카트에서
가져다 편하게 사용하는 방법

예) MyAppBar에서 상태관리 패키지 미 사용 시에는 MyCart -> MyApp -> MyCatalog -> MyAppbar 이렇게 처리가 됨

MyApp

MyCatalog MyCart

MyAppBar MyListitem
**
MyListitem

       MyListitem
       
       
  • Consume 코드를 감쌓아야함 그래야 별도에 상태관리 서비스가 사용가능함

Consumeer : 화면을 새로 그려야할 때 > 계속 새로고침 > 무거움
context.read : 화면을 새로 그리지 않을 떄(1회성으로 변수에 접근할 때) > 가벼움

Extract Method : 함수로 따로 선언해서 코드 리팩토링에 사용

앱을 재시작하면 휘발성 메모리에 저장되어 재시작하면 삭제된다
> 즉 어플 종료할 때마다 사라짐

방법
1. 기기에 파일로 저장 : shared_preferences
2. 기기 DB 저장 : sqflite 패키지 사용
3. 다른 컴퓨터(서버)에 저장 : 인터넷을 통해 다른 컴퓨터 또는 서버에 전송 저장 방식

  • 1번에 해당하는 방법으로 진행

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();
    }

profile
I'm hope to FLUTTER MASTER

0개의 댓글