DevBoi

[Flutter] SharedPreferences 데이터 삭제 및 수정 본문

[Mobile]/[Flutter]

[Flutter] SharedPreferences 데이터 삭제 및 수정

HiSmith 2023. 7. 26. 00:13
반응형

1. 슬라이드로 밀면 삭제되는 위젯은

Dismissed 로 감싸주면 된다. 기존 소스에서 아래로 바꿨다.

child: Dismissible(
   key: UniqueKey(),
     onDismissed: (direction) {
     if(list.length == 1){
       list = <Memo>[];
     }
     else {
       list.removeAt(index);
     }
     memoInterface.saveList(list);
     },
   child: Container(
  height: 80,
  margin: const EdgeInsets.symmetric(
    horizontal: 16,
    vertical: 4,
  ),
  decoration: BoxDecoration(
    color: list[index].completeYn == "N" ? Colors
        .blueAccent : Colors.grey,
    borderRadius: BorderRadius.circular(20),
  ),
  alignment: Alignment.center,
  child: Text(list[index].content),
))

 

데이터 삭제 는 아래와 같이 구현했다.

삭제는 list에서도 Removeat 으로 삭제 처리를하고

memoInterface에서는 삭제된 리스트를 다시 리스트 채로 넣어주는 작업을 한다.

쉽게 얘기하면, 그냥 변경된 리스트로 덮어쓰는것이다.

오히려 좋아.

 

그리고 수정은 아래와 같이 진행했다.

  return InkWell(
      onTap: () {
        if("Y".compareTo(list[index].completeYn)==0)
          list[index].completeYn ='N';
        else {
          list[index].completeYn = 'Y';
        }
        setState(() {
        });
        memoInterface.saveList(list);
      },

 

completeYn 은 누를때마다 상태만 변경할수있도록 수정하고, 다시 변경된 리스트 채로 넣어주는 로직을 넣어줬다.

삭제가 생기던 변경이 되던 변경이 된 리스트를 다시 채로 넣어서, 덮어쓰는 로직을 구현하니까 잘 된다.

 

  child: Dismissible(
   key: UniqueKey(),
     onDismissed: (direction) {
     if(list.length == 1){
       list = <Memo>[];
     }
     else {
       list.removeAt(index);
     }
     memoInterface.saveList(list);
     },

참고로 저기 Dismissible 에서도, 키를 UniqueKey를 전달해주면, 

알아서 잘 캐치한다.

반응형