2017-09-12 2 views
0

기본 페이지에는 많은 하위 위젯이 있습니다. 검색 할 때 SearchWidget이 표시되고 그렇지 않은 경우 DashletsWidget이 표시됩니다.하위 위젯에서 TabController 길이를 업데이트하기위한 패턴

DashletsWidgetTabController입니다. TabController은 기본 페이지에 보관되므로 검색 후 활성 탭이 재설정되지 않습니다.

DashletsWidget에는 대시 탭 설정 창이있어 탭 수를 변경할 수 있습니다.

DashletsWidget(ValueNotifier<int> dashletCount, TabController controller)ValueNotifier을 사용하면 부모에게 controller을 다시 만들 수 있습니다. 다시 작성하는 동안 이전 TabController를 안정적으로 처리 할 수 ​​없으므로 처리하지 않고 바로 참조 해제하십시오. 그것은 일종의 일이지만 너무 자연스럽지 않습니다. TabController.length을 업데이트하는 좋은 패턴이 있습니까?

답변

1

사용하지 않은 TabController을 가비지 수집하도록해도 좋습니다.

다음과 같은 또 다른 전략이 있습니다. DashletsWidget보다 높은 트리 수준 인 State에있는 모델 개체의 탭 수에 대한 정보를 저장하고 해당 모델 개체를 구성으로 전달할 수있었습니다 값은 DashletsWidget입니다. DashletsWidget이 다시 작성되고 생성자 인수가 변경되면 메서드가 DashletsWidgetState으로 호출되고 TabController을 바꿀 수있는 기회로 사용할 수 있습니다. 또는 탭 수를 DashletsWidgetValueKey으로 구성 할 수 있으므로 자동으로 disposeDashletsWidgetState으로 변경하고 새 탭으로 바꿉니다.

+0

GC 팁과 ValueKey 트릭을 주셔서 감사합니다. 부모를 상태로 이동하면 상황이 복잡해집니다. DashletsWidget은 대시 렛 정보 목록을 저장하는'StoreWatcher'를 확장합니다. 내가 시도한 것부터'Store' 인스턴스를 얻으려면'StoreWatcher'가 필요합니다. 'StoreWatcher'를 확장 한 위젯은'TabController'에'TickerProviderStateMixin'을 사용할 수 없습니다. 그래서 거기서 끝나 버립니다. TabController를 바꾸는 동안 탭 전환 애니메이션에 문제가 있기 때문에 현재 솔루션도 적절하지 않습니다. –