Tenho uma view cujo corpo é um FutureBuilder
que obtém uma lista de itens de um backend Supabase. Gostaria de fazer alguma lógica condicional após a conexão com o banco de dados, de modo que se HOUVER uma conexão, mas houver ZERO registros para exibir, a view mostre um pouco de texto indicando isso.
Não consigo fazer isso funcionar. Aqui está o código atual:
FutureBuilder(
future: transactionRepo.getTxnsAndRelvars(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator.adaptive();
} else if (snapshot.hasError) {
return Center(child: Text('Error! ${snapshot.error}'));
} else if (!snapshot.hasData) {
return Text('No data present!'); // 1
} else {
return ListView.builder(
itemCount: snapshot.data?.length,
itemBuilder: (context, index) {
if (snapshot.data.length > 0) {
return GestureDetector(...); // the list of items
} else {
return Center(
child: Text('No Transactions Yet!'),
);
}
},
);
}
},
);
Algumas coisas. O código no #1 acima nunca dispara . Os ConnectionState.waiting
bits ConnectionState.hasError
e funcionam, porque eu recebo um indicador de progresso circular durante o carregamento e recebo uma mensagem de erro quando algo dá errado.
Mas nem o !snapshot.hasData
bit nem o else { return Center...
bit disparam, apesar do fato de não haver dados, itens e nada para mostrar na tela.
O que estou perdendo aqui?