use_build_context_synchronously
非同期ギャップを越えてBuildContext
を使用しないでください。
このルールは Dart 2.13 以降で利用可能です。
ルールセット: flutter
詳細
#非同期ギャップを越えてBuildContext
を使用しないでください。
後で使用するためにBuildContext
を保存すると、診断が難しいクラッシュにつながる可能性があります。非同期ギャップは暗黙的にBuildContext
を保存しており、コードを作成する際に見落としやすいものです。
BuildContext
が使用される場合、BuildContext
へのアクセス方法に応じて、非同期ギャップ後にmounted
プロパティを確認する必要があります。
State
のcontext
プロパティを使用する場合、State
のmounted
プロパティを確認する必要があります。- その他の
BuildContext
インスタンス(ローカル変数や関数引数など)の場合、BuildContext
のmounted
プロパティを確認する必要があります。
悪い例
dart
void onButtonTapped(BuildContext context) async {
await Future.delayed(const Duration(seconds: 1));
Navigator.of(context).pop();
}
良い例
dart
void onButtonTapped(BuildContext context) {
Navigator.of(context).pop();
}
良い例
dart
void onButtonTapped(BuildContext context) async {
await Future.delayed(const Duration(seconds: 1));
if (!context.mounted) return;
Navigator.of(context).pop();
}
良い例
dart
abstract class MyState extends State<MyWidget> {
void foo() async {
await Future.delayed(const Duration(seconds: 1));
if (!mounted) return; // Checks `this.mounted`, not `context.mounted`.
Navigator.of(context).pop();
}
}
使用法
#use_build_context_synchronously
ルールを有効にするには、analysis_options.yaml
ファイルのlinter > rulesの下にuse_build_context_synchronously
を追加します。
analysis_options.yaml
yaml
linter:
rules:
- use_build_context_synchronously
特に明記されていない限り、このサイトのドキュメントは Dart 3.5.3 を反映しています。ページ最終更新日: 2024-07-03。 ソースを表示または問題を報告する。