728x90
//push
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) {
return Scaffold(
backgroundColor: Theme.of(context).backgroundColor,
body: const Center(
child: Text(
'Break Time!',
),
),
),
);
},
),
);
//duration
await Future.delayed(const Duration(seconds: 3));
// pop!!
if (mounted) Navigator.of(context).pop();
mounted란 현재 tree 안에 state object가 있는지를 bool 값으로 알려준다. async-await에 context를 사용할 경우, delay를 적용할 경우 비동기적인 특성으로 인해 dispose가 일어나 context(tree) 안에 state object가 더 이상 남아있지 않을 수 있기 때문이다. 또한 이렇게 async 이후에 context를 사용하는 것은 지양해야한다고 한다.
mounted를 사용하지 않을 경우 do not use buildcontexts across async gaps 라는 에러가 발생했다.
[reference]
https://stackoverflow.com/questions/68871880/do-not-use-buildcontexts-across-async-gaps
https://stackoverflow.com/questions/65234864/flutter-dart-what-is-mounted-for
728x90