【问题标题】:Mapping Streams in Flutter在 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&lt;dynamic, dynamic&gt;' is not a subtype of type 'List&lt;String&gt;' 。 @pskink
  • 更改为return info.map&lt;String&gt;((i) =&gt; '...').toList();

标签: flutter dart google-cloud-firestore stream-builder


【解决方案1】:

如果有人需要这个,感谢 pskink 的建议,我发现了问题。我错过了一个类型转换和一个toList() 调用。

正确代码:

return info.map&lt;String&gt;((i) =&gt; '...').toList();

【讨论】:

    猜你喜欢
    • 2019-01-12
    • 2022-11-01
    • 2022-01-13
    • 2020-05-20
    • 2022-01-13
    • 2020-05-13
    • 2021-02-14
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多