背景
非同期処理を含むメソッドonTap()
の中で画面のpush遷移を行おうとしたところコンパイラから忠告を受けた
onTap: () async {
final user = await firebaseAuth.signInWithGoogle();
if (user != null) {
context.Navigator.of(this).push(somePage());// Do not use BuildContexts across async gaps
} else {
debugPrint('login failed');
}
},
原因
非同期処理が走るasync
内でBuild Context
を使用すると、context
に差分が生じて、元のcontext
とは異なるcontext
を参照する恐れがあるから。
今回の場合は、context
がWidget Tree
から削除されている可能性があるため警告が出た。
対処法
context
がWidget Tree
から削除されていないかmouted property
で確認する
HookWidget
を使用している場合は useIsMouted()
からmountされているか否か確認する。
onTap: () async {
final user = await firebaseAuth.signInWithGoogle();
if (user != null) {
if (context.mounted) {
context.Navigator.of(this).push(somePage());// Do not use BuildContexts
}
across async gaps
} else {
debugPrint('login failed');
}
},