Um pouco do que fiz:
No arquivo task_inherited.dart em TaskInherited adicionei a variável do tipo inteiro e uma função que atualiza esse valor:
int globalLevel = 0;
void addGlobalLEvel(int difficulty){
globalLevel = globalLevel + (1 * difficulty);
}
No arquivo task.dart chamei a função addGlobalLEvel() por meio do contexto, sempre que o usuário adiciona um nível, com isso tenho um valor sempre atualizado.
ElevatedButton(
onPressed: () {
calculaNivel();
TaskInherited.of(context)
.addGlobalLEvel(widget.dificuldade);
},
Para exibir o valor no App bar pelo contexto é simples sendo necessário apenas fazer a referencia a variável, ficando para o botão apenas a ação de reconstruir a tela assim pegando o novo valor.
appBar: AppBar(
leading: Container(),
title: Container(
child: Column(
children: [
Container(
alignment: AlignmentDirectional.topStart,
child: Text(
'Tarefas',
style: TextStyle(fontSize: 20),
),
),
Container(
height: 25,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(
width: 100,
child: LinearProgressIndicator(
value: retornaProgressBar(
TaskInherited.of(context).taskList),
color: Colors.amber,
backgroundColor: Colors.white70,
),
),
Text(
'Nível Global: ${TaskInherited.of(context).globalLevel}',
style: TextStyle(fontSize: 15),
),
ElevatedButton(
onPressed: () {
setState(
() {},
);
},
child: Icon(Icons.refresh)),
],
),
)
],
),
),
),
Para a barra de progresso fiz a função retornaProgressBar() que já retorna o valor da barra:
double retornaProgressBar(List<Task> initTask) {
double progressBar = 0;
int nivelDificuldade;
int nivelGlobal;
nivelDificuldade =
initTask.map((objeto) => objeto.dificuldade).reduce((a, b) => a + b);
nivelGlobal = TaskInherited.of(context).globalLevel;
if (nivelDificuldade > 0) {
progressBar = (nivelGlobal / nivelDificuldade) / 10;
}
return progressBar;
}
é isso.