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();
}
}
}