- 저자
- 최지호(코드팩토리)
- 출판
- 골든래빗(주)
- 출판일
- 2023.01.01
안녕하세요 성장형 개발자입니다.
플러터 공부 중입니다
오늘 공부한 내용을 적어보았습니다
공부한 내용 : 위젯의 종류
ㅇ 텍스트 관련 위젯
- Text : 글자를 적고 스타일링하는 위젯.
- 첫번째 포지셔널 파라미터에 원하는 문자열을 작성하고 style이라는 네임드 파라미터를 사용해 스타일을 지정
ㅇ 제스처 관련 위젯
- 사용자가 키보드로 글자를 입력하는 행위 외의 모든 입력을 플러터에서는 제스처라고 부름
- 예) 화면 한번 탭, 두번 탭, 길게 누르는 행동 모두가 제스처
- 하위 위젯에 탭이나 드래그처럼 특정 제스처가 입력됐을 때 인지하고 콜백 함수를 실행
- Button
-> 플러터 머터리얼 패키에서 기본 제공하는 버튼
-> TextButton(텍스트만 있음), OutlinedButton(테두리가 있음), ElevatedButton(입체적으로 튀어나온 느낌의 배경이 들어감)
-> 모두 버튼을 누르면 색깔이 변경되는 리플 효과를 지원
- IconButton
-> 아이콘을 버튼으로 생성하는 위젯
-> icon 매개변수에 보여주고 싶은 아이콘을 넣을 수 있음
-> onPressed 매개변수에 IconButton을 누르면 실행할 콜백 함수를 제공할 수 있음
-> 글리프 기반의 아이콘을 사용할 수 있음.
-> Icons 클래스를 통해 플러터에서 제공하는 기본 아이콘들을 사용할 수 있음.
-> 제공되는 아이콘 목록은 링크 참조(https://fonts.google.com/icons)
- GestureDetector
-> 앱은 모든 입력을 손가락을 함
-> 손가락으로 하는 여러 가지 입력을 인지하는 역할
-> onTap : 한번 탭했을 때 실행되는 함수를 입력할 수 있음
-> onDoubleTap : 두번 연속으로 탭했을 때 실행되는 함수를 입력할 수 있음
-> onLongTap : 길게 누르기가 인식됐을 때 실행되는 함수를 입력할 수 있음
-> onPanStart : 수평 또는 수직으로 드래그가 시작됐을 때 실행되는 함수를 입력할 수 있음
-> onPanUpdate : 수평 또는 수직으로 드래그를 하는 동안 드래그 위치가 업데이트 될 때마다 실행되는 함수를 입력할 수 있음
-> onPanEnd : 수평 또는 수직으로 드래그가 끝났을 때 실행되는 함수를 입력할 수 있음
-> onHorizontalDragStart : 수평으로 드래그를 시작했을 때 실행되는 함수를 입력할 수 있음
-> onHorizontalDragUpdate : 수평으로 드래그를 하는 동안 드래그 위치가 업데이트 될 때마다 실행되는 함수를 입력할 수 있음
-> onHorizontalDragEnd : 수평으로 드래그가 끝났을 때 실행되는 함수를 입력할 수 있음
-> onVerticalDragStart : 수직으로 드래그를 시작했을 때 실행되는 함수를 입력할 수 있음
-> onVerticalDragUpdate : 수직으로 드래그를 하는 동안 드래그 위치가 업데이트 될 때마다 실행되는 함수를 입력할 수 있음
-> onVerticalDragEnd : 수직으로 드래그가 끝났을 때 실행되는 함수를 입력할 수 있음
-> onScaleStart : 확대가 시작됐을 때 실행되는 함수를 입력할 수 있음
-> onScaleUpdate : 확대가 진행되는 동안 확대가 업데이트될 때마다 실행되는 함수를 입력할 수 있음
-> onScaleEnd : 확대가 끝났을 때 실행되는 함수를 입력할 수 있음
- FloatingActionButton
-> Material Design에서 추구하는 버튼 형태
-> Scaffold를 같이 사용하면 특별한 어려움 없이 해당 형태의 디자인 구현 가능
ㅇ 디자인 관련 위젯(배경을 추가하거나 간격을 추가하거나 패딩을 추가하는 등 디자인적 요소를 적용할 때 사용)
- Container 위젯
-> 다른 위젯을 담는 데 사용
-> 위젯의 너비와 높이를 지정하거나, 배경이나 테두리를 추가할 때 많이 사용
-> 다른 위젯들처럼 child 매개변수를 사용할 수 있음
-> margin(위젯의 바깥에 간격을 추가)은 위젯은 따로 없고, Container 위젯에 추가가능. EdgeInsets 사용(상하좌우값)
- SizedBox 위젯
-> 일반적으로 일정 크기의 공간을 공백으로 두고 싶을 때 사용
-> Container 위젯을 사용해도 공백을 만들 수 있지만 SizedBox는 const 생성자를 사용했을 떄 퍼포먼스에서 이점을 얻을 수 있음
- Padding 위젯
-> child위젯에 여백을 제공할 때 사용
-> Padding 위젯 사용 시 Padding 위젯의 상위 위젯과 하위 위젯 사이의 여백을 둘 수 있다.
-> Padding 위젯의 padding 매개변수는 EdgeInsets라는 값을 입력해야 함(상하좌우 값 넣는 곳)
-> child 매개변수에 Padding을 적용하고 싶은 위젯을 입력할 수 있음
-> 적용된 위젯이 차지하는 크기 내부에서 간격이 추가됨
-> EdgeInsets.all(16.0) : 상하좌우로 매개변수에 입력된 패딩을 균등하게 적용
-> EdgeInsets.symmetric(horizontal : 16.0, vertical : 16.0) : 가로와 세로 패딩 따로 적용. H-> 가로, V -> 세로
-> EdgeInsets.only(top : 16, bottom : 16, left : 16, right : 16) : 상하좌우 따로 적용
-> EdgeInsets.fromLTRB(16,16,16,16) : 상하좌우 따로 적용. 포지셔널 파라미터를 좌,위,우,아래 순서로 입력해야함
- SafeArea
-> 따로 기기별로 예외 처리를 하지 않고도 안전한(Safe) 화면에서만 위젯을 그릴 수 있음
-> SafeArea(top : true, bottom : false, left: true, right : true) true: 적용, false: 미적용
ㅇ 배치 관련 위젯
- Row위젯
-> 가로로 위젯 배치
-> children 매개변수를 노출
-> 가로가 주축(MainAxisAlignment), 세로가 반대축(crossAxisAlignment) <- > Column위젯과 반대
-> MainAxisAlignment.start : 시작에 정렬
-> MainAxisAlignment.center : 중앙에 정렬
-> MainAxisAlignment.end : 끝에 정렬
-> MainAxisAlignment.spaceBetween : 자식 위젯의 간격을 균등하게 정렬
-> MainAxisAlignment.spaceAround : 자식위젯의 간격을 균등하게 배정, 왼쪽끝과 오른쪽 끝을 위젯사이 거리의 반만큼 배정해 정렬
-> MainAxisAlignment.spaceEvenly : 자식 위젯의 간격을 균등하게 배치, 왼쪽 끝과 오른쪽 끝도 균등하게 배치
-> crossAxisAlignment.start : 시작에 정렬
-> crossAxisAlignment.center : 중앙에 정렬
-> crossAxisAlignment.end : 끝에 정렬
-> crossAxisAlignment.stretch : 반대축 최대한으로 늘려서 정렬
- Column위젯
-> Row 위젯과 완전히 같은 매개변수들을 노출
-> Row 위젯과 주축, 반대축이 반대로 이루어져 있음
- Flexible위젯
-> Row, Column에서 사용하는 위젯
-> Column, Row에서 사용 시 Flexible에 제공된 child가 크기를 최소한으로 차지하게 할 수 있음
-> flex매개변수를 이용해 각 Flexible 위젯이 얼만큼의 비율로 공간을 차지할지 지정할 수 있음
-> flex값을 제공하지 않으면 기본값은 1
-> FlexFit.tight(자식 위젯이 차지하는 공간과 관계없이 남은 공간을 모두 차지)
-> FlexFit.loose(자식 위젯이 필요한 만큼의 공간만 차지)
- Expanded위젯
-> Flexible 위젯을 상속하는 위젯
-> Column, Row에서 사용 시 위젯이 남아 있는 공간을 최대한으로 차지
-> Flexible위젯의 FlexFit.tight를 기본으로 제공해준 위젯
- Stack 위젯
-> 위젯을 겹치는 기능을 제공
-> 스키아 엔진은 2D엔진이기 때문에 겹친 두께를 표현 못하지만, stack을 사용하면 위젯 위의 위젯을 올린 듯한 효과를 줄 수 있음
-> children에 위치한 순서대로 위젯을 겹쳐쌓는다.
'개발기록 > Flutter' 카테고리의 다른 글
[flutter log] 연습용 앱을 따라하면서 필요한 내용 정리 (0) | 2023.02.02 |
---|---|
Error: Entry point is not within the current project (2) | 2023.02.01 |
[flutter log] 플러터 기본 위젯 (0) | 2023.01.17 |
[flutter log] 플러터 소개 및 구조 (0) | 2023.01.17 |
[flutter log] 다트 비동기 프로그래밍 (0) | 2023.01.11 |