TextEditingController
는 렌더링간에 유지되어야하는 클래스 인스턴스입니다. 그러나 StatelessWidget에 저장하면 기본적으로 모든 업데이트 후에 다시 만듭니다.Stateful Widget
으로 생성하시오.https://flutter.dev/docs/cookbook/forms/text-field-changes
TextFormField
생성할 때도 공식문서에서도 stateful widget으로 생성하라고 나와있군요.https://stackoverflow.com/questions/55549663/do-stateless-widgets-dispose-on-their-own
Stateless Widget
은 즉각,즉시는 아니지만 파기할때 objects가 disposed 안된다는 것을 나타냅니다.TextEditingController
를 사용하거나 변경가능한 상태를 유지하는 경우 Stateful Widget
을 사용해 State 클래스에 상태를 유지해야합니다.Stateless Widget
를 사용하면, UI가 rebuilt(재빌드)될 때 마다 state가 손실됩니다.Stateful Widget
일때Stateful Widget
사용Stateful Widget
을 써줘야함.Stateless Widget
은 재빌드될 때 상태(state)값 손실TextEditingController
는 렌더링간에 유지되어야하는 클래스 인스턴스,Stateful Widget
필요다보님이 적어주신 내용이 더 best practice 입니다만,
InheritedWidget 의 동작과 흡사한 Provider 혹은 Stream 객체를 이용할 경우 dispose 시켜야할 객체들을 Provider Model 안에 삽입해주면 StatelessWidget을 사용하더라도 Widget이 그려지는 특성상 전체를 build하지 않고 필요부분만 교체시킬 수 있습니다.
다만, 다보님 말씀처럼 Controller와 같이 business logic이 아닌 UI 자체에 가깝게 붙어있어야할 기능은 StatefulWidget을 사용하여 처리하는 게 맞습니다.
좋은 내용 감사합니다.
1시간동안 TextEditingController 로그가 왜안찍히나 고민하고있었는데... 덕분에 원인을 알게됐습니다. 감사합니다