Criei uma lógica de maestria e quando alcançasse a maestria final você estaria no lvl max sendo 5 a maior maestria e a cada maestria ficaria mais difícil, então a primeira maestria era necessária nível 10, já a segunda nível 20 e assim sucessivamente. E como dito as cores trocando a cada maestria.
int level = 0;
int mastery = 1;
bool maxlvl = false;
void levelUp() {
if (level == widget.difficult * mastery * 10) {
setState(() {
level = 0;
(mastery < 5) ? mastery++ : maxlvl = true;
});
} else {
setState(() {
level++;
});
}
}
List<Color> colors = [
Colors.blue,
Colors.green,
Colors.yellow,
Colors.red,
Colors.pink
];
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
color: colors[mastery - 1]),
height: 140,
Aqui estão as lógicas de level max, sendo elas desativar o botão, alterar o texto e completar a barra de progresso
onPressed: maxlvl ? null : levelUp,
child: LinearProgressIndicator(
color: Colors.black,
value: widget.difficult > 0
? (maxlvl)
? 1
: (level / widget.difficult / mastery) / 10
: 1,
),
'Nivel: ${maxlvl ? 'MAX' : level}',
PS: Coloquei de 10 em 10 pra ficar mais facil mostrar no gif