1
resposta

Sugestão de Implementação

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!

1 resposta

Oii, tudo bem?

Lucas, parabéns pela sua implementação! Utilizar o método List.generate é uma ótima escolha para simplificar o código e torná-lo mais legível.

E, ao utilizar esse método, você elimina a necessidade de fazer dois loops separados, o que contribui para uma melhor performance. Sua abordagem demonstra um bom entendimento dos recursos disponíveis no Flutter e mostra como é importante buscar maneiras mais eficientes de resolver problemas.

Continue assim e bons estudos para você.

Um abraço.