DAY 30: 개인 프로젝트 — view (4) & model (1)

Pt J·4일 전
post-thumbnail

DAY 30: 개인 프로젝트 — view (4) & model (1)

작업 일정

  • #20 [fixme] 게시물 편집 도중 탭 전환 이슈
  • #21 [fixme] 테마 일관성 리팩토링
  • #22 [view] 누락된 기능 추가
  • #9 [model] 데이터 모델링

일단 적어만 놓고 미뤄 두었던 issue들을 처리해 보자.

#20 [fixme] 게시물 편집 도중 탭 전환 이슈

게시물 편집 화면의 route를 /feed/post/:sketch_id/edit 과 같이 두었더니 게시물 편집 도중 탭 전환이 가능한 이슈가 있었다. 이 경우 메모리 이슈로 편집하던 내용이 날아갈 수도 있고, 피드 탭에서 편집하다가 나 탭에서 편집하려고 할 수도 있고 문제의 여지가 있다.

따라서 편집 화면을 /edit/:sketch_id route로 따로 빼고 편집하기 버튼 클릭 시 context.go() 가 아닌 context.push() 로 화면을 쌓았다가 편집 취소 또는 저장 시 context.pop() 하여 원래 페이지로 돌아가는 방식으로 수정하였다.

#21 [fixme] 테마 일관성 리팩토링

작업 도중 테마 파일이 일부 수정되면서 불필요한 코드가 좀 생겼다. 그 외에도 놓친 일관성 부분을 정리하고 넘어가기로 했다. 정리하다 보니 모듈화를 하는 게 좋을 것 같은 중복 코드도 발견되어서 새로운 widget도 몇 개 만들었다.

정적 분석에서 걸리는 것들도 좀 있더라. Rust 하던 습관 때문에 일단 private으로 하고 보던 것들이 Flutter 표준하고는 거리가 멀다는 경고에 대해 받아들이기로 했다. Flutter 표준에 익숙해지는 게 좋겠지.

그 외에도 "Flutter에서는 주로 이렇게 한다" 하는 것들을 좀 더 반영해 보았다.

#22 [view] 누락된 기능 추가

wireframe을 그리고 디자인을 뽑는 과정에서 생각하지 못했던, 누락된 것들이 일부 발견되었다. 가령 피드 게시물은 삭제할 수 있지만 기록 탭에 있는 세션 기록은 삭제하지 못한다거나, 잘못 눌러서 시작한 경우 중단하고 저장하지 않고 종료하는 기능이 없다거나, 의도치 않게 앱이 종료되었을 때 세션 복구를 하는 기능이 없다거나. 신고하기에 신고 사유를 작성해서 제출하는 폼도 있으면 좋을 것 같고. 신고를 개발자가 어떻게 받도록 하는 게 좋으려나.

댓글의 답글 버튼을 눌렀으면 답글을 다는 중이라는 걸 표시해 주는 것도 아직 없다. 알림 일괄 읽음처리 및 지우기도 있어야 할 것 같고. 지금보니까 캘린더에 요일 글자가 조금 잘린다. 이것도 고쳐야지.

세션 종료 버튼을 누르면 바로 종료되는 게 아니라 3초 정도 누르고 있어야 종료되게 하고 싶었는데 그것도 구현이 안 되어 있어서 이번에 처리했다. ElevatedButton으로는 안 되고 GestureDetector를 사용해야 하는데, ElevatedButton의 스타일을 유지하고 싶으면 GestureDetector 안에 ElevatedButton을 넣고 Stack을 쌓는다. 버튼은 작동하지 않고 단지 스타일을 일치시키 위함이다. 애니메이션 적용을 위해 SingleTickerProviderStateMixin을 사용하고 말이다.

lib/widgets/hold_button.dart

// 앞 부분 생략
 return GestureDetector(
      behavior: HitTestBehavior.opaque,
      onTapDown: (_) => _animationController.forward(),
      onTapUp: (_) => _animationController.reverse(),
      onTapCancel: () => _animationController.reverse(),
      child: AnimatedBuilder(
        animation: _animationController,
        builder: (context, child) {
          return Stack(
            fit: StackFit.expand,
            children: [
              IgnorePointer(
                child: ElevatedButton(
                  onPressed: () {},
                  clipBehavior: Clip.antiAlias,
                  style: ElevatedButton.styleFrom(
                    splashFactory: NoSplash.splashFactory,
                    padding: EdgeInsets.zero,
                  ),
                  child: const SizedBox.shrink(),
                ),
              ),
              ClipRRect(
                borderRadius: BorderRadius.circular(36),
                child: LinearProgressIndicator(
                  value: _animationController.value,
                  backgroundColor: Colors.transparent,
                  valueColor: AlwaysStoppedAnimation<Color>(
                    colorScheme.primaryContainer,
                  ),
                ),
              ),
              Center(
                child: Text(
                  widget.title,
                  style: textTheme.headlineSmall?.copyWith(
                    color: colorScheme.onPrimary,
                  ),
                ),
              ),
            ],
          );
        },
      ),
    );
// 뒷 부분 생략

#9 [model] 데이터 모델링

model을 작성하는 과정에서는 AI의 도움을 많이 받았다. 설계 경험이 없기 때문이다. "아무튼 만들어 줘"는 아니고 나의 요구사항을 제시하며 샘플 코드를 보여달라고 한 뒤, 그것을 기반으로 내 프로젝트에 맞는 코드를 작성했다.

단순한 영역은 거의 그대로 사용할 수 있었지만 대체로 내 프로젝트에서 사용할 수 있는 형태로 property도 조절하고 변형해야 할 부분이 꽤 있었다. 가령 알림 설정에 대해서 AI는 bool pushNotificationEnabled; 를 사용했지만 우리 프로젝트에서는 전체 알림 설정 하위에 친구 알림, 반응 알림, 리마인더가 있기 때문에 알림 설정을 다루는 model을 추가하여 각각의 설정에 대한 옵션을 담을 수 있게 하였다.


여담

도중에 갑자기 아이폰 시뮬레이터가 사라졌다. 터미널에 다음과 같은 내용이 떠서

You have not agreed to the Xcode and Apple SDKs license. You must agree to the license below in order to use Xcode.
Press enter to display the license:

엔터를 누르니 다음 문장으로 끝나는 장문의 텍스트가 출력되었는데

Agreeing to the Xcode and Apple SDKs license requires admin privileges, please accept the Xcode license as the root user (e.g. 'sudo xcodebuild -license').

sudo xcodebuild -license 를 하니 시뮬레이터가 먹통이 되고 그 어디에서도 시뮬레이터를 찾을 수 없게 되었다.

open -a Simulator                                                            

Unable to find application named 'Simulator'

완전히 사라진 건 아니고 Xcode에 들어가서 상단 메뉴에서 [Xcode > Open Developer Tool > Device Hub]로 들어가면 기존에 사용하던 시뮬레이터들이 들어 있는 걸 확인할 수 있다.

이걸 찾느라 몇 분 걸렸지만 무사히 찾아냈다.

profile
Peter J Online Space - since July 2020 | 아무데서나 채용해줬으면 좋겠다 (지금은 학생 때 하던 거 아무거나 공부하고 있고요, 취업시켜 주시면 그 분야로 공부할게요)

0개의 댓글