メインコンテンツにスキップ

use_build_context_synchronously

非同期処理の合間に、無関係な `mounted` チェックで保護せずに `BuildContext` を使用しないでください。

非同期処理の合間に `BuildContext` を使用しないでください。

説明

#

`StatefulWidget` が非同期処理の合間を過ぎてから `BuildContext` を参照し、`mounted` プロパティを先にチェックしていない場合に、アナライザーはこの診断を生成します。

後で使用するために `BuildContext` を保存しておくと、診断が困難なクラッシュにつながる可能性があります。非同期処理の合間は暗黙的に `BuildContext` を保存するため、診断を見逃しやすくなります。

#

次のコードは、`await` の後に `context` がコンストラクターに渡されているため、この診断を生成します。

dart
import 'package:flutter/material.dart';

class MyWidget extends Widget {
  void onButtonTapped(BuildContext context) async {
    await Future.delayed(const Duration(seconds: 1));
    Navigator.of(context).pop();
  }
}

一般的な修正

#

非同期処理の合間を削除できる場合は、削除してください。

dart
import 'package:flutter/material.dart';

class MyWidget extends Widget {
  void onButtonTapped(BuildContext context) {
    Navigator.of(context).pop();
  }
}

非同期処理の合間を削除できない場合は、`mounted` を使用して `context` の使用を保護してください。

dart
import 'package:flutter/material.dart';

class MyWidget extends Widget {
  void onButtonTapped(BuildContext context) async {
    await Future.delayed(const Duration(seconds: 1));
    if (context.mounted) {
      Navigator.of(context).pop();
    }
  }
}