dev/flutter

[Flutter] 기본 위젯2 정리

캄춰 2023. 12. 19. 14:59
728x90
반응형

오준석님의 생존코딩을 보고 위젯 내용을 정리합니다.


입력

TextField

- edittext같은 입력용 위젯, 글자를 받음

: decoration

InputDecoration

- TextField를 꾸며주는 위젯

: border(OutlineInputBorder), labelText,

 

CheckBox

- 체크박스

 

Switch

- 스위치 on/off

 

Radio

- 그룹 내에서 하나만 선택

: value, groupValue(이 값이 동일한 라디오 위젯끼리 소통), onChanged

 

RaidoListTile

- Radio는 해당 위젯만 클릭해야 반응하지만, Tile은 라디오 버튼의 수평 방향의 화면을 터치해도 반응

- widte:match_parent같은 -

 

DropDownButton

- 스피너, 목록을 나열하여 선택

: value(표시할 값 지정), items(인스턴스 리스트)

: 상태를 가지고 있으니 StatefulWidget으로 만든다..........................

 

DropDownMenuItem

- DropDownButton items에 사용되는 위젯

: value, child

 


팝업, 다이얼로그, 모달

AlertDialog

- showDialog함수를 사용하며, builder파라메터에서 생성해준다.

showDialog(context: context, builder: builder)
showDialog(
  context: context,
  builder: (context) => AlertDialog(
    title: Text('다이얼로그 제목'),
    content: SingleChildScrollView(
      child: ListBody(
        children: <Widget>[
          Text('AlertDialog'),
          Text('press OK'),
        ],
      ),
    ),
    actions: [
      ElevatedButton(
        onPressed: () {
          Navigator.of(context).pop();
        },
        child: Text('OK'),
      ),

      ElevatedButton(
        onPressed: () {
          Navigator.of(context).pop();
        },
        child: Text('Cancel'),
      ),
    ],
  ),
);

 

 

DatePicker

- 날짜 선택

- showDatePicker()함수로 호출

showDatePicker(
  context: context,
  firstDate: firstDate,
  lastDate: lastDate,
);
Future<DateTime?> selectedDate = showDatePicker(
  context: context,
  initialDate: DateTime.now(),
  firstDate: DateTime(2021),
  lastDate: DateTime(2024),
);

 

 

TimePicker

- 시간 선택

- showTimePicker함수로 호출

Future<TimeOfDay?> selectedTime = showTimePicker(
  context: context,
  initialTime: TimeOfDay.now(),
);

 


이벤트

GestureDetector

- 위젯에 이벤트를 발생 시킴

 

InkWell

- ripple효과를 내어 이벤트 발생

 


애니메이션

Hero

- 자연스럽게 다음 화면 넘어갈 때 애니메이션을 줌

- Hero위젯으로 감싸고, tag를 동일하게 해주면 동작함

 

AnimationContainer

- Hero는 넘어갈 때 애니메이션을 주지만, AnimationContainer는 현재 화면에서 애니메이션을 주는 경우 사용

: duration(Duration(seconds:)), width, height, child, curve(Curves.fastOutSlowIn: 애니메이션 효과)

 

SliverAppBar, SliverFillRemaining

- 헤더가 스크롤에 의해 작아졌다 커졌다 함, 앱 바의 애니메이션 효과랄까

child: CustomScrollView(
  slivers: [
    SliverAppBar(
      pinned: true,   // 축소시 앱바가 고정되는지
      expandedHeight: 180.0,
      flexibleSpace: FlexibleSpaceBar(  // 늘어나는 영역 UI
        title: Text('Sliver'),
      ),
    ),

    SliverFillRemaining(
      child: Center(
        child: Text('center'),
      ),
    )
  ],
),

 

리스트로 표현할 경우

child: CustomScrollView(
  slivers: [
    SliverAppBar(
      pinned: true,   // 축소시 앱바가 고정되는지
      expandedHeight: 180.0,
      flexibleSpace: FlexibleSpaceBar(  // 늘어나는 영역 UI
        title: Text('Sliver'),
      ),
    ),
    SliverList(delegate: SliverChildListDelegate(_items)),
  ],
),
728x90
반응형