Typically references to inherited widgets should occur in widget build() methods.

flunge·2022년 1월 19일
0

Flutter

목록 보기
10/13

When an inherited widget changes, for example if the value of Theme.of() changes, its dependent widgets are rebuilt. If the dependent widget's reference to the inherited widget is in a constructor or an initState() method, then the rebuilt dependent widget will not reflect the changes in the inherited widget.
Typically references to inherited widgets should occur in widget build() methods. Alternatively, initialization based on inherited widgets can be placed in the didChangeDependencies method, which is called after initState and whenever the dependencies change thereafter.

Provider패키지를 쓰던 중 initState안에서 watch를 호출할 때 발생
상속 위젯의 변화를 종속 위젯이 반영해야 하는데 initState는 위젯이 처음 생성될 때 한번 호출되고 다시 호출되지 않는 메소드라 변경 사항을 반영할 수 없게 되기 때문에 발생하는 에러이다. 이 경우 didChangeDependencies를 대신해서 사용하라고 한다. didChangeDependencies는 initState 이후에 변경이 있을때마다 호출된다.

@override
void initState() {
  // TODO: implement initState
  super.initState();
  context.watch<Temp>();
}

//아래처럼 didChangeDependencies안에서 사용하자

@override
void didChangeDependencies() {
  super.didChangeDependencies();
  context.watch<Temp>();
}

0개의 댓글