Bom, fiz a proposta e adicionei umas coisinhas a mais, infelizmente, não consegui fazer o gif. No meu projeto o usuário pode preencher cada tarefa três vezes.
int nivel = 0;
List <Color> levelColor = [Colors.blue, Colors.pink, Colors.green, Colors.black];
int position = 0;
bool buttonActive = true;
Aqui é a lógica de quando o nível for totalmente preenchido a cor é alterada, o nível zerado e quando a cor for alterada pela terceira vez o botão é desativado.
child: ElevatedButton(
onPressed: buttonActive ? () {
setState(() {
nivel++;
if((nivel / widget.difficulty) / 10 >=1){
position++;
nivel = 0;
if(position == 3){
buttonActive = false;
}
}
});
Aqui é a lógica de quando a cor for alterada pela terceira vez o texto é alterado para "Máximo"
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
position == 3 ? 'Máximo':
'Nível: $nivel',
style: const TextStyle(color: Colors.white, fontSize: 16),
textAlign: TextAlign.right,
),
),