Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

A Task não é adicionada após apertar o botão, mesmo utilizando a dica passada em outra discussão aqui. Apenas quando dou um hot reload

floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (contextNew) => FormScreen(
                taskContext: context,
              ),
            ),
          ).then((value) => setState(() => print('Adicionando nova tarefa')));
        },
        child: const Icon(Icons.add),
      ),
ElevatedButton(
                    onPressed: () {
                      if (_formKey.currentState!.validate()) {
                        // print(nameController.text);
                        // print(difficultyController.text);
                        // print(imageController.text);
                        TaskDao().save(Task(
                          nameController.text,
                          imageController.text,
                          int.parse(difficultyController.text),
                        ));
                        ScaffoldMessenger.of(context).showSnackBar(
                          const SnackBar(
                            content: Text('Criando uma nova Tarefa'),
                          ),
                        );
                        Navigator.pop(context);
                      }
                    },
                    child: Text('Adicionar!'),
                  ),
4 respostas
solução!

Oi Diogo, tudo bem?

Parece que você está com um problema relacionado à atualização da lista de tarefas após a adição de uma nova. Com base no código que você compartilhou e no contexto da aula, parece que você está fazendo tudo corretamente, mas vamos revisar juntos.

No seu código, você está utilizando o método Navigator.push para navegar para a tela de formulário e, após a conclusão desta navegação, você está usando o método then para atualizar a tela inicial. Isso está correto.

No entanto, parece que a atualização da tela inicial não está ocorrendo corretamente. O problema pode estar na função que você está passando para o setState. No seu código, você está apenas imprimindo uma mensagem no console (print('Adicionando nova tarefa')), mas isso não vai causar a reconstrução da tela.

O que você precisa fazer é chamar a função que atualiza a lista de tarefas dentro do setState. Infelizmente, não consigo ver essa parte do seu código, mas vou te dar um exemplo de como isso poderia ser feito:

floatingActionButton: FloatingActionButton(
  onPressed: () {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (contextNew) => FormScreen(
          taskContext: context,
        ),
      ),
    ).then((value) => setState(() {
      // Aqui você deveria chamar a função que atualiza a lista de tarefas.
      // Por exemplo:
      // tasks = fetchTasksFromDatabase();
      print('Adicionando nova tarefa');
    }));
  },
  child: const Icon(Icons.add),
),

Neste exemplo, fetchTasksFromDatabase() seria uma função que busca as tarefas do banco de dados e retorna uma lista de tarefas.

Espero que isso ajude a resolver o problema. Se você já está fazendo isso e o problema persiste, pode ser que haja um problema com a função que busca as tarefas do banco de dados. Certifique-se de que essa função está funcionando corretamente.

Um abraço e bons estudos.

Boa noite Lorena, teria como vc olhar o código abaixo e conseguir identificar essa função que busca as tarefas no banco de dados

class _InitialScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( //desenha a tela appBar: AppBar( leading: Container(), actions: [ IconButton(onPressed: (){setState(() {

      });}, icon: Icon(Icons.refresh))
    ],
    title: const Text('Tarefas'),
  ),
  body: Padding(
    padding: EdgeInsets.only(top: 8, bottom: 70),
    child: FutureBuilder<List<Task>>(
        future: TaskDao().findAll(),
        builder: (context, snapshot) {
          List<Task>? items = snapshot.data;

          switch (snapshot.connectionState) {
            case ConnectionState.none:
              return Center(
                child: Column(
                  children: [
                    CircularProgressIndicator(),
                    Text('Carregando')
                  ],
                ),
              );
            case ConnectionState.waiting:
              return Center(
                child: Column(
                  children: [
                    CircularProgressIndicator(),
                    Text('Carregando')
                  ],
                ),
              );
            case ConnectionState.active:
              return Center(
                child: Column(
                  children: [
                    CircularProgressIndicator(),
                    Text('Carregando')
                  ],
                ),
              );
            case ConnectionState.done:
              if (snapshot.hasData && items != null) {
                if (items.isNotEmpty) {
                  return ListView.builder(
                      itemCount: items.length,
                      itemBuilder: (BuildContext context, int index) {
                        final Task tarefa = items[index];
                        return tarefa;
                      });
                }
                return Center(
                  child: Column(
                    children: [
                      Icon(
                        Icons.error_outline,
                        size: 128,
                      ),
                      Text(
                        'Não há nenhuma Tarefa',
                        style: TextStyle(fontSize: 32),
                      )
                    ],
                  ),
                );
              }
              return Text('Erro ao carregar Tarefas');
              break;
          }
          return Text('Erro deconhecido');
        }),
  ),

  ///BOTÃO DO APP
  floatingActionButton: FloatingActionButton(
    onPressed: () {
      Navigator.push(
        ///permite a navegação entre telas
        context,
        MaterialPageRoute(
          builder: (contextNew) =>
              FormScreen(
                taskContext: context,
              ),
        ),
      ).then((value) => setState((){
        print('Recarregando a tela inicial');
      }));
    },
    child: const Icon(Icons.add),

    /// adiciona um icone no botão
  ),
);

} }

Aconteceu o mesmo problema comigo, segui as instruções igual da aula, mas no meu projeto não fucionou igual ao do professor.

Estou com o mesmo problema, no retorno da navegação não entra no .then mas quando o scroll é acionado a tela é atualizada.

floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (contextNew) => FormScreen(taskContext: context),
            ),
          ).then((value) => setState(() {
                print('Recarregando a tela inicial');
              }));
        },
        backgroundColor: Colors.lightBlue,
        shape: const RoundedRectangleBorder(
          borderRadius: BorderRadius.all(Radius.circular(55)),
        ),
        child: const Icon(Icons.add, color: Colors.white),
      ),