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 aquiNo 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, // aquiAgora 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;
      });
    }
  } 
            