Não sei se esta é a melhor solução, mas segue a minha abordagem para solucionar o problema:
- Criei um atributo color na classe Task;
- Criei um métodos "colorChange" que atrivuia uma cor ao atributo de acordo com o argumento recebido pelo parâmetro "nvl";
- Inclui na função anônima do ElevatedButton a chamada do métodos "colorChange";
- Passei o atibuto color para a task
class Task extends StatefulWidget {
final String nome;
final String foto;
final int dificuldade;
Color? color;
Task(this.nome, this.foto, this.dificuldade, {Key? key, this.color})
: super(key: key);
@override
State<Task> createState() => _TaskState();
colorChange (double nvl) {
if (nvl <= 0.2) {
color = Colors.black;
} else if (nvl <= 0.4) {
color = Colors.redAccent;
} else if (nvl <= 0.6) {
color = Colors.orange;
} else if (nvl <= 0.8) {
color = Colors.cyan;
} else if (nvl < 1) {
color = Colors.blue;
} else {
color = Colors.green;
}
}
}
ElevatedButton(
onPressed: () {
setState(() {
nivel++;
widget.colorChange((widget.dificuldade > 0)
? (nivel / widget.dificuldade) / 10
: 1);
});