3
respostas

[Dúvida] O recurso de refresh implantando com THEN não tem comportamento esperado

Durante o curso, é indicado que para atualizar a tela o setState seja implementado usando "then", Veja:

floatingActionButton: FloatingActionButton(
        onPressed: () {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (contextNew) => FormScreen(
                taskContext: context,
              ),
            ),
          ).then((value) => setState(() {
            print('Recarregando a tela inicial');
          }));
        },
        child: const Icon(Icons.add),
      ),

Porém a tela não é atualizada, será que esse recurso do flutter foi altado após a gravação da aula? Como implementar o Refresh da tela inicial?

Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel master, 3.8.0-11.0.pre.12, on Microsoft Windows [versÆo 10.0.22000.1574], locale pt-BR) [√] Windows Version (Installed version of Windows is version 10 or higher) [√] Android toolchain - develop for Android devices (Android SDK version 33.0.2) [√] Chrome - develop for the web [√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.4.3) [√] Android Studio (version 2022.1) [√] VS Code (version 1.75.1) [√] Connected device (4 available) [√] HTTP Host Availability

• No issues found!

3 respostas

Opa Matheus estou tendo o mesmo erro quando eu crio uma nova tarefa ela não está aparecendo na tela só aparece depois do refresh.

Eu lembro desse bug. Olha essa abordagem e vê se não resolve esse problema https://www.kindacode.com/article/flutter-sqlite/#The_Code

Pelo que entendi isso é um problema do Future<> que fez uma promessa do retorno de um valor em TaskDao().save(), onde o value permanece null enquanto aguarda o save() ser finalizado, porém quando usamos o ElevatedButton ele não aguarda o retorno do Future<>, sendo assim o value permanece "null" quando executamos o Navigator.pop() e com isso o .then() não é executado. Para resolver esse problema usei um async await no onPressed do ElevatedButton:

ElevatedButton(
                    onPressed: () async {
                      if (_formKey.currentState!.validate()) {
                        await TaskDao().save(Task(
                          nameController.text,
                          imageController.text,
                          int.parse(difficultyController.text)));
                        ScaffoldMessenger.of(context).showSnackBar(
                          const SnackBar(
                            content: Text('Salvando nova tarefa'),
                          ),
                        );
                        Navigator.pop(context);
                      }
                    },
                    child: Text('Adicionar!'),
                  ),

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software