Firebase查询结果List<QueryDocumentSnapshot>如何shuffle后传入Future.forEach
解决方案
问题根因
Dart 标准库中List.shuffle()是原地操作方法,没有返回值(返回类型为void),只会修改当前列表本身的元素顺序,所以你尝试将shuffle()的返回值赋值给列表变量、或者直接作为Future.forEach的入参都会触发类型不匹配报错。
正确实现代码
方案1:无需保留原始查询结果顺序
直接打乱原列表后传入即可:
// 原地打乱Firebase返回的docs列表 result.docs.shuffle(); await Future.forEach<QueryDocumentSnapshot<Map<String, dynamic>>>( result.docs, (element) async { // 执行业务逻辑 } );
方案2:需要保留原始查询结果顺序
先复制列表再打乱,避免修改原数据:
// 复制原始列表生成新实例 List<QueryDocumentSnapshot<Map<String, dynamic>>> mixedResultsRandom = List.from(result.docs); // 打乱新列表的顺序 mixedResultsRandom.shuffle(); await Future.forEach<QueryDocumentSnapshot<Map<String, dynamic>>>( mixedResultsRandom, (element) async { // 执行业务逻辑 } );
补充说明
你代码中迭代参数声明为DocumentSnapshot<Map<String, dynamic>>是兼容的,因为QueryDocumentSnapshot本身就是DocumentSnapshot的子类,不会触发类型错误,如果要消除隐式类型转换警告可以直接和上述示例一样在Future.forEach的泛型中指定准确类型即可。
内容的提问来源于stack exchange,提问作者Petro
相关产品推荐
相关产品推荐

