Flutter:如何将列表传递到 Firestore where 条件
Posted
技术标签:
【中文标题】Flutter:如何将列表传递到 Firestore where 条件【英文标题】:Flutter :How to pass List to Firestore where condetion 【发布时间】:2021-09-19 17:22:37 【问题描述】:如何将 List 作为参数传递到条件的 firestore ?让所有数据符合条件
即:-
List<String> topicList ;
getData() async
SharedPreferences pref = await SharedPreferences.getInstance();
topicList = pref.getStringList("topicSymbol");
Stream<QuerySnapshot> getStreamQurey(String collPath)
List<String> filters ;
return db
.collection('$collPath')
.where('Symbol', isEqualTo: getData()) // <---- the problem is here
.snapshots();
提前谢谢你
【问题讨论】:
【参考方案1】:由于您在那里使用 await
,因此您的 getData()
实际上会返回一个 Future
- 而您在调用它时没有处理它。
最简单的解决方法是使 getStreamQurey
也异步:
getData() async
SharedPreferences pref = await SharedPreferences.getInstance();
return pref.getStringList("topicSymbol");
Future<Stream<QuerySnapshot>> getStreamQurey(String collPath) async
List<String> filters ;
return db
.collection('$collPath')
.where('Symbol', isEqualTo: await getData())
.snapshots();
当您调用getStreamQurey
时,您需要使用await
那里的工具。
【讨论】:
我通过了 getStreamQurey StreamBuilder,当我按照你说的做时显示错误参数类型'FuturegetStreamQurey
时,您也需要使用await
。【参考方案2】:
这种方法存在一些问题:首先,getData 是一个异步函数,并且您不是在等待从 get data 中获取返回列表。您想在 getStreamQuery 中的返回调用之前调用 await getData()
。
其次,您应该使用.where('Symbol', isEqualTo: topicList)
来比较列表(这是因为 getData() 返回 null)
让我知道这是否适合你!
【讨论】:
我通过了 getStreamQurey StreamBuilder,当我按照你说的做时显示错误参数类型'Future以上是关于Flutter:如何将列表传递到 Firestore where 条件的主要内容,如果未能解决你的问题,请参考以下文章
Flutter/Dart 如何将索引从 Listview.builder 传递到项目小部件
使用 Flutter Provider 将数据传递到另一个屏幕
将 API 数据从第 1 页传递到 Flutter 上的另一个 dart 页面