Inicialmente, ao invés de usar os ternários na escolha das cores das estrelas, resolvi criar um método que retorna uma lista de Icons. Esse método faria um loop verificando o nível de dificuldade (1,2,3...) e para cada nível, acrescentava um Icon(color: Colors.blue) à uma lista que seria retornada. Caso a dificuldade fosse menor que 5, o restante dos Icons retornaria na cor cinza:
List<Icon> handleDificult() {
List<Icon> icons = [];
int disableStarsCount = 5 - widget.dificult;
for (var i = 0; i < widget.dificult; i++) {
icons.add(Icon(Icons.star, color: widget.color, size: 16));
}
for (var i = 0; i < disableStarsCount; i++) {
icons.add(const Icon(Icons.star, color: Colors.grey, size: 16));
}
return icons;
}
Porém, descobri um método do widget List que é o generate. O primeiro parâmetro dele é o número de vezes que um elemento será acrescido dentro da lista e o segundo parâmetro é um callback que construirá o item. Dessa forma, refatorando o código ficou assim:
List<Icon> handleDificult() {
int disableStarsCount = 5 - widget.dificult;
final List<Icon> icons = List.generate(
widget.dificult,
(index) => Icon(
Icons.star,
color: widget.color,
size: 16,
),
);
final List<Icon> disabledIcons = List.generate(
disableStarsCount,
(index) => const Icon(
Icons.star,
color: Colors.grey,
size: 16,
),
);
return [...icons, ...disabledIcons];
}
É isso! Bons estudos!