-
[Flutter] Don't use 'BuildContext's across async gapsFlutter 2024. 6. 22. 22:59
아래와 같은 Warning 메시지를 만날 때가 있다.
Don't use 'BuildContext's across async gaps. Try rewriting the code to not reference the 'BuildContext'.dartuse_build_context_synchronously
예를 들면 아래와 같은 상황이다.
버튼을 눌렀을 때 비동기 동작을 수행할 때 ! 주로 네트워크 통신이 될텐데
작업이 성공이면 pop, 실패면 alert을 띄워주고 싶다.
이때 context를 사용하게 되는데 비동기 작업 직후에 context 바로 사용하면 안된다고 경고를 주고 있다.ElevatedButton( onPressed: () async { await viewModel.performAsyncUpdate(); if (viewModel.isSuccess) { Navigator.pop(context); // 이전 화면으로 전환 } else if (viewModel.errorMessage != null) { showDialog( context: context, builder: (context) => AlertDialog( title: Text('Error'), content: Text(viewModel.errorMessage!), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: Text('OK'), ), ], ), ); } }, child: Text('Perform Update'), ),
context.mounted로 안전한지 확인 해주면 된다.
ElevatedButton( onPressed: () async { await viewModel.performAsyncUpdate(); if (viewModel.isSuccess) { if (context.mounted) { Navigator.pop(context); // 이전 화면으로 전환 } } else if (viewModel.errorMessage != null) { if (context.mounted) { showDialog( context: context, builder: (context) => AlertDialog( title: Text('Error'), content: Text(viewModel.errorMessage!), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: Text('OK'), ), ], ), ); } } }, child: Text('Perform Update'), ),
'Flutter' 카테고리의 다른 글