기차표 예매하는 앱 구현
- 구현해야 하는 기본 기능
1. 출발역과 도착역 선택
2. 좌석 선택
3. 예매하기
4. 역 선택하지 않았다면 예매하기 버튼 비활성화
- 프로젝트 구성
- HomePage : 기본 페이지
-stationListPage : 출발역, 도착역 선택 페이지
-seatPage : 좌석 선택 페이지
- 오류와 해결 방법
1.
════════ Exception caught by widgets library ═══════════════════════════════════
Incorrect use of ParentDataWidget.
════════════════════════════════════════════════════════════════════════════════
뜬금없이 이런 오류가 발생.
위젯 트리 내에서 부모 위젯의 요구 사항에 맞지 않게 자식 위젯을 배치했을 때 발생하는 오류.
내 코드를 살펴보니 Expanded 위젯이 Column, Row, Flex 위젯 내에 위치하지 않아서 뜬 오류였다.
Body에 바로 Expanded로 감싸준 컬럼을 배치해서 그런 것. 삭제해주니 원활하게 돌아갔다.
2.
The body might complete normally, causing 'null' to be returned, but the return type, 'Widget', is a potentially non-nullable type.
Try adding either a return or a throw statement at the end.
도전 기능 중 사용자가 선택한 역을 리스트에서 제외하기 위해
위젯을 따로 작성했더니 오류가 발생했다.
함수 안에서 모든 조건에 대해 반환값을 보장하지 않아서 발생하는 오류라고 한다.
List<String> stationList = ['수서','동탄','평택지제','천안아산','오송','대전','김천구미','동대구','경주','울산','부산'];
Widget createStation(){
try{
for(String name in stationList){
return stationName('$name', context);
}
return Divider(color: Colors.grey[300],thickness: 0.3,);
}catch(e) {
print('An error occurred: $e');
return Divider(color: Colors.grey[300],thickness: 0.3,);
}
}
일단은 이렇게 고쳐서 에러 해결은 했는데
리스트의 값 중 첫번째값만 표시되는 문제가 발생했다.
작성한 코드를 다시 보니 한 번의 실행 후에 바로 return 하고 있었다.
for(String name in stationList){
stationWidgets.add(stationName('$name', context));
stationWidgets.add(Divider(color: Colors.grey[300], thickness: 0.3));
}
문제를 해결하기 위해
반복문을 돌며 역 이름을 위젯 리스트에 추가하여 한번에 위젯을 반환해주는 코드로 변경하였다.
//이미 선택된 역 리스트에서 제외하기
if(widget.isdeparture==true){
stationList.remove(widget.arrival);
if(!stationList.contains(widget.departure)){
stationList.add(widget.departure);
}
}else if(widget.isdeparture==false){
stationList.remove(widget.departure);
if(!stationList.contains(widget.arrival)){
stationList.add(widget.arrival);
}
}
pop을 할 때 homepage와 주고받는 데이터를 활용해서
리스트에서 선택된 역은 제거해주는 코드를 작성했다.
3.
지난 과제 피드백에서 부족했던 부분으로 커밋 컨벤션에 대해 좀 더 알아보고
익숙해지는 것을 조언 받았는데 깜빡 잊고 내 멋대로 커밋하고 있었다.
늦었지만 커밋 컨벤션에 대해 찾아보고 적용해보고 있는 중.
커밋 메시지는 3부분으로 구성된다
1. type
- 제목
- 형태: type(scope): subject
- type의 종류:
feat: 새로운 기능, 특징 추가
fix: 수정, 버그 수정
docs: 문서에 관련된 내용, 문서 수정
style: 코드 포맷, 세미콜론 누락, 코드 변경이 없을 경우
refactor: 리팩토링
test: 테스트 코드 수정, 누락된 테스트를 추가할 때, 리팩토링 테스트 추가
chore: 빌드 업무 수정, 패키지 매니저 수정
2.body:
- 커밋에 대한 설명을 자세히 하는 부분
3. footer:
- 추가사항, 이슈트래커 ID를 작성
'TIL' 카테고리의 다른 글
[TIL] 동적계획법 (0) | 2024.11.20 |
---|---|
[TIL] 이진트리 (0) | 2024.11.19 |
[TIL] 리스트 압축 (2) | 2024.11.12 |
[TIL]플러터 기초 (0) | 2024.11.11 |
[TIL] 과제 보충 (1) | 2024.11.08 |