1
resposta

[Projeto] [Desafio] Mudança das cores do nível by Gabriel

Para resolver meu desafio comecei criando uma variável de lista de cores na classe Task

class Task extends StatefulWidget {
  final List<Color> levelColors = [
    Colors.blue,
    Colors.green,
    Colors.yellow,
    Colors.orange,
    Colors.red,
    Colors.purple,
    Colors.black,
  ];

Depois refatorei o TaskState incluindo uma nova variável e criando uma para receber o valor do progressindicator

class _TaskState extends State<Task> {
  int taskLevel = 0;
  int progressLevel = 0;
  double progressIndicatorValue = 0.0;

Incluindo a nova lista de cores recebendo o valor de progressLevel para setar as cores conforme o progresso:

Container(
    height: 140,
    decoration: BoxDecoration(
      color: widget.levelColors[progressLevel], // inserido aqui

No ElevatedButton eu removí o código e incluí uma função nova para separar as responsabilidades

ElevatedButton(
    onPressed: () {
        calculateProgress(); // aqui
    },

Coloquei o progressIndicatorValue no LinearProgressIndicator para receber o valor atualizado e separar a lógica de calculo

LinearProgressIndicator(
    color: Colors.white,
    value: progressIndicatorValue, // aqui

Agora o restante das funções para realizar os calculos

void calculateProgress() {
    if (isNotMaxProgress()) {
      taskLevel++;
    }
    if (isTimeToLevelUpProgress()) {
      progressLevelUp();
    } else {
      updateProgress();
    }
  }

  bool isNotMaxProgress() {
    return progressLevel <= 6 && progressIndicatorValue < 1;
  }

  bool isTimeToLevelUpProgress() {
    return progressIndicatorValue.compareTo(1) == 0 && progressLevel <= 5;
  }

  void progressLevelUp() {
    setState(() {
      progressIndicatorValue = 0;
      taskLevel = 0;
      progressLevel++;
    });
  }

  void updateProgress() {
    if (widget.difficulty <= 0) {
      setState(() {
        progressIndicatorValue = 1;
      });
    } else if (progressIndicatorValue < 1) {
      setState(() {
        progressIndicatorValue = (taskLevel / widget.difficulty) / 10;
      });
    }
  }

GitHub repo

1 resposta

Oi Gabriel, tudo bem?

Pelo que entendi, você está trabalhando em um projeto que envolve mudança de cores de um nível no Flutter. Sua solução parece estar bem estruturada e organizada, com a criação de variáveis e funções para separar as responsabilidades.

Parabéns por se empenhar e aplicar o conteúdo das aulas.

Um abraço e bons estudos.