Dart & Flutter

[Flutter] push a new page for a specific duration (use mounted)

ju_young 2023. 4. 14. 03:24
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