⚠️

『Do not use BuildContexts across async gaps』をStatelessWidget でも簡単に回避する

2023/02/18に公開
void someFunction(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));
  Navigator.of(context).pop();
}

この警告を解消するための代表的な方法は、StatefulWidget で mounted を使うことでした。

void someFunction(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));
  if(mounted){
    Navigator.of(context).pop();
  }
}

StatelessWidget でも解消は可能でしたが、状況によっては難しい場合もありました。
これが、Flutter 3.7 以降では以下のように簡単に対処できるようになりました。

void someFunction(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));
  if(context.mounted){
    Navigator.of(context).pop();
  }
}

まとめ

あくまで警告なので、無視して実行することもできますが、エラーにつながる可能性のある警告は解消しておくのがベターかと思います。

Discussion