我有一个视图,其主体是FutureBuilder
从 Supabase 后端获取项目列表。我想在数据库连接后执行一些条件逻辑,这样如果存在连接但要显示的记录为零,视图就会显示一些文本来表明这一点。
我似乎无法让它工作。这是当前代码:
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!'),
);
}
},
);
}
},
);
有几件事。上面 #1 处的代码从未触发。ConnectionState.waiting
和ConnectionState.hasError
位都有效,因为我在加载时获得了一个循环进度指示器,而当出现问题时,我会收到一条错误消息。
但是,尽管没有数据,没有项目,也没有任何内容可在屏幕上显示,但无论是!snapshot.hasData
位还是位都没有触发。else { return Center...
我在这里遗漏了什么?
您应该检查连接状态是否完成以及快照的数据是否实际上为空:
ConnectionState.done && snapshod.data.isEmpty。
在最后的 else 之前介绍它们: