Reputation: 308
I am wanting to use two different collections from cloud firestore so I was trying to nest stream builders. However, I cant figure out how to then nest the snapshot. The error I am currently getting is:
flutter: Another exception was thrown: type '(DocumentSnapshot) => dynamic' is not a subtype of type '(QueryDocumentSnapshot) => Widget' of 'f'
This is my code:
new StreamBuilder(
stream: FirebaseFirestore.instance
.collection('moodIcons')
.snapshots(),
builder: (context, snapshot1) {
if (!snapshot1.hasData)
return Text('Loading data... Please Wait');
return StreamBuilder(
stream: FirebaseFirestore.instance
.collection('activityIcons')
.snapshots(),
builder: (context, snapshot2) {
if (!snapshot2.hasData)
return Text('Loading data... Please Wait');
return Container(
height: 100.0,
child: new ListView(
scrollDirection: Axis.horizontal,
children: snapshot1.data.documents
.map<Widget>(
(DocumentSnapshot document1) {
return snapshot2.data.documents
.map<Widget>(
(DocumentSnapshot document2) {
if (document1.data()['display']) {
return new Positioned(
child: new MoodButton(
onTap: () {},
iconData: IconData(
document1.data()['ref'],
fontFamily:
'MaterialIcons')));
}
if (document2.data()['display']) {
return new Positioned(
child: new MoodButton(
onTap: () {},
iconData: IconData(
document2.data()['ref'],
fontFamily:
'MaterialIcons')));
} else {
return (Container());
}
}).toList();
}).toList(),
),
);
});
}),
Any help would be appreciated!
Upvotes: 0
Views: 853
Reputation: 8383
In your code, document1
and document2
are QueryDocumentSnapshot
and not DocumentSnapshot
.
Also, you are nesting the maps on the moodIcons
and the activityIcons
.
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final moodStream = FirebaseFirestore.instance.collection('moodIcons').snapshots();
final activityStream = FirebaseFirestore.instance.collection('activityIcons').snapshots();
return StreamBuilder<QuerySnapshot>(
stream: moodStream,
builder: (context, moodQuerySnapshot) => !moodQuerySnapshot.hasData
? Text('Loading data... Please Wait')
: StreamBuilder<QuerySnapshot>(
stream: activityStream,
builder: (context, activityQuerySnapshot) => !activityQuerySnapshot.hasData
? Text('Loading data... Please Wait')
: Container(
height: 100.0,
child: new ListView(
scrollDirection: Axis.horizontal,
children: [
...moodQuerySnapshot.data.docs,
...activityQuerySnapshot.data.docs,
]
.where((queryDocSnapshot) => queryDocSnapshot.data()['display'])
.map(
(queryDocSnapshot) => Positioned(
child: MoodButton(
onTap: () {},
iconData: IconData(
queryDocSnapshot.data()['ref'],
fontFamily: 'MaterialIcons',
),
),
),
)
.toList(),
),
),
),
);
}
}
Upvotes: 1