Flutter Firestore带Where条件的查询无数据返回问题
解决Firestore带Where条件查询无结果的问题
可能的原因及解决方法
字段名大小写不匹配
从你的Firestore数据截图可见,文档中的字段是小写的name,但代码里查询用的是大写开头的Name。Firestore字段名区分大小写,这直接导致查询无法匹配到文档。修改代码中的查询字段名:await db .collection('captured_data') // 将'Name'改为'name' .where('name', isEqualTo: 'Ali Hussain') .get() // ... 后续逻辑字符串精确匹配问题
确认查询字符串Ali Hussain和文档中name字段的值完全一致,包括大小写、空格、特殊字符。比如文档中如果是ali hussain全小写,当前查询就会失效。可以先打印文档中的字段值,对比后调整查询字符串。索引问题(概率较低)
单条件等值查询一般无需手动创建索引,但如果控制台有索引缺失的报错提示,按照提示在Firebase控制台创建对应索引即可。异步逻辑优化(非查询无结果原因,但需注意)
你在forEach中使用async会导致计数逻辑不可靠,建议改用for循环处理异步操作,简化代码:await db.collection('captured_data').where('name', isEqualTo: 'Ali Hussain').get().then((querySnapshot) async { for (var doc in querySnapshot.docs) { print(doc["name"]); Invoice.items.add(InvoiceItem( Name: doc["name"], date: doc["Time"], sleep: doc["Sleep"], vehicle: doc["Vehicle Name"], age: doc["Age"], blinks: doc["Blinks"], vehicle_speed: doc["Vehicle Speed"], yawn: doc["Yawn"], )); } // 遍历完成后直接生成PDF final pdfFile = await PdfInvoiceApi.generate(invoice); PdfApi.openFile(pdfFile); });
内容的提问来源于stack exchange,提问作者Alee
相关产品推荐
相关产品推荐

