1
resposta

[Dúvida] Context error

Como eu resolveria esse warning? Tentei seguir o que a documentação indica porém não funcionou.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Rafael.

Tudo bem?

O warning "Don't use 'BuildContext's across async gaps" geralmente ocorre quando você está utilizando um BuildContext que não é válido em determinado contexto assíncrono. Isso pode acontecer, por exemplo, se você estiver tentando usar o BuildContext em uma função assíncrona ou dentro de um callback de uma operação assíncrona.

Para resolver esse problema, você pode tentar seguir algumas práticas recomendadas:

Evite usar BuildContext diretamente em funções assíncronas: Em funções assíncronas, o contexto pode mudar e causar esse warning. Tente evitar o uso direto de BuildContext dentro de funções assíncronas.

Use BuildContext apenas quando necessário: Se você precisar passar o BuildContext para uma função assíncrona, tente minimizar o uso direto do BuildContext e use apenas onde for estritamente necessário.

Use BuildContext local dentro da função: Se estiver trabalhando com uma função assíncrona, evite capturar o BuildContext de fora da função. Em vez disso, obtenha o BuildContext localmente dentro da função. Você pode fazer isso usando Builder ou outra abordagem para obter o BuildContext correto.

Aqui está um exemplo de como você pode refatorar sua função para tentar evitar esse warning:

import 'package:flutter/material.dart';

Future<dynamic> showDialogBox({
  String title = 'Atenção!',
  String content = 'Você deseja realmente executar essa operação?',
  String affirmativeOption = 'Confirmar',
}) async {
  // Obtenha o BuildContext localmente dentro da função
  BuildContext context = NavigatorKey.currentContext;

  return showDialog(
    context: context,
    builder: (BuildContext builderContext) {
      return AlertDialog(
        title: Text(title),
        content: Text(content),
        actions: [
          FlatButton(
            onPressed: () {
              Navigator.pop(builderContext, false);
            },
            child: Text('Cancelar'),
          ),
          FlatButton(
            onPressed: () {
              Navigator.pop(builderContext, true);
            },
            child: Text(affirmativeOption),
          ),
        ],
      );
    },
  );
}

Neste exemplo, eu adicionei NavigatorKey.currentContext para obter o BuildContext localmente dentro da função. Certifique-se de que NavigatorKey seja um GlobalKey que você pode configurar no início do seu aplicativo. Isso deve ajudar a resolver o warning relacionado ao uso inadequado do BuildContext em contextos assíncronos.

Espero ter ajudado. Qualquer dúvida manda aqui. Valeu.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software