
context.go('/order-status')context.read<OrderStatusBloc>().add(const FetchOrder()); 를 호출 -> 최신 상태 반영 X


context.go('/order-status') → initState 실행 → FetchOrder 이벤트 호출 → UI가 정상 업데이트 된다.context.go('/order-status') 실행 후 initState가 호출되지 않아 FetchOrder 이벤트가 실행 되지 않는다.OrderFetch)를 반복 배출하면 flutter는 상태가 변경되지 않는다고 간주한다. 이로 인해, 두 번째 주문 이후에도 order_status_screen 은 emit(OrderFetch) 만 호출되므로 상태 전환이 이루어지지 않는다
context.go 의 동작 방식context.go는 기존 화면을 재사용하기 때문에, OrderStatusScreen 이 이미 생성되어 있다면 initState 를 호출하지 않는다.
첫 번째 화면 생성 시
PaymentScreen
└── OrderStatusScreen
└── initState() 호출
└── build() 호출
기존 화면 재사용
PaymentScreen
└── OrderStatusScreen
└── initState() 호출
└── build() 호출
그럼 initState 를 사용하지 않고 build 메서드에만 context.read<OrderStatusBloc>().add(const FetchOrder()) 를 실행하면 되지 않을까?
initState 가 호출되지 않으면 초기 상태 전환(OrderStatusInitial → OrderFetch)이 발생하지 않기 때문에 필요하다build 메서드의 역할
initState 는 초기 화면 생성 단계에서만 실행되기 때문에 build 메서드에도 context.read<OrderStatusBloc>().add(const FetchOrder()) 를 넣어준다emit(OrderStatusInitial()) 를 추가해 상태를 초기화한 뒤 OrderFetch 상태를 배출initState 와 상태 전환 문제 해결 emit(OrderStatusInitial())


initState 와 build 메서드

context.go('/order-status') 로 화면 전환 initState에서 이벤트를 추가하여 정상적으로 상태 전환(OrderStatusInitial → OrderFetch)이 이루어진다.build 메서드에서 이벤트를 추가하여 화면이 재사용되어도 상태 업데이트를 보장한다.