Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Erro: No TaskInherited found in context

Assim como outro colega estou usando rotas nomeadas no meu projeto, mas ao contrário dele não consegui solucionar o problema de contexto da TaskInherited não estar sendo encontrada.

Essa é a mensagem completa: "No TaskInherited found in context 'package:primeiro_projeto/Data/task_inherited.dart': Failed assertion: line 41 pos 12: 'result != null'"

Estou usando Flutter 3.10.5 e Dart 3.0.5

Este é o repositório Github: https://github.com/analubarreto/primeiro_projeto_flutter

3 respostas

Olá, Ana!

O erro "No TaskInherited found in context" geralmente ocorre quando você está tentando acessar um widget que não está presente no contexto atual. Isso pode acontecer por diversos motivos, como uma má configuração das rotas nomeadas ou uma referência incorreta ao widget desejado.

Uma possível solução para esse problema é verificar se você está passando corretamente o widget TaskInherited para o contexto desejado. Certifique-se de que você está utilizando o widget corretamente em todas as partes do seu código onde ele é necessário.

Além disso, verifique se as rotas nomeadas estão sendo configuradas corretamente. Certifique-se de que você está registrando todas as rotas necessárias no MaterialApp e que está utilizando os nomes corretos ao navegar entre as telas.

Outra dica é verificar se todas as dependências do seu projeto estão atualizadas. Às vezes, erros de contexto podem ocorrer devido a versões incompatíveis de pacotes.

Por fim, sugiro que você dê uma olhada no repositório do seu projeto no GitHub para verificar se há algum problema de configuração ou referência incorreta no código.

Espero que essas dicas possam te ajudar a solucionar o problema. Lembre-se de sempre verificar a documentação oficial do Flutter e buscar por exemplos práticos para entender melhor como lidar com o contexto e as rotas nomeadas.

Espero ter ajudado e bons estudos!

Não estou usando nenhum pacote além do flutter e do dart. Já olhei e tri olhei o código, inclusive usando IA (Google Bard) para verificar se tinha alguma coisa errada ou algo faltando no código. Também já tentei limpar o cache do Flutter (e reinstalar as dependências) e recentemente tentei até recriar o simulador.

Levando em consideração que estou chamando na Home o TaskInherited e colocando como child o InitialScreen não deveria haver problema nesse código:

body: ListView(
        children: TaskInherited.of(context).taskList
      ),

que é a onde eu acredito está acontecendo o problema porque se eu troco children: TaskInherited.of(context).taskList para uma lista vazia, ele funciona perfeitamente.

solução!

Descobri qual era o problema. Eu não sabia que quando você criava rotas nomeadas assim você estava chamando outra vez o componente, achei que como em várias bibliotecas JS fosse só uma referência, então eu coloquei as minhas rotas nomeadas assim:

      initialRoute: '/initial',
      routes: {
        '/initial': (newContext) => TaskInherited.of(newContext).child as Widget,
        '/form': (newContext) => TaskInherited(child: FormScreen(newContext)),
      }

Para corrigir o erro eu tive que tirar a linha que tinha '/initial' e mudar initialRoute para initialRoute: '/'. Assim deu certinho :). Então o código fica:

      initialRoute: '/',
      routes: {
        '/form': (newContext) => TaskInherited(child: FormScreen(newContext)),
      }

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