2
respostas

[Bug] Erro em carregar tarefas

quando eu boto o programa pra rodar ele invés de mostrar a tela de "nem uma terefa encontrada " Ele mostra "Erro ao carregar tarefas", ou seja aconteceu um erro , aperentemente a snapshot está nula.

**OLha o código a baixo:

      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:
           // TODO: Handle this case.
           return Center( 
            child: Column(children: [
              CircularProgressIndicator(),
              Text('carregando....'),
              
            ],)
           );
         case ConnectionState.waiting:
           // TODO: Handle this case.
            return Center( 
            child: Column(children: [
              CircularProgressIndicator(),
              Text('carregando....'),
            ],)
           );
           
         case ConnectionState.active:
           // TODO: Handle this case.
            return Center( 
            child: Column(children: [
              CircularProgressIndicator(),
              Text('carregando....'),
            ],
            ),
             
           );
          
         case ConnectionState.done:
           // TODO: Handle this case.
           if(snapshot.hasData && items != null){
            if(items.isNotEmpty){
              return ListView.builder(itemCount: items.length,itemBuilder: (BuildContext context , int index){
              final Task tarefas = items[index];
               return tarefas;
        });
            }
           //(o que era para aparecer)//
           return Center(child:Column(children: const [Icon(Icons.error_outline, size: 128,),
            Text ('não há nenhuma tarefa' ,style: TextStyle(fontSize: 32)),
            ],
            ),);
           }//o que apareceu)//
           return Text('Erro ao carregar tarefas');
           
           
           
           //como resolvo isso???
2 respostas

Oooi

Uma maneira de resolver isso é checar se o snapshot tem dados e se a lista de tarefas (items) não é vazia antes de mostrar as tarefas. Parece que você já está fazendo essa verificação, mas talvez esteja faltando um else para o caso em que snapshot.hasData é falso ou items é nulo. Podes adicionar um else depois do if(snapshot.hasData && items != null) e retornar um Center com uma mensagem informando que não há nenhuma tarefa. Por exemplo:

else {
  return Center(
    child: Column(
      children: const [
        Icon(Icons.error_outline, size: 128),
        Text('Não há nenhuma tarefa', style: TextStyle(fontSize: 32)),
      ],
    ),
  );
}

Quando o snapshot não tiver dados ou a lista de tarefas estiver vazia, será exibida a mensagem "Não há nenhuma tarefa" com um ícone de erro.

o poblema é que invez disso aparece a segunda mensagem de erro que é ''erro a carregar tarefas'' então seria erro ao procurar no banco de dados