1
resposta

[Dúvida] Passagem de argumento por referência

Fiz alguns testes e observei que o problema poderia ser resolvido utilizando a passagem de argumento por referência (comum em lingugens como C e C++), a baixo segue o meu código de teste, no Caso 1 cheguei a conclusão de que o valor não muda pois quando numbers é passado para a função ele tem referência a uma lista, já dentro da função eu basicamento mudo a referência da lista por isso o valor para o numbers presente na main não muda. No caso Caso 2 como continuo trabalhando na mesma referêncida da lista que foi passada utilizando somente os métodos é possível mudar os valores direto no endereço de memória, cheguei as essas conclusões mas não sei se está correto o meu pensamento, outro ponto seria se alguém poderia explicar melhor o que está acontecendo?

void main() {
    List<int> numbers = [1, 2, 3];

    // Caso 1
    novoValor(numbers);
    print(numbers); // [1, 2, 3]

    // Caso 2
    newValue(numbers);
    print(numbers); // [4, 5, 6]
}

void novoValor(List<int> numbers) {
    numbers = [4, 5, 6];
}

void newValue(List<int> numbers) {
    numbers.clear();
    numbers.addAll([4, 5, 6]);
}
1 resposta

Opa!

Pelo visto o Dart não permite que você faça as atribuições dessa forma para uma lista local dentro de outra função, mas quando você faz as devidas referências ele entender perfeitamente, como no exemplo abaixo:

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