해결된 질문
작성
·
420
0
안녕하세요. 강의 너무 잘 듣고 있습니다.
다름이 아니라 구조적인 부분에서 질문을 한가지 드리고 싶습니다.
HomeScreen이 StatefulWidget으로 정의되어있고 선택된 날짜가 변경될때마다 _ScheduleList가 변경되며 rebuild되는 구조를 가지고 있는데 이렇게 될 경우 _ScheduleList 안에 StreamBuilder가 다시 initialize되는 것을 확인하였습니다. 따라서 print(snapshot.data) 시 에도 두번 연속적으로 값이 뜨게 됩니다. 물론 문제는 없지만, 실 앱 실행 시 stream에서 재연결을 계속 반복하게 되는데 문제가 없는지 궁금합니다.
답변 1
0
drift 2.6.0 사용
자체적으로 답변이 나왔습니다.
생각한 방식은 두가지 입니다.
_ScheduleList 위젯을 재빌드를 못하도록 하기
stream 값을 외부로 노출시키기
1번은 stateless 위젯이든 stateful 위젯이든 build 함수는 setstate 시 무조건 불리게 되어 불가
2번은 watchSchedules에 선택한 날짜에 대한 값이 전달되고 그에 따라 stream되는 값이 달라져야하기 때문에 불가
하다고 생각하였습니다.
추가적으로 watchSchedules 시에 두번 불러와 지는 이유는 snapShot의 connectionState가 Connection.waiting을 일때 과거 캐시된 데이터를 불러오고, Connection.active로 변경되기 때문입니다.
안녕하세요! 말씀하신 것처럼 만약에 두번 렌더링을 한번으로 변경 할 수 있다면 매우 좋지만 플러터처럼 값의 변경에 의해 reactive 하게 렌더링하는 프레임워크의 경우 어느정도 중복 렌더링이 있을거라는 가정을 깔고 가긴 합니다. 나중에 로직이 복잡해지면 로직의 완전한 분리가 렌더링 몇번 적게하는 효율보다 앱을 유지보수하는데 더욱 편리합니다. 플러터 또한 이런 요소를 예상하고 만든 프레임워크기때문에 어느정도는 감안하고 사용하셔도 괜찮습니다. (물론 줄일 수 있다면 무조건 좋습니다)