1
resposta

[Dúvida] Compartilhando solução e dúvida

Olá!

Apenas compartilhando minha solução!

Como eu poderia deixa-la mais dinâmica, sem esses "if".

//Criando função e variáveis de controle

class _TaskState extends State<Task> {
  int nivel = 0;
  int nivelDois = 0;
  double _progressValue = 0.0;
  Color containerColor = Colors.blue;

  void progressCheck() {
    if (_progressValue == 1.0 && nivelDois == 0) {
      nivel = 0;
      nivelDois = 1;
      containerColor = Colors.green;
    } else {
      if (_progressValue == 1.0 && nivelDois == 1) {
        nivel = 0;
        nivelDois = 2;
        containerColor = Colors.yellow;
      } else {
        if (_progressValue == 1.0 && nivelDois == 2) {
          nivel = 0;
          nivelDois = 3;
          containerColor = Colors.orange;
        } else {
          if (_progressValue == 1.0 && nivelDois == 3) {
            nivel = 0;
            nivelDois = 4;
            containerColor = Colors.red;
          } else {
            if (_progressValue == 1.0 && nivelDois == 4) {
              nivel = 0;
              nivelDois = 5;
              containerColor = Colors.purple;
            } else {
              if (_progressValue == 1.0 && nivelDois == 5) {
                nivelDois = 4;
                containerColor = Colors.black;
              }
            }
          }
        }
      }
    }
    return;
  } 
 
 //Implementando no LinearProgressIndicator
 
 child: LinearProgressIndicator(
                        backgroundColor: Colors.white24,
                        color: Colors.white,
                        value: (widget.dificuldade > 0)
                            ? (nivel / widget.dificuldade) / 10
                            : _progressValue = 1.0,
                      ),
                      
//Chamando a função

 child: ElevatedButton(
                        style: ButtonStyle(
                          shape: MaterialStateProperty.all<OutlinedBorder>(
                              RoundedRectangleBorder(
                                  borderRadius: BorderRadius.circular(4))),
                          backgroundColor:
                              MaterialStateProperty.all(Colors.blue),
                        ),
                        onPressed: () {
                          setState(() {
                            nivel++;
                            _progressValue = (nivel / widget.dificuldade) / 10;
                            //checkNivel(nivel);
                            progressCheck();
                          });
                          //print(nivel);
                        },
1 resposta

Oi Valdimir, tudo bem?

Muito obrigada por compartilhar com a gente a sua solução!

Para tornar seu código mais dinâmico e evitar aninhamentos excessivos de if, você pode usar uma abordagem mais estruturada e escalável. Uma maneira de fazer isso é usar uma estrutura de dados como um mapa para associar os diferentes níveis de progresso às cores correspondentes.

Aqui estão os links para as seções relevantes na documentação do Dart, que se aplicam ao uso de listas e mapas no Flutter:

  • Para listas em Dart: List
  • Para mapas em Dart: Map

Indico também esse artigo: Manipulando listas e mapas no Flutter.

Um abraço e bons estudos.