framework가 widget들을 그리고있는 상황에서 다시 widget을 그려달라고 요청하면 안된다. 또는 화면을 그리면서 다른 화면으로 이동하라고 요청하면 안된다.
- Create an element (BuildContext)
- initState
- didChangeDependencies
- Build
위의 에러를 수정하기위해서 addPostFrameCallback
을 사용할 수 있다.
현재 frame이 완성된 후, 등록된 callback을 실행시키도록 한다.
WidgetBinding.instance!.addPostFrameCallback((Duration timestamp) {
/// Do something
});
에러를 해결하는 2가지 다른 방법들도 있다.
Future.delayed(Duration(seconds: 0), () {
/// Do something
});
Future.microtask(() {
/// Do something
});
화면이 표시되자마자 dialog같은 것을 보여주고 싶을때 initState에서 호출하면 발생한다.
여기서도 addPostFrameCallback
을 사용할 수 있다.
WidgetBinding.instance!.addPostFrameCallback((Duration timestamp) {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: Text('Dialog!),
);
}
);
});