Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Construtor com dois pontos

Tentei rever algumas aulas, procurando onde é comentado sobre a declaração de construtores com dois pontos após o parâmetros em Dart, para relembrar como eles funcionam, mas não encontrei. Poderiam me informar em qual aula é falado sobre esse assunto?

Me refiro a construtores desse tipo:

Contact.fromJson(Map<String, dynamic> json) :
    this.id = json['id'],
    this.name = json['name'],
    this.accountNumber = json['accountNumber'];
1 resposta
solução!

Olá Elvis, tudo bem ?

Acredito que o instrutor não chegou a comentar por ser assunto mais profundo do mundo Dart, mas é bem simples :)

Isso nada mais é do que a chamada lista inicializadora, ou em inglês, initializer list, que é uma lista executada antes do corpo do construtor, então não chega a ser um construtor diferente, é apenas uma particularidade dos construtores do Dart

Tipicamente quando fazemos:

Contact(this.name, this.accountNumber) 

Seria a mesma coisa de fazer:

Contact( String name, int accountNumber) 
    : this.name = name,
    this.accountNumber = accountNumber

Tipicamente, iremos utilizar para 3 coisas:

  1. Inicializar campos finais da nossa estrutura (mas estamos acostumados a fazer isso mais da primeira maneira)

  2. Chamar a invocação de uma classe mãe

ContaCorrente() : super()
  1. Realizar alguma verificação com assert
Contact(this.name, this.accountNumber) 
    : assert( accountNumber >= 0),
    assert( name.length > 0)

Aqui uma observação, que você conseguirá criar o objeto, o assert só dará problemas em nossos testes :)

Também temos uma 4º utilidade, mas que não vejo sendo tão comum, que é redirecionar para um outro construtor, então algo como:

Conta.apenasNome(this.name) : this(name, Random().nextInt(200));

Então é basicamente isso, utilizaremos os : para operações que devem ser realizadas antes do corpo do construtor, e as mais comuns são a inicialização de campos finais e verificação com assert

Abraços e Bons Estudos!