1
resposta

[Bug] Lentidão ao adicionar tarefa

1º caso ao abrir o formulário que cadastra a nova tarefa e colocar as informações e clicar no botão adicionar mas sem minimizar o teclado, ao redirecionar para tela de listagem a tarefa aparece normalmente.

2º caso, o mesmo de cima porém ao minimizar o teclado e só assim apertar o botão de adicionar e ser redirecionado, apresenta uma lentidão para aparecer a nova tarefa ou ela só é redenrizada ao subir o nível de alguma tarefa que já esta sendo mostrado.

[https://drive.google.com/file/d/1jDF0l_POpZOoYOKtGl7cGCHuVpcM9KYZ/view?usp=sharing](Video demonstrando)

1 resposta

Olá, Luciano.

Tudo bem?

Interessante. Isso pode estar relacionado a como o Flutter gerencia o estado e a renderização da interface quando o teclado é minimizado. Aqui estão algumas sugestões que podem ajudar a resolver esse problema:

  1. FocusScope.of(context).unfocus(): Tente usar este comando para garantir que o foco do teclado seja removido antes de adicionar a nova tarefa. Isso pode ajudar a evitar a lentidão ao minimizar o teclado.

    void _addTask() {
      FocusScope.of(context).unfocus(); // Remove o foco do teclado
      // Lógica para adicionar a tarefa
    }
    
  2. setState(): Certifique-se de que você está chamando setState() corretamente após adicionar a nova tarefa para garantir que a interface seja atualizada imediatamente.

    void _addTask() {
      FocusScope.of(context).unfocus(); // Remove o foco do teclado
      setState(() {
        // Adiciona a nova tarefa à lista
        tasks.add(newTask);
      });
    }
    
  3. Performance: Verifique se há algum código pesado sendo executado na adição da tarefa, como operações de banco de dados ou cálculos complexos. Se houver, considere mover essas operações para uma função assíncrona ou usar um FutureBuilder para melhorar a performance.

    Future<void> _addTask() async {
      FocusScope.of(context).unfocus(); // Remove o foco do teclado
      await Future.delayed(Duration(milliseconds: 100)); // Simula uma operação assíncrona
      setState(() {
        // Adiciona a nova tarefa à lista
        tasks.add(newTask);
      });
    }
    
  4. Rebuilds desnecessários: Verifique se a sua árvore de widgets está sendo reconstruída desnecessariamente. Widgets como ListView.builder podem ajudar a otimizar a renderização de listas longas.

    ListView.builder(
      itemCount: tasks.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text(tasks[index].name),
        );
      },
    );
    

Testa essas sugestões e veja se faz sentido.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.