ambiguous_ set_ or_ map_ literal_ either
Detalhes sobre o diagnóstico 'ambiguous_set_or_map_literal_either' produzido pelo analisador do Dart.
This literal must be either a map or a set, but the elements don't have enough information for type inference to work.
Descrição
#
Como literais de mapa e de conjunto usam os mesmos delimitadores ({ e }),
o analisador observa os argumentos de tipo e os elementos para determinar
qual tipo de literal você quis dizer. Quando não há argumentos de tipo e
todos os elementos são elementos spread (que são permitidos nos dois tipos
de literal), o analisador usa os tipos das expressões que estão sendo
espalhadas. Se todas as expressões tiverem o tipo Iterable, é um literal
de conjunto; se todas tiverem o tipo Map, é um literal de mapa.
Este diagnóstico é emitido quando nenhuma das expressões espalhadas tem um tipo que permita ao analisador decidir se você estava escrevendo um literal de mapa ou de conjunto.
Exemplo
#O código a seguir produz este diagnóstico:
union(a, b) => {...a, ...b};
O problema ocorre porque não há argumentos de tipo e não há informação
sobre o tipo de a ou de b.
Correções comuns
#Há três formas comuns de corrigir este problema. A primeira é adicionar argumentos de tipo ao literal. Por exemplo, se o literal deve ser um literal de mapa, você pode escrever algo como isto:
union(a, b) => <String, String>{...a, ...b};
A segunda correção é adicionar informação de tipo para que as expressões
tenham o tipo Iterable ou o tipo Map. Você pode adicionar um cast
explícito ou, neste caso, adicionar tipos às declarações dos dois parâmetros:
union(List<int> a, List<int> b) => {...a, ...b};
A terceira é adicionar informação de contexto. Neste caso, isso significa adicionar um tipo de retorno à função:
Set<String> union(a, b) => {...a, ...b};
Em outros casos, você pode adicionar um tipo em outro lugar. Por exemplo, suponha que o código original seja assim:
union(a, b) {
var x = {...a, ...b};
return x;
}
Você pode adicionar uma anotação de tipo em x, assim:
union(a, b) {
Map<String, String> x = {...a, ...b};
return x;
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.