1
resposta

[Bug] Tela inicial não esta recarregando quando eu aperto o botão adicionar da segunda

Estou terminando o curso de flutter aplicando persistencia de dados e estou tentado fazer a minha tela inicial recarregar quando eu saio da segunda tela, quando eu aperto o botao do appBar a primeira tela recarrega mais quando eu aperto para adicionar uma nova tarefa a primeira tela não recarrega.

botao para ir para segunda tela:

onPressed: () {
           Navigator.push(
            context,
            MaterialPageRoute(
              builder: (contextNew) => FormScreen(
                taskContext: context,
              ),
            ),
          ).then((value){
             setState(() {});
           });
        },

botão de adicionar tarefa da segunta tela:

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);
                      }
                    },
1 resposta

Oi Vinicius, tudo bem?

Desculpe a demora em retornar.

Pelo que entendi, você está enfrentando um problema em sua aplicação Flutter, onde a tela inicial não está sendo recarregada quando você pressiona o botão de adicionar na segunda tela. Vamos analisar o código que você compartilhou para entender melhor o que está acontecendo.

Pelo trecho de código que você mostrou, parece que você está utilizando o Navigator para navegar entre as telas. Na primeira tela, você está utilizando o método setState(() {}) dentro do then para atualizar a tela quando retornar da segunda tela. No entanto, na segunda tela, você está utilizando o Navigator.pop(context) para voltar para a primeira tela.

Uma possível solução para o seu problema seria utilizar o método Navigator.pushReplacement em vez de Navigator.pop. Dessa forma, ao adicionar uma nova tarefa e voltar para a primeira tela, a tela inicial será recarregada automaticamente. Veja o exemplo abaixo:

onPressed: () {
  if (_formKey.currentState!.validate()) {
    TaskDao().save(Task(
      nameController.text,
      imageController.text,
      int.parse(difficultyController.text),
    ));
    ScaffoldMessenger.of(context).showSnackBar(
      const SnackBar(
        content: Text('Criando uma nova Tarefa'),
      ),
    );
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (contextNew) => HomeScreen(),
      ),
    );
  }
},

Dessa forma, ao pressionar o botão de adicionar na segunda tela, a nova tarefa será salva e a tela inicial será recarregada, mostrando a nova tarefa adicionada.

Um abraço e bons estudos.