我正在尝试检索预订的结果。为此,我尝试更改行: 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
请你帮我解决一下吗?
非常感谢
代码:
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
);
}
}
您收到以下错误:
“Query
因为在下面这行代码中:
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
对象。