만들면서한 고민

topics 500-모바일개발 501 Flutter
types 학습
contexts 프로젝트
tags

만들면서 한 고민

Flutter 앱을 개발하면서 고민했던 점들을 정리한다.

User State에 로딩 클래스를 만들어야할까?

결론적으로 만들어야 한다

Splash 화면에서 로딩 상태를 표시하기 위해 필요하다.

결론: null 체크만으로는 로딩/에러/미인증 상태를 구분할 수 없다. AsyncValue 같은 래퍼를 쓰거나 로딩 상태를 별도로 관리해야 한다.

Tab vs 바텀 네비게이션 스크롤

  • Tab: 위에 있는 탭은 좌우 스크롤을 할 수 있는게 편하다
  • 바텀 네비게이션: 스크롤 안해도 상관없다

바텀은 주요 네비게이션이라 항상 보여야 하지만, 탭은 많을 수 있어서 스크롤 가능하게 하는게 낫다.

// 스크롤 가능한 탭
TabBar(
  isScrollable: true,  // 탭 개수 많으면 스크롤
  tabs: [...],
)

Scrollable Content 구조

뒤에도 scrollable하게 만들려면 head_content 파트를 만드는게 맞는듯?

근데 이러면 tab처럼 한 페이지 내에서 컨트롤하는거 만들기 매우 귀찮아진다.

해결책: CustomScrollView와 Sliver를 사용하면 해결할 수 있다. 복잡도가 올라가긴 하지만 유연한 스크롤 레이아웃이 가능해진다.

CustomScrollView(
  slivers: [
    SliverAppBar(floating: true, ...),
    SliverToBoxAdapter(child: HeaderContent()),
    SliverList(delegate: ...),
  ],
)

어노테이션 사용의 유용성

Riverpod 같은 경우 어노테이션(@riverpod)을 사용하면 보일러플레이트 코드가 줄어든다.

장점

  • 코드량 감소
  • 타입 추론 자동화
  • family provider 자동 생성

단점

  • 코드 생성 필요 (build_runner)
  • 빌드 시간 증가
  • 디버깅이 조금 어려움

결론: 프로젝트 규모가 작으면 굳이 안써도 되지만, 크면 쓰는게 생산성에 도움된다.