I am trying to get documents in a collection that have a particular field that equals a particular string. I am building a POS and I want to get all the sales for a particular city.
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
final CollectionReference _mainCollection = _firestore.collection('Sales');
Stream<QuerySnapshot> readFeeds() {
CollectionReference notesItemCollection =
_mainCollection.where('seller_location', isEqualTo: "London").get();
return notesItemCollection.snapshots();
}
I am getting this error:
A value of type 'Future<QuerySnapshot<Object?>>' can't be assigned to a variable of type 'CollectionReference<Object?>'.
I have cast added cast as CollectionReference<Object?>; but the query is still not working. This is how I am accessing the data:
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: readFeeds(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong');
} else if (snapshot.hasData || snapshot.data != null) {
return ListView.separated(
separatorBuilder: (context, index) => SizedBox(height: 16.0),
itemCount: snapshot.data!.docs.length,
itemBuilder: (context, index) {
var noteInfo = snapshot.data!.docs[index];
String docID = snapshot.data!.docs[index].id;
String name = noteInfo['name'].toString();
String price = noteInfo['price'].toString();
String quantity = noteInfo['quantity'].toString();
return Ink(
decoration: BoxDecoration(
color: CustomColors.firebaseGrey.withOpacity(0.1),
borderRadius: BorderRadius.circular(8.0),
),
child: ListTile(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8.0),
),
onTap: () => Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => EditScreen(
documentId: docID,
currentName: name,
currentPrice: price,
currentQuantity: quantity,
),
),
),
title: Text(
name,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(color: Colors.white),
),
),
);
},
);
}
return Center(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
CustomColors.firebaseOrange,
),
),
);
},
);
}
}
You are getting the following error:
A value of type 'Future<QuerySnapshot<Object?>>' can't be assigned to a variable of type 'CollectionReference<Object?>'.
Because of the following line of code:
CollectionReference notesItemCollection =
_mainCollection.where('seller_location', isEqualTo: "London").get();
Which makes sense, since the get() function returns a Future and not a CollectionReference object. There is no way in Dart in which you can create such a casting, hence that error.
Since you are using the where() function, the type of the object that is returned is Query. So your code should look like this:
Query queryBySellerLocation =
_mainCollection.where('seller_location', isEqualTo: "London");
Once you have this query correctly defined, you can perform the get() call, and collect the results:
queryBySellerLocation.get().then(...);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With