본문 바로가기

지하철 도착 알림 앱

Flutter) 지하철 도착 알림 앱 (3)

이번 포스팅에선 사실상 이번 프로젝트의 핵심인 viewModel에 대해서 설명하겠다.

 

코드는 크게 3부분으로 나누어져있다.

1. API 통신

2. Sqlite

3. riverpod

 

API 통신 클래스

크게 특별할 것 없이 통신에는 DIO 페키지를 사용하였고 riverpod 클래스 안에서 선언할까 했었는데 따로 클래스를 분리하여 작성하였다.

 

SQLite 핵심 코드

SQLite 또한 별도의 클래스에 작성하였다. 

간략하게 구성을 설명하면

1.  선언부분

2. db 파일 불러오기 (없을 시 자동 생성)

3. 검색기록 추가 및 갱신

4. 검색 목록 가져오기, 삭제

 

특별할 것 없지만 내가 신경쓴 부분이 1가지 있는데 위의 캡쳐 부분이다.

출퇴근 시 사용 할 것이므로, 현재 시간과 비교할 때 날짜를 제외하고 오로지 시간만 비교하도록 하였다.

큰 부분은 아니지만 나름 신경써봤다 ㅋㅋ; 

 

 

riverpod 코드는 위에서 설명한 클래스들의 기능 활용과 타이머, 선택한 열차 강조 함수로 구성되어 있다.

 

타이머 및 시간초 표현

내가 강조하고 싶은건 타이머 코드이다.  Timer.peridoic을 이용해서 일정 시간마다 UI를 그릴 수 있도록 하였다.

이때 내가 어려웟던 부분이 화면을 갱신해줘야하는데 Setstate를 사용하지 않고 어떻게 하냐는 부분이였다.

타이머에 관련한 데이터는 riverpod의 state 부분의 데이터가 아니라서 감이 안왔다;;;;;

ConsumerStatefulWidget을 view에서 사용했기 때문에 view쪽으로 타이머 코드를 옮기는 방법도 있었지만 

비즈니스 코드는 최대한 view쪽에서 배제하고 싶었다;;;

그렇게 찾아보던중 그냥 state에 이전 데이터를 그대로 다시 넣어주면 view쪽이 갱신된다는 걸 알았다;;;

조금은 간단하고 허무하게 해결되버렸다;;

 

 

 

이상으로 해당 프로젝트의 매우 간단하지만 난잡한 설명을 마치도록하겠다.

처음에는 이전 프로젝트가 판은 커지고 게임의 시즌도 바뀌고 개인적인 일도 있고해서 미루다가 

내가 하고싶은 간단한 프로젝트 하나하나 해보자하는 마음에서 시작해버렸다 ㅋㅋ;;;;

 

사실 포스팅도 조금 더 어려운 알람, 실시간 도착 정도를 표현하는 UI 등을 추가할까 했는데 쓸모도 크게없고

제공하는 다른 API를 사용하더라도 고생에 비해 크게 만족도가 높을 것 같지않아 하지않았다.

하지만 이번 포스팅을 하면서 버그를 몇개 찾아낸게 있어서 해당 부분 수정하면서

느긋하게 추가 기능도 한번 생각해봐야겠다.

 

추가로 해당 git에 올려놓았으니 참고하실 분이 혹~~시 계시다면 편하게 쓰셔도 좋습니다

 

GitHub - beomsuong/metro

Contribute to beomsuong/metro development by creating an account on GitHub.

github.com