Pular para o conteúdo principal

use_build_context_synchronously

Saiba mais sobre a regra de lint use_build_context_synchronously.

Estável
Flutter
Lançado no Dart 2.13

Não use BuildContext através de lacunas assíncronas.

Detalhes

#

NÃO use BuildContext através de lacunas assíncronas.

Armazenar um BuildContext para uso posterior pode facilmente levar a travamentos difíceis de diagnosticar. Lacunas assíncronas armazenam implicitamente o BuildContext e estão entre as coisas mais fáceis de passar despercebidas ao escrever código.

Quando um BuildContext é usado, a propriedade mounted deve ser verificada após uma lacuna assíncrona, dependendo de como o BuildContext é acessado:

  • Ao usar a propriedade context de um State, a propriedade mounted do State deve ser verificada.
  • Para outras instâncias de BuildContext (como uma variável local ou um argumento de função), a propriedade mounted do BuildContext deve ser verificada.

RUIM:

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

BOM:

dart
void onButtonTapped(BuildContext context) {
  Navigator.of(context).pop();
}

BOM:

dart
void onButtonTapped(BuildContext context) async {
  await Future.delayed(const Duration(seconds: 1));
​
  if (!context.mounted) return;
  Navigator.of(context).pop();
}

BOM:

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

Ativar

#

Para ativar a regra use_build_context_synchronously, adicione use_build_context_synchronously em linter > rules no seu arquivo analysis_options.yaml:

analysis_options.yaml
yaml
linter:
  rules:
    - use_build_context_synchronously

Se você usa a sintaxe de mapa YAML para configurar as regras de lint, adicione use_build_context_synchronously: true em linter > rules:

analysis_options.yaml
yaml
linter:
  rules:
    use_build_context_synchronously: true

Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.