如何在另一个函数中访问某函数的参数以创建动态Firestore集合?
问题原因
函数的入参属于局部作用域变量,updateBooksData里的title参数仅在该函数执行期间有效,执行结束后就会被销毁,其他函数默认无法直接访问。
解决方案
方案1:给查询函数传入title参数(最推荐)
如果调用查询方法时你已经知道要查询的书籍标题,直接给getBooksData添加入参即可:
Future getBooksData(String title) async { return subBookCollection.collection(title).get(); }
调用时直接传入你要查询的书籍标题即可。
方案2:将title存储为类成员变量
如果这两个方法属于同一个类,且你需要在类内多个方法复用同一个title,可以把title存为类的成员变量:
// 类内定义成员变量存储当前操作的书籍标题 String? activeBookTitle; Future updateBooksData(String category, String title, String author, String numberOfPages, String description) async { // 更新成员变量的值 activeBookTitle = title; return await subBookCollection.collection(title).doc(uid).set( { 'category': category, 'title': title, 'author': author, 'numberOfPages': numberOfPages, 'description': description, }, ); } Future getBooksData() async { if (activeBookTitle == null) { throw Exception("未指定需要查询的书籍标题"); } return subBookCollection.collection(activeBookTitle!).get(); }
方案3:维护集合名索引
如果你需要查询所有已经创建的书籍集合,可以单独创建一个bookCollectionIndex的集合,每次调用updateBooksData时,把用到的title写入这个索引集合,查询时先拉取索引集合拿到所有集合名,再遍历查询对应集合的数据即可。
内容的提问来源于stack exchange,提问作者Bunthong K
相关产品推荐
相关产品推荐

