Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Desafio Concluído!!

Creio que haja alguma solução mais viável e prática para esse desafio, mas abaixo estará o GIF do projeto funcionando, o Código e o link para o repositório, respectivamente:

Desafio final

Dentro de _InicialScreenState adicionei os seguintes atributos, função e operador lógico:

  double globalLevel = 0;
  double progressBarValue = 0;

  void refreshLevelPage() {
    setState(() {
      globalLevel = 0; //para resetar os valores armazenados em cache
      progressBarValue = 0; //para resetar os valores armazenados em cache
      for (var task in TaskInherited.of(context)?.taskList ?? []) {
        final taskLevel = (task.nivel * task.dificuldade) / 10;
        globalLevel += taskLevel;
      }
      progressBarValue = globalLevel / 100;
    });
  }

A tela do app ficou da seguinte forma:

      appBar: AppBar(
        leading: Icon(Icons.add_task, color: Colors.white),
        backgroundColor: Colors.blue,
        title: Text(
          ' Tarefas',
          style: TextStyle(color: Colors.white, fontSize: 20),
        ),
        bottom: PreferredSize(
          preferredSize: Size.fromHeight(15),
          child: Padding(
            padding: EdgeInsets.symmetric(horizontal: 30),
            child: Row(
              children: [
                SizedBox(
                  width: 180,
                  child: LinearProgressIndicator(
                    backgroundColor: Colors.grey,
                    color: Colors.white,
                    value: progressBarValue,
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.all(8),
                  child: Text(
                    'Level Global: ${globalLevel.toStringAsFixed(2)}',
                    style: TextStyle(color: Colors.white, fontSize: 16),
                  ),
                ),
              ],
            ),
          ),
        ),
        actions: [
          Padding(
            padding: const EdgeInsets.only(right: 50.0),
            child: IconButton(
              icon: Icon(Icons.loop),
              onPressed: () {
                refreshLevelPage();
              },
            ),
          ),
        ],
      ),

Para ver como o projeto está funcionando acesse meu repositório: https://github.com/DantasMatheus/app_flutter

1 resposta
solução!

Oii, tudo bem?

Matheus, você fez um excelente trabalho ao implementar a funcionalidade de controle de nível e a barra de progresso no seu app Flutter! O uso do método setState pra atualizar a interface de forma reativa é uma prática muito boa pra manipulação do estado do app.

O seu código tá muito bem estruturado e a ideia de resetar o progresso ao clicar no ícone de "loop" é bem funcional.

Ícone de sugestão Para saber mais:

Se você quiser explorar mais sobre gerência de estado no Flutter e boas práticas com o uso de Provider, confira o artigo abaixo:

- Gerenciamento de Estado no Flutter - Documentação Oficial

Continue assim, e parabéns pela dedicação no desafio!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!