[Flutter] 왜 키패드 동작시 rebuild가 발생할까

메모하는 개발자·2021년 10월 19일
0

Flutter삽질방지

목록 보기
3/9

자식위젯에서 키패드를 펼치고 닫을때마다
부모위젯이 rebuild되는 상황이 있어서 원인을 찾아보았다

결론부터 말하자면

키패드가 동작하면 MediaQueryData.viewInsets 가 업데이트 되고 -> Scaffold같은 MediaQuery에 의존하는 위젯을 쓰면 키패드 동작으로 인해 rebuild가 된다.

그럼 키패드 동작해도 위젯이 rebuild가 안되게 하려면?

return Scaffold(
...
resizeToAvoidBottomInset: false
)

resizeToAvoidBottomInset = false 를 사용하여 키패드가 화면을 그대로 덮게하여 해결할수있다. 그래도 여전히 rebuild가 된다면 아직 스크린이 MediaQuery에 의존하거나 MediaQuery에 의존하는 위젯이 쓰이고있는것이다.
(항상 build가 독립적으로 되도록 신경써야겠다,, 여기서 독립적 build란 state 혹은 위젯 속성이 바뀌지않는이상 위젯트리는 항상 동일하도록!)

참고 사이트
1. https://github.com/flutter/flutter/issues/52342
2. https://stackoverflow.com/questions/56313800/why-does-the-software-keyboard-cause-widget-rebuilds-on-open-close
3. MediaQueryData Class 설명 : https://api.flutter.dev/flutter/widgets/MediaQueryData-class.html

1개의 댓글

comment-user-thumbnail
2023년 6월 24일

독립적 build에 대해서 조금 더 자세히 알고 싶은데 ㅠㅠ
어떤 걸 찾아보면 될까요..

답글 달기