[Flutter] flutter_profile

만들면서 배우는 플러터 앱 프로그래밍
최재원's avatar
Jul 30, 2025
[Flutter] flutter_profile

프로젝트 코드

DefaultTabController

  • tabBarTabBarView사이의 연동을 자동으로 도와주는 컨트롤러
속성
  • length → 필수, 탭의 개수 설정
  • child → 자식 요소 필요함
  • initialIndex → 시작시 어느 탭에서 시작할 것인가
notion image
notion image

TabBar

  • 사용자가 탭을 전환할 수 있는 탭 버튼 UI
  • 탭 항목(Tab) 리스트를 표시하며, 현재 선택된 탭을 시각적으로 강조
속성
  • tabsList<Tab> 또는 다른 위젯들
  • isScrollable: true → 탭이 많을 때 좌우 스크롤 가능.
notion image
notion image

TabBarView

  • TabBar와 연결된 실제 콘텐츠 화면을 보여주는 부분
  • 반드시 DefaultTabControllerTabController와 함께 사용해야 함
  • 탭 개수와 children 개수는 일치해야 함.
속성
  • children → 각 탭에 해당하는 위젯 리스트
  • 교차축(height) 제약이 필수Expanded, SizedBox 등으로 감싸줘야 함
notion image
notion image
notion image

CircleAvatar

  • 원형 프로필 이미지, 아이콘 또는 텍스트 등을 표시하기 위한 위젯
  • 내부적으로 정사각형 영역을 만들고 원형으로 클리핑 처리
  • backgroundImage를 이용해 네트워크 또는 에셋 이미지를 원형으로 표시 가능
  • child를 지정하면 텍스트나 아이콘 등도 중앙에 배치 가능
  • 약간의 내부 padding이 존재하여 child나 이미지가 조금 작아 보일 수 있음
  • 일반적인 사각형 이미지 위젯(Image)과 달리 레이아웃 계산 및 스타일이 단순화되어 있음

기본 정렬
  • mainAxisAlignment: 부모에 따름
  • crossAxisAlignment: 부모에 따름

레이아웃
  • 가로 → radius × 2 또는 부모의 제약 내 최대 크기
  • 세로 → radius × 2 또는 부모의 제약 내 최대 크기
  • 정사각형 형태로 내부 공간 확보 → 원형으로 자동 클리핑
  • 내부 위젯은 중앙에 정렬
  • 부모가 주는 제약보다 클 수 없음

속성
  • radiusdouble? | 원의 반지름. 지정하면 가로/세로 크기는 radius × 2
  • minRadiusdouble? | 최소 반지름 (자동 크기 조정 시 사용)
  • maxRadiusdouble? | 최대 반지름 (자동 크기 조정 시 사용)
  • backgroundColorColor? | 배경 색상
  • foregroundColorColor? | child의 텍스트나 아이콘 색상
  • backgroundImageImageProvider? | 배경에 사용할 이미지 (원형으로 자동 자름)
  • onBackgroundImageErrorImageErrorListener? | 이미지 로드 실패 시 콜백
  • childWidget? | 원 안에 배치할 위젯 (보통 텍스트나 아이콘)
notion image
notion image

ElevatedButton

  • 입체감(그림자)이 있는 기본 버튼 위젯
  • 클릭(터치)에 반응하며, 주로 "확인", "제출", "다음" 등의 강조할 작업 버튼
속성
  • onPressed → 버튼 클릭 시 실행할 함수, onPressed: () => print('클릭')
  • onLongPress → 길게 누를 때 실행할 함수, onLongPress: () => …
  • child → 버튼 안에 표시할 위젯, Text, Icon, Row
  • style → 버튼 스타일 (색상, 크기, 패딩, 테두리 등), style: ElevatedButton.styleFrom(...)
notion image
notion image

IconButton

  • 아이콘을 누를 수 있는 버튼 형태로 만든 위젯
속성
  • iconIcon type, 표시할 아이콘, Icon(Icons.arrow_back_ios)
  • onPressedVoidCallback type, 실행될 함수
  • iconSize → 아이콘 크기 (기본 24.0)
  • colorColor type, 아이콘 색상
  • paddingEdgeInsets type, 내부 여백
  • alignmentAlignment type, 아이콘 정렬 방식
notion image
notion image

Align♻

  • 자식 위젯을 자신의 크기(영역) 내에서 지정된 방향으로 정렬
  • 부모의 모든 공간을 차지한다
속성
  • alignmentAlignment type, 자식의 위치 (기본값: center)
  • childWidget? type, 정렬할 대상 위젯
notion image
notion image
 

InkWell♻

  • 터치(클릭) 효과를 주는 위젯
  • 버튼처럼 보이지 않는 요소에 Ripple 효과(물결 퍼짐)를 주고 싶을 때 사용
  • 자식 위젯을 감싸고 터치가 감지되면 물결(ripple) 애니메이션과 함께 콜백 함수를 실행
  • 클릭 효과는 부모 크기를 따라간다
  • 디자인은 부모에 적용하는게 좋다
속성
  • onTapvoid Function()? type, 터치 시 실행할 콜백
  • borderRadius → 물결 효과가 퍼지는 경계의 둥글기
  • splashColor → 탭할 때 퍼지는 물결 색상
  • radius → 물결의 최대 반지름
  • childWidget type, 터치 대상 위젯
notion image
notion image

GridView.builder

  • ListView.builder의 그리드 버전
  • 아이템 수가 많거나 동적으로 만들어야 할 때 성능상 유리
  • 빌더 함수로 아이템을 하나씩 생성
속성
  • gridDelegateSliverGridDelegate type, 그리드 배치 방식
  • itemBuilderIndexedWidgetBuilder type, 람다 or 익명, 각 아이템 만드는 함수
  • itemCountint? type, 아이템 개수
  • paddingEdgeInsetsGeometry type, 안쪽 여백
  • scrollDirectionAxis type, 스크롤 방향 (세로/가로)
notion image
notion image

SliverGridDelegateWithFixedCrossAxisCount

  • 이름 그대로, crossAxisCount(가로 방향 아이템 수)를 고정(Fixed)해서 그리드를 구성합니다
속성
  • crossAxisCount → 한 행에 들어갈 아이템 수 (열 수)
  • mainAxisSpacing → 위아래 간격 (행 간 간격)
  • crossAxisSpacing → 좌우 간격 (열 간 간격)
  • childAspectRatio → 너비 대비 높이 비율 (width / height)
    • 1.0이면 정사각형
    • 2.0이면 가로로 긴 직사각형
    • 0.5면 세로로 긴 직사각형
notion image
notion image
 
Share article

jjack1