아래 라이브러리를 사용하시면 됩니다.
https://pub.dev/packages/flutter_keyboard_visibility
flutter_keyboard_visibility | Flutter Package
Flutter plugin for discovering the state of the soft-keyboard visibility on Android and iOS.
pub.dev
이전 내용
키보드 감지는 SatelessWidget에서는 불가능하고 StatefulWidget에 WidgetsBindingObserver를 추가해서 이벤트를 감지할 수 있습니다.
추가적으로 textfield에 focusNode를 추가하여 textfield에 focus가 있는지 여부도 같이 확인합니다.
class CommentContainerState extends State with WidgetsBindingObserver { final FocusNode focusNode = new FocusNode(); @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); focusNode.addListener(focus); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); focusNode.removeListener(focus); focusNode?.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return new Container(child: TextField( focusNode: focusNode, /* 필요없는 부분 삭제*/ )); } @override void didChangeMetrics() { if (!mounted) return; if ( focusNode.hasFocus && MediaQuery.of(context).viewInsets.bottom > 0.0 &&) { /// 키보드가 내려가는 경우 } else { /// 키보드가 올라온 경우 } } }
didChangeMetrics 함수는 크기가 변경될 때 호출되는 함수입니다. 아마 화면이 회전되는 경우에도 이벤트가 발생할 수 있으니 몇가지 변수를 추가해서 정확하게 체크해야 합니다.
현재 화면에서 키보드만 내리고 싶을 때는 아래와 같이 새로운 focusNode를 생성하여 그쪽에 포커스를 넘겨주면 됩니다.
FocusScope.of(context).requestFocus(new FocusNode());
'개발 > Flutter' 카테고리의 다른 글
xcode 14 베타 사용시 Invalid Bundle로 배포 안되는 버그 수정 (0) | 2022.09.05 |
---|---|
캐러셀 리스트뷰 만들기 (0) | 2018.12.21 |
배경이 투명한 페이지 만들기 (0) | 2018.12.06 |
링크 모음 (0) | 2018.11.25 |
상태바, 내비게이션 바 보이기/감추기 (0) | 2018.11.25 |
상태바 투명하게 만들기 (0) | 2018.11.25 |