【问题标题】:How to retrieve CollectionReference from Firebase Firestore and have them ordered using Flutter如何从 Firebase Firestore 中检索 CollectionReference 并使用 Flutter 对其进行排序
【发布时间】:2021-03-28 16:53:09
【问题描述】:

当我尝试使用 Dart 从 firebase firestore 获取文档列表时,我无法控制检索文档的顺序。 Google API 说我可以使用 orderBy() 并提供字段名和订单方向,但 IDE 不允许我为 orderBy 使用多个参数。

CollectionReference list = FirebaseFirestore.instance
  .collection('users').doc(FirebaseAuth.instance.currentUser.uid)
  .collection("assessments")
  .orderBy('dateCreated', "desc")      // won't build. too many arguments
  .orderBy('dateCreated', descending: true) // builds, crashes at runtime
  .orderBy('dateCreated');                  // builds, crashes at runtime

当我只指定字段(不指定顺序)时,应用程序构建,但在运行时崩溃。

小部件库捕获的异常 以下 _TypeError 被抛出构建: “Query”类型不是“CollectionReference”类型的子类型

当异常被抛出时,这是堆栈: #0      新的评估服务(package:gradebook/services/assessment_service.dart:20:5) #1      _CategoriesPageState.build。 (包:成绩册/pages/Category/CategoryPage.dart:109:24) #2      新的 ListView.separated。 (包:flutter/src/widgets/scroll_view.dart:1277:34) #3      SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:455:22) #4      SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1201:28) ...

类型 'Query' 不是类型 'CollectionReference' 的子类型

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    orderBy 的语法在 Flutter 中略有不同:

    Query list = FirebaseFirestore.instance
          .collection('users').doc(FirebaseAuth.instance.currentUser.uid)
          .collection('terms').doc(termID)
          .collection('courses').doc(courseID)
          .collection("categories").doc(categoryID)
          .collection("assessments")
          .orderBy('dateCreated', descending: true);
    

    此外,一旦您调用 orderBy()where(),您将返回 Query 而不再是 CollectionReference

    另请参阅using Firestore 上的 FlutterFire 文档。

    【讨论】:

    • 我尝试添加 .orderBy('dateCreated', descending: true) 但这也使我的应用程序崩溃
    • 对我的回答进行两次更改后,您收到的错误消息是什么?
    • 我收到了与我的问题中包含的相同的错误消息:type 'Query' is not a subtype of type 'CollectionReference'。当我删除 .orderBy() 时,我的代码可以正常工作,但我会以随机顺序获得结果
    • 您是否更改了代码以匹配我回答中代码的第一行
    猜你喜欢
    • 2018-08-10
    • 2021-02-25
    • 2021-03-31
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多