【发布时间】:2020-10-18 00:00:58
【问题描述】:
我正在尝试将 Firestore 中的流映射到 Flutter 中的列表。我可以成功检索数据,但是当我将它传递给 StreamBuilder 时,它会收到 null。
Stream<List<String>> getTeamMembers(String idSquadra) {
var res = teamsCollection.where('idSquadra', isEqualTo: idSquadra).snapshots().map(_playerNamesFromSnapshot);
return res;
}
List<String> _playerNamesFromSnapshot(QuerySnapshot snap) {
DocumentSnapshot doc = snap.documents[0];
var info = doc.data['infoGiocatori'];
var res = info.map((i) => "${i['nome']} ${i['cognome']} (${i['displayName']})");
print('res: $res');
return res;
}
这里 res 正确显示为res: (Mario Rossi (MR1), Luigi Verdi (LV2)),但是当我尝试在视图中访问它时,我得到data: null
return StreamBuilder<List<String>>(
stream: dbService.getTeamMembers(dbService.currentUser.idSquadra),
builder: (context, snapshot) {
print('snapshot: $snapshot');
print('data: ${snapshot.data}');
return Container();
});
编辑:登录print snapshot:
snaphot: AsyncSnapshot<List<String>>(ConnectionState.active, null, type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'List<String>')
【问题讨论】:
-
添加
print('snapshot: $snapshot');并发布日志 -
添加了日志@pskink
-
和
print('error: ${snapshot.error}');- 现在一切都应该清楚了 -
error: type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'List<String>'。 @pskink -
更改为
return info.map<String>((i) => '...').toList();
标签: flutter dart google-cloud-firestore stream-builder