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]);
}