在fold中对FutureOr<bool>应用布尔操作符遇类型错误求解决
问题解决:Dart Firestore 文档布尔值全检的编译错误
你的代码报错核心原因是**List.fold是同步遍历方法,无法适配异步累加逻辑**——它要求累加器函数同步返回与初始值同类型的结果,但你的写法嵌套了多层Future,导致返回类型变成Future<Future<bool>>,和期望的Future<bool>不匹配。
直接改用异步for循环是最简洁且高效的解决方案,逻辑清晰还能提前终止不必要的请求(一旦发现某个文档的val为false就立刻返回):
Future<bool> checkValInAllDocsIstrue( List<DocumentReference> docs ) async { for (final doc in docs) { try { final docSnapshot = await doc.get(); final data = docSnapshot.data() as Map<String, dynamic>; final val = data["val"] as bool; if (!val) { return false; } } catch (e) { rethrow; // 保留原有的错误抛出逻辑 } } return true; }
关键说明:
- 异步for循环通过
await逐个处理文档请求,避免了Future嵌套导致的类型混乱 - 一旦检测到某个文档的
val为false,直接返回false,无需等待后续请求完成,提升性能 - 增加了
as bool的类型断言,避免潜在的类型转换异常(原代码中fetchDoc["val"]可能返回非bool值) - 保留了原有的错误处理逻辑,捕获异常后直接重新抛出
内容的提问来源于stack exchange,提问作者Stereo
相关产品推荐
相关产品推荐

