在 Flutter 中映射流
Posted
技术标签:
【中文标题】在 Flutter 中映射流【英文标题】:Mapping Streams in Flutter 【发布时间】: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();
【参考方案1】:
如果有人需要这个,感谢 pskink 的建议,我发现了问题。我错过了一个类型转换和一个toList()
调用。
正确代码:
return info.map<String>((i) => '...').toList();
【讨论】:
以上是关于在 Flutter 中映射流的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 如何在不每次下载flutter和dart sdk的情况下切换flutter频道
Flutter动画性能, 官方flutter基础动画在真机上能跑到20-30%CPU
flutter 日志输出,Flutter打印日志,flutter log,flutter 真机日志
Xcode 13 和 Flutter 2.5.1 - 致命错误:找不到“Flutter/Flutter.h”文件 #import <Flutter/Flutter.h>