Pular para o conteúdo principal

use_build_context_synchronously

Detalhes sobre o diagnóstico 'use_build_context_synchronously' produzido pelo analisador do Dart.

Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check.

Don't use 'BuildContext's across async gaps.

Descrição

#

O analisador gera este diagnóstico quando um BuildContext é referenciado por um StatefulWidget após uma lacuna assíncrona, sem antes verificar a propriedade mounted.

Armazenar um BuildContext para uso posterior pode levar a falhas difíceis de diagnosticar. Lacunas assíncronas armazenam implicitamente um BuildContext, o que facilita deixá-las passar despercebidas durante a análise.

Exemplo

#

O código a seguir gera este diagnóstico porque o context é passado para um construtor depois do await:

dart
import 'package:flutter/material.dart';
​
class const MyWidget({super.key}) extends Widget {
  void onButtonTapped(BuildContext context) async {
    await Future.delayed(const Duration(seconds: 1));
    Navigator.of(context).pop();
  }
}

Correções comuns

#

Se você consegue remover a lacuna assíncrona, então remova-a:

dart
import 'package:flutter/material.dart';
​
class const MyWidget({super.key}) extends Widget {
  void onButtonTapped(BuildContext context) {
    Navigator.of(context).pop();
  }
}

Se você não consegue remover a lacuna assíncrona, então use mounted para proteger o uso do context:

dart
import 'package:flutter/material.dart';
​
class const MyWidget({super.key}) extends Widget {
  void onButtonTapped(BuildContext context) async {
    await Future.delayed(const Duration(seconds: 1));
    if (context.mounted) {
      Navigator.of(context).pop();
    }
  }
}

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ê.