Team Project-Apple Market_프로젝트 완료_Flutter

박진·2026년 1월 2일

2026.01.02 (금)
팀프로젝트 완료
트러블슈팅 및 회고록


Apple Market 입니다.
애플 기기만 중고로 이루어지는 앱을 구현해봤다.
구현하면서 많은 어려움을 겪었고, 관련된 문제를 트러블 슈팅 작성해보려고 한당..


문제 배경

  • 프로젝트 구조
    Home - Write - Detail - Cart page로 구성
  • 문제 발생 배경
    각 팀원이 담당한 페이지를 하나로 합친 후에 상품 상세 페이지에서 장바구니 담기를 클릭 시에 장바구니에 담기는 것을 확인.
    이후 홈페이지로 돌아가서 장바구니를 갔을 때, 장바구니는 리셋되는 것으로 확인됨

▶️ 문제 발생 및 원인 분석

각 페이지를 독립적인 StatefulWidget으로 개발하다보니, 데이터를 보내고 받는 상황에서 빈 리스트로 표시되는 현상이 발생했다.

⏺ 위젯 트리 구조에 대한 이해 부족

위에서 아래로 흐르는 구조로 페이지 이동 시에 새로운 페이지는 기존 페이지의 데이터를 자동으로 상속받지 않기 때문에 명시적으로 데이터를 넘겨주지 않으면 새로운 페이지는 초기 상태로 렌더링 된다.


▶️ 해결 방법

⏺ 핵심 전략

공통 부모를 관리하고, 최상위 루트에서 데이터를 관리하는 구조로 변경

🍎 1. 데이터 정의

최상위 부모 위젯에 공통 리스트 (cartList)를 선언

final List<Item> cartList = [];
final List<Item> itemList = [];
  
  
void onChangeCartList(List<Item> newItem) {
 setState((){
  final tempItems = [...newItems];
  cartList.clear();
  cartList.addAll(tempItems);
  });
  }

🍎 2. 비지니스 로직 작성

리스트에 아이템을 추가/삭제할 수 있는 함수를 자식 위젯에 사용

⏺ [Cart Page]

onItemDeleted(int) : 장바구니 목록을 보여주고, 특정 번호의 아이템을 지워달라고 부모에게 요청하는 역할

⏺ [Detail Page]

item, cartList : 전달 대기 중으로 상세 정보를 보여주기 위해 보무로부터 데이터를 받아오는 다리 역할을 함

⏺ [Detail Page Bottom Bar]

addItem(Item) : 하단 바에서 '담기' 버튼을 누르면 현재 아이템을 추가해달라고 부모에게 요청

🍎 3. 데이터 전달

생성자(Constructor)를 통해 자식 위젯에게 데이터와 함수를 주입시켜서 사용자의 선택에 따라서 데이터를 전달 할 수 있었다.


▶️ 이번주 느낀 점

시간이 정말 빠르게 지나갔다. 팀 프로젝트를 하면서 느낀게 너무나 많았다. 협업을 할 때는 소통이 제일 중요하고, 현재 어떤 작업을 이런 식으로 했는데 어떻게 해결할건지와 문제점이 왜 발생했는지에 대한 분석을 함께 했으면 어땠을까 라는 생각이 많이 들었다. 🤔

다음 프로젝트는 더 잘 해내고 싶다...! 우리 팀원들 고생 많았고,,, 다들 실력이 향상되었으면 좋겠다

0개의 댓글