[Flutter] 기묘한 코드 모험 - 01 (필터검색)

김강민·2023년 3월 21일
2

Flutter

목록 보기
2/2
post-thumbnail

문제)

필터 검색 기능에서 전체 선택 후 항목 해제 시, 해당 항목이 사라지는 문제가 발생하는 경우가 있습니다. 이 문제는 프로그램이 전체 선택한 목록을 기억하고 있기 때문에 발생하는 것입니다.

문제에 코드

  void handleSelectAll({required listType, required List<String> list}) {
      state[listType] = list;   
  }
  void handleSelect({required listType, required String name}) {
    if (state[listType]!.contains(name)) {
      state[listType]!.remove(name);
      return;
    }

    state[listType]!.add(name);
  }

이 문제를 해결하기 위해서는 해당 목록에 대한 데이터를 관리하는 방법을 변경해야 합니다. 기존 코드에서는 handleSelectAll() 메서드에서 해당 목록에 전체 항목을 추가하던 중, handleSelect() 메서드에서 해당 목록에서 한 항목을 삭제하면서 문제가 발생합니다. 이 때문에 전체 선택 후 다른 항목을 선택할 때 이전 선택한 값이 유지되지 않고 사라지는 것입니다.

해결)

해결 방법으로는 handleSelectAll() 메서드에서 state[listType] 배열을 먼저 빈 배열로 초기화하고, list의 각 항목을 하나씩 추가하는 방식을 사용합니다. 이렇게 함으로써 전체 선택 후 해제해도 다른 항목이 사라지지 않고, 불필요하게 중복된 값이 계속 추가되는 문제도 해결할 수 있습니다.

예를 들어, 다음과 같이 handleSelectAll() 메서드를 변경할 수 있습니다.

void handleSelectAll({required listType, required List<String> list}) {
  state[listType] = []; // state[listType]을 빈 배열로 초기화합니다.
  
  // for문을 통해 list의 각 항목을 state[listType]에 추가합니다.
  for (String item in list) {
    state[listType]?.add(item);
  }
}

위 코드에서는 전체 선택한 항목이 담긴 list를 받아와서 state[listType] 배열을 먼저 빈 배열로 초기화한 뒤, for문을 통해 list의 각 항목을 state[listType] 배열에 추가합니다. 이렇게 하면 전체 선택 후 해제해도 다른 항목이 사라지지 않고, 불필요하게 중복된 값이 계속 추가되는 문제도 해결할 수 있습니다.

따라서, 필터 검색 기능에서 전체 선택 후 항목 해제 시, 항목이 사라지는 문제가 발생하면 handleSelectAll() 메서드를 위와 같이 수정하여 해결할 수 있습니다.

profile
안녕하세요 ^^

0개의 댓글