본문 바로가기
카테고리 없음

[Flutter] Keyboard rebuild

by YuminK 2022. 5. 20.

Flutter는 keyboard에 대한 show/hide처리를 할 때 rebuild가 일어나게 된다. 문제는 이러한 처리를 할 때 notifier의 생성자에서 데이터를 load해주고 있는데 키보드 클릭할 때마다 로드가 일어나서 대략 난감;;

 

Scaffold의 resizeToAvoidBottomInset속성에 false를 줘라, MediaQuery를 사용하지 마라. (sizer 패키지를 사용해라)

이런 이야기들이 주를 이루고 있다.

 

나의 경우에는 ScrollView에 대한 처리해주고 있어서 그런지 위의 처리를 모두 처리해도 계속 rebuild가 일어났다.

데이터를 계속 받아온다.

rebuild처리는 flutter의 정상적인 처리이고 위 해결책으로는 내 상황에서 사용을 할 수 없으니 새로운 방법을 찾아야 했다. 예전에 서버 연동을 하지 않았을 때 정상적으로 처리가 되었던 것을 확인 했는데 그때의 데이터는 하드코딩으로 되어 있었다. 

 

정상적으로 처리가 된다. 

위의 영상에서도 키보드 show/hide처리에서 rebuild처리를 해주고 있을 것이다. 다만, 데이터를 불러오는 방식이 아니고 하드 코딩으로 되어 있기 때문에 사실상 위젯의 변화가 눈에 보이지 않는 것이다. (정상)

 

결국 이러한 처리를 위해서는 해당 페이지로 오기 전에 미리 데이터를 Load를 해서 사용을 하는 식으로 수정해야 한다. 이후에 키보드가 show/hide가 되더라도 미리 받아둔 데이터를 사용하기 때문에 화면의 변화는 눈에 보이지 않는다.

라고 생각했는데... 왜 안 되지??

 

아까부터 굉장히 이상했던 것이 rebuild가 아니라 ChangeNotifier를 매번 생성하는 것이다. 이전 코드 복붙도 해보고 이런 저런 시도를 해보고 있었는데 문득 생각이 난 것이 DeviceFreview 때문은 아닐까 하는 생각이 들었다.

(왜냐면 그대로 코드를 복붙 했는데도 동작을 안 했다)

  

아니다 다를까 해당 기능을 off 상태로 시작하니까 ... 처음부터 데이터가 정상적으로 보이기 시작한다. 

처음부터 해당 부분만 알았으면 문제가 없는 거였다.... ㅠㅠ

 

changeNotifier + DevicePreview pacakge => works well

keyboard + changeNotifier + DevicePreview package => recreate ChangeNotifier when you show/hide keyboard

 

해당 이슈를 알게 된 것이 아까워서 DevicePreview 쪽에 issue로 올려주기로 했다. 

https://github.com/aloisdeniel/flutter_device_preview/issues/186

 

ChangeNotifier are recreated when you show/hide keyboard · Issue #186 · aloisdeniel/flutter_device_preview

I got this issue. and I honestly don't know how exactly it's working. I turned out this with 4 hours over. changeNotifier + DevicePreview pacakge => works well(without recreation of chan...

github.com

 

댓글