키보드 show/hide 감지하기
키보드 감지는 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' 카테고리의 다른 글
캐러셀 리스트뷰 만들기 (0) | 2018.12.21 |
---|---|
배경이 투명한 페이지 만들기 (0) | 2018.12.06 |
링크 모음 (0) | 2018.11.25 |
키보드 show/hide 감지하기 (0) | 2018.11.25 |
상태바, 내비게이션 바 보이기/감추기 (0) | 2018.11.25 |
상태바 투명하게 만들기 (0) | 2018.11.25 |
댓글
이 글 공유하기
다른 글
-
배경이 투명한 페이지 만들기
배경이 투명한 페이지 만들기
2018.12.06 -
링크 모음
링크 모음
2018.11.25 -
상태바, 내비게이션 바 보이기/감추기
상태바, 내비게이션 바 보이기/감추기
2018.11.25 -
상태바 투명하게 만들기
상태바 투명하게 만들기
2018.11.25