2
respostas

ERRO EXCEPTION CAUGHT BY RENDER

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

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeBoa tarde pessoal, esse erro aconteceu, logo após eu remover os dados mockados do MovieCard, e inserido o state.movies[index]

2 respostas

Olá, Pedro!

Parece que você está enfrentando um erro comum no Flutter relacionado ao layout, onde um widget está recebendo um tamanho infinito durante o layout. Esse tipo de erro geralmente ocorre quando um widget que precisa de limites definidos para o seu tamanho é colocado dentro de um contexto que não impõe esses limites, como um widget com propriedades de scroll ou flexibilidade.

A mensagem de erro indica que o RenderPadding e outros widgets estão recebendo um tamanho infinito, o que não é permitido. Para resolver esse problema, você precisa garantir que os widgets dentro de um contexto flexível, como ListView, Column ou Row, tenham restrições de tamanho definidas ou estejam envolvidos por widgets que forneçam essas restrições, como Expanded, Flexible, ou Container com propriedades de altura e largura definidas.

No seu caso, após a remoção dos dados mockados e a inserção de state.movies[index], é possível que você tenha alterado inadvertidamente a estrutura que fornece essas restrições de tamanho para o MovieCard. Verifique se o MovieCard está dentro de um contexto que permite definir seu tamanho adequadamente. Se estiver usando um GridView.builder, por exemplo, certifique-se de que as propriedades crossAxisCount e childAspectRatio estejam configuradas corretamente para permitir que cada item do grid tenha um tamanho finito.

Além disso, confira se o MovieCard tem todas as restrições de tamanho necessárias ou se algum widget dentro dele está causando o problema. Às vezes, um simples Container com propriedades de width e height definidas ou o uso de Expanded em um contexto flexível pode resolver o problema.

Espero ter ajudado e bons estudos!

Passei pelo mesmo problema e depois de corrigir ele bati em uma imagem com erro também. Substitui o build() do teu MovieCard pelo código a seguir e vê se resolve, deixei uns comentários do porquê fiz cada alteração no código:

@override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Expanded(
          child: Card(
              clipBehavior: Clip.hardEdge,
              child: InkWell( // Removi o ConstrainedBox que envolvia esse  inkWell e adicionei o Expanded no card para ele ocupar o máximo de espaço possível na Column
                  onTap: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => MovieScreen(movie: movie),
                      ),
                    );
                  },
                  child: movie.imageURI != null
                      ? Ink(
                          width: double.infinity,
                          // Removi o decorador e adicionei esse child para tratar uma Imagem que não estava carregando corretamente
                          child: Image.network(
                            movie.imageURI!,
                            fit: BoxFit.cover,
                            errorBuilder: (context, error, stackTrace) => Ink(
                              child: const Center(
                                child: Icon(Icons.error),
                              ),
                            ),
                          ),
                        )
                      : Ink(
                          child: const Center(
                            child: Icon(Icons.error),
                          ),
                        ))),
        ),
        Text(
          movie.name,
          style: Theme.of(context).textTheme.displaySmall,
        )
      ],
    );
  }

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