ABOUT ME

-

  • [ Flutter ] Bottom Modal Keyboard Avoider
    Application/Flutter 2024. 12. 8. 17:45
    반응형

    Bottom Modal을 사용할 때 안에 textField를 누르면 키보드가 생성되면서 modal이 가려지는 문제가 발생

    https://pub.dev/packages/keyboard_avoider

     

    keyboard_avoider | Flutter package

    A lightweight alternative to the Scaffold widget for avoiding the on-screen software keyboard. Automatically scrolls obscured TextField child widgets into view on focus.

    pub.dev

     

    keyboard_avioder를 사용하면 키보드가 열릴때 알아서 해당 widget을 맞춰 올려준다.

     


    Dependencies

    yaml 파일에 keyboard_avoider의존성을 추가

    dependencies:
      flutter:
        sdk: flutter
      keyboard_avoider: ^0.2.0

    Useage

    flutter에서 bottomModal을 사용

     

    showModalBottomSheet(
    	context: context,
    	builder: (context) => BottomModal());

     

     

    [ BottomModal ] 

    초기에는 bottom modal widget에서 높이는 화면의 크기의 30%만 가져오도록 설정

     

    초기에는 default값으로 250 이런식으로 주었지만 테스트를 하는 과정에서 화면의 크기가 다 다르다보니 화면의 크기에 맞추어서 조절하도록 수정작업 진행

    final screenHeight = MediaQuery.of(context).size.height;

     

    KeyboardAvoider는 키보드가 생성이 될때 키보드의 영역만큼 위로 올라와야하는 영역을 KeyboardAvoider로 감싸주기만 하면 된다.

    return KeyboardAvoider(
          child: Container(
            width: double.infinity,
            height: screenHeight * 0.3,
            decoration: BoxDecoration(
              color: boxColor,
            ),
            child: Center(
                child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                textField(widget.accountDivison),
                payField(),
                SaveChildButton(context)
              ],
            )),
          ),
        );

     

    하지만 bottom Modal을 사용할 경우에는 기본적으로 최대 높이가 존재한다.

    그러다보니 modal의 내용이 길면 bottom overflowed가 발생하게 된다.

     

    이때 이를 SinginChildScrollView로 감싸서 해당 위젯을 스크롤이 가능하게 하여 해결하는 방법도 있다.

     

    하지만 그 부분은 불편하기에 bottom modal의 기본 최대높이를 없애고 원하는 대로 높이를 지정하게 해주는 옵션이 존재

     

    showModalBottomSheet에 isScrollControlled: true를 주면

    bottomModal의 높이를 내가 원하는 크기 만큼 지정해줄 수 있다.

    showModalBottomSheet(
    	isScrollControlled: true,
    	context: context,
    	builder: (context) => BottomModal());

     

    isScrollControlled : true 속성을 주면 자연스럽게 KeyboardAvoider가 키보드가 생성되면서 bottom modal의 높이가 올라가게 되고 이때 최대 높이 제한이 없기에 자연스럽게 위젯 전체가 올라가게 된다.

    728x90
    반응형

    'Application > Flutter' 카테고리의 다른 글

    [ Flutter ] ListView Auto Scroll Controller  (0) 2024.12.15
    [ Flutter ] Text Rich  (0) 2024.12.14
    [ Flutter ] Blurry Text  (0) 2024.11.17
    [ Flutter ] Horizontal Scroll ListView, Global Key  (0) 2024.09.08
    [ Flutter ] OnBoarding  (0) 2024.09.08