[Flutter/Widget of the Week] FloatingActionButton

작성 날짜:

최근 업데이트 날짜:

Widget of the Week 유튜브 영상


평소에 여러 어플리케이션에서 하단에 동그란 버튼을 본 적이 있을 것이다. 그런 버튼이 바로 FloatingActionButton이다.

FloatingActionButton은 보통 한 화면에 하나만 사용한다. 그리고 FloatingActionButton은 무언가를 생성 혹은 공유하거나 페이지를 이동할 때만 사용해야한다.

사용 예시

FloatingActionButton 사용 예시에 대한 코드 펼치기/접기
Scaffold(
  appBar: AppBar(
    title: Text('FloatingActionButton Example'),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      // 버튼 클릭 시 실행할 코드.
    },
    child: Icon(Icons.add),
  ),
);


FloatingActionButton 사용 방법은 매우 간단하다. ScaffoldfloatingActionButton property에 onPressedchild를 설정한 FloatingActionButton를 할당하면 된다. 그럼 위와 같은 화면을 볼 수 있을 것이다. 다른 상세 설정들은 사용 목적에 맞춰서 설정하면 된다.

FloatingActionButton.extended 생성자

FloatingActionButton.extended 생성자 사용

FloatingActionButton.extended 생성자 사용 예시에 대한 코드 펼치기/접기
Scaffold(
  appBar: AppBar(
    title: Text('FloatingActionButton Example'),
  ),
  floatingActionButton: FloatingActionButton.extended(
    onPressed: () {
      // 버튼 클릭 시 실행할 코드.
    },
    icon: Icon(Icons.add),
    label: Text('CREATE'),
  ),
);


extended 생성자를 사용하면 iconlabel이 들어가는 타원형 FloatingActionButton을 만들 수 있다.

Properties

Property Description Type Default(기본 생성자) Default (extended 생성자)
child 버튼에 들어갈 위젯. 보통 아이콘이 들어간다. Widget?   해당 Property 없음
icon 버튼에 들어갈 아이콘. extended 생성자에서 child 대신 사용. Widget? 해당 Property 없음  
label 버튼에 들어갈 라벨. extended 생성자에서 child 대신 사용. Widget 해당 Property 없음  
autofocus 버튼 위젯에 autofocus가 왜 있는지 잘 모르겠다... bool false false
backgroundColor 버튼의 배경 색깔. Color?    
focusColor 연결된 focusNode에 request가 들어왔을 때의 색깔. Color?    
foregroundColor 버튼의 아이콘과 텍스트의 색깔. Color?    
hoverColor 마우스 포인터를 버튼 위에 올리고 있을 때의 버튼 색깔. Color?    
splashColor 버튼을 길게 클릭할 때 퍼지는 효과의 색깔. Color?    
clipBehavior 버튼의 child가 버튼보다 클 때 해당 child를 자르는 방법. Clip Clip.none Clip.none
elevation 버튼의 디폴트 z 좌표, 그림자 크기를 조절한다. double?    
disabledElevation 버튼이 사용 불가능한 상태일 때의 elevation double?    
focusElevation 연결된 focusNode에 request가 들어왔을 때의 elevation double?    
highlightElevation 버튼을 클릭 중일 때의 elevation double?    
hoverElevation 마우스 포인터를 버튼 위에 올리고 있을 때의 elevation double?    
focusNode 버튼과 연결할 focusNode. FocusNode?    
heroTag 한 화면에서 여러 FloatingActionButton를 사용할 때 필요한 버튼 고유의 값. Object? _DefaultHeroTag() _DefaultHeroTag()
isExtended 버튼이 extended 생성자를 통해 만들어졌는지 여부. bool false true
materialTapTargetSize 버튼의 클릭 범위. MaterialTapTargetSize?    
mini 버튼 사이즈. bool false 해당 Property 없음
mouseCursor 마우스 포인터를 버튼 위에 올리고 있을 때의 마우스 커서 모양. MouseCursor?   SystemMouseCursors.click
onPressed 버튼이 클릭했을 때 실행될 코드. VoidCallback?    
shape 버튼의 모양. ShapeBorder?    
tooltip 버튼을 길게 클릭할 때 나오는 버튼에 대한 설명 문구. String?    

clipBehavior

clipBehavior: Clip.none (default) clipBehavior: Clip.hardEdge

FloatingActionButton.extended 생성자 사용 예시에 대한 코드 펼치기/접기
Scaffold(
  appBar: AppBar(
    title: Text('FloatingActionButton Example'),
  ),
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      // 버튼 클릭 시 실행할 코드.
    },
    child: Text('CREATE', style: TextStyle(fontSize: 20, color: Colors.red),),
    clipBehavior: Clip.hardEdge,
  ),
);


clipBehavior은 버튼 안에 들어가는 child 위젯이 버튼의 범위를 넘어갈 때 이를 자르는 방법을 의미한다. 왼쪽 예시를 보면 default 값인 Clip.none일 때는 ‘CREATE’ 텍스트 일부가 버튼 밖으로 나와있다. 하지만 오른쪽 예시를 보면 clipBehaviorClip.hardEdge로 설정했기 때문에 ‘CREATE’ 텍스트의 버튼 범위를 넘어가는 부분이 잘린 것을 알 수 있다.

댓글남기기