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:
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:
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:
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();
}
}
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
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ê.