flutter 中的 Firestore orderby

问题描述 投票:0回答:1

我正在尝试检索预订的结果。为此,我尝试更改行: CollectionReference _reference = FirebaseFirestore.instance.collection('table_name');

with(参考https://firebase.google.com/docs/firestore/query-data/order-limit-data): CollectionReference _reference = FirebaseFirestore.instance.collection('table_name').orderBy("dlastupd");

在下面的代码中。但是我收到错误: lib/main.dart:51:81:错误:“Query>”类型的值无法分配给“CollectionReference”类型的变量。

请你帮我解决一下吗?

非常感谢

代码:

void main() async {
   WidgetsFlutterBinding.ensureInitialized();
   await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);

  runApp(Home());
}

class Home extends StatelessWidget {

  // const Home({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {

    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),

      routes: {
        '/': (context) => ItemList(),
        '/factfile': (context) => ItemDetails(),
      },
    );
  }
}

class ItemList extends StatelessWidget {
  ItemList({Key? key}) : super(key: key) {
    _stream = _reference.snapshots();
  }

  CollectionReference _reference = FirebaseFirestore.instance.collection('table_name');

  late Stream<QuerySnapshot> _stream;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Item List'),
      ),

      body: StreamBuilder<QuerySnapshot>(
        stream: _stream,
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          //Check error
          if (snapshot.hasError) {
            return Center(child: Text('Some error occurred ${snapshot.error}'));
          }

          //Check if data arrived
          if (snapshot.hasData) {
            //get the data
            QuerySnapshot querySnapshot = snapshot.data;
            List<QueryDocumentSnapshot> documents = querySnapshot.docs;

            //Convert the documents to Maps
            List<Map> items = documents.map((e) =>
            {
              'name': e['name'],
              'dlastupd': e['dlastupd'],
              'dlastupd date': DateTime.fromMillisecondsSinceEpoch(e['dlastupd'] * 1000),
              'id': e.id,
            }).toList();

            // sort in descending date order
            items.sort((a, b) => b["dlastupd"].compareTo(a["dlastupd"]));

            //Display the list
            return ListView.builder(

                itemCount: items.length,
                itemBuilder: (BuildContext context, int index) {
                  //Get the item at this index
                  Map thisItem = items[index];
                  //Return the widget for the list items
                  return ListTile(

                    title: Text(formatDate(thisItem['dlastupd date'], [dd, '', M]) + " - " + thisItem['name']),
                    onTap: () {
                      Navigator.pushNamed(
                        context,
                        '/factfile',
                        arguments: {
                          'id': thisItem['id'],
                        },
                      );
                    },
                  );
                });
          }

          //Show loader
          return Center(child: CircularProgressIndicator());
        },
      ), //Display a list // Add a FutureBuilder
    );
  }
}
flutter google-cloud-firestore
1个回答
0
投票

您收到以下错误:

“Query>”类型的值无法分配给“CollectionReference”类型的变量。

因为在下面这行代码中:

CollectionReference _reference = FirebaseFirestore.instance.collection('table_name').orderBy("dlastupd");

您试图将 Query 类型的对象分配给定义为 CollectionReference 类型的变量,这在 Dart 中是不可能的,因此会出现错误。请注意,继承关系是

CollectionReference
扩展
Query
,而不是相反。所以要解决这个问题,请将上面的代码行更改为:

Query _reference = FirebaseFirestore.instance.collection('table_name').orderBy("dlastupd");
//👆

因为当您在

.orderBy("dlastupd")
对象上调用
CollectionReference
时,生成的对象是
Query
对象,而不是 CollectionReference 对象。
    

© www.soinside.com 2019 - 2024. All rights reserved.