1
resposta

Preenchimento de tela de detalhe no app cozinhando em casa

Boa noite e todos,

Estou seguindo o curso de flutter e apesar de estar com o código bem parecido com a instrutora, estou emperrado em um lugar que para ela passou tranquilo.

É o seguinte, neste app eu tenho duas telas Home e Detalhes. Na home está tudo ok, mas quando eu passo para a tela de detalhes aparece o seguinte:

======== Exception caught by widgets library =======================================================
The following _TypeError was thrown building Detalhes(dirty):
type 'Null' is not a subtype of type 'String'

The relevant error-causing widget was: 
  Detalhes file:///C:/Users/rafa-/StudioProjects/cozinhando_casa/lib/telas/home/home.dart:49:35
When the exception was thrown, this was the stack: 
#0      Detalhes._construirColunaIconesDetalhes (package:cozinhando_casa/telas/detalhes/detalhes.dart:63:17)
#1      Detalhes._construirLinhaIconesDetalhes (package:cozinhando_casa/telas/detalhes/detalhes.dart:49:9)
#2      Detalhes._construirDetalhes (package:cozinhando_casa/telas/detalhes/detalhes.dart:21:9)
#3      Detalhes.build (package:cozinhando_casa/telas/detalhes/detalhes.dart:11:12)
#4      StatelessElement.build (package:flutter/src/widgets/framework.dart:4648:28)
...
====================================================================================================

Eu imagino que ele deve estar realmente reclamando que algum lugar na tela de receitas o valor possivelmente será null quando não pode. Mas de qualquer forma não estou sabendo identificar onde isso está ocorrendo, isso se for isso mesmo.

De qualquer maneira segue o link para o repositório no github: https://github.com/rafa-so/flutter-alura

Abraços Rafafel Oliveira

1 resposta

Olá Rafael, tudo bem?

Eu dei uma olhada no seu repositório e esse problema relacionado ao 'Null' veio da forma que foi acessado dois campos no json. Se você reparar, no arquivo json, temos o campo "tempo_preparo" e "modo_preparo" e lá no arquivo receita.dart a gente meio que troca esses nomes por "tempoPreparo" e "modoPreparo". Mas na hora que é feito o map no json é preciso acessar os campos no formato que estão no json, ou seja, ['tempo_preparo'] e ['modo_preparo'] e esse pequeno detalhe estava retornando Null, porque ele tentava achar um campo com o nome tempoPreparo no arquivo json, mas só existia tempo_preparo.

Resumido, fazendo só essas pequenas alterações no arquivo receita.dart o problema é resolvido. Vou deixar aqui abaixo o código desse arquivo consertado:

class Receita {
  String? titulo;
  String? foto;
  String? porcoes;
  String? tempoPreparo;
  String? ingredientes;
  String? modoPreparo;

  Receita ({
    this.titulo,
    this.foto,
    this.porcoes,
    this.tempoPreparo,
    this.ingredientes,
    this.modoPreparo
  });

  Receita.fromJson(Map<String, dynamic> json) {
    titulo = json['titulo'];
    foto = json['foto'];
    porcoes = json['porcoes'];
    tempoPreparo = json['tempo_preparo'];
    ingredientes = json['ingredientes'];
    modoPreparo = json['modo_preparo'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['titulo'] = this.titulo;
    data['foto'] = this.foto;
    data['porcoes'] = this.porcoes;
    data['tempo_preparo'] = this.tempoPreparo;
    data['ingredientes'] = this.ingredientes;
    data['modo_preparo'] = this.modoPreparo;

    return data;
  }
}

Espero ter ajudado. Bons estudos!