FlutterFire Firestore 2.0.0 与流式集合的迁移问题 [重复]

Posted

技术标签:

【中文标题】FlutterFire Firestore 2.0.0 与流式集合的迁移问题 [重复]【英文标题】:FlutterFire Firestore 2.0.0 migration issues with streaming collections [duplicate] 【发布时间】:2021-08-09 06:10:02 【问题描述】:

在尝试运行我的应用程序时,此代码块会导致以下错误。 migration guide 让我不知道将 Map<String, dynamic>? data 更改为什么?

Stream<List<T>> collectionStream<T>(
  required String path,
  required T Function(Map<String, dynamic>? data, String documentID) builder,
  Query? Function(Query query)? queryBuilder,
  int Function(T lhs, T rhs)? sort,
) 
  Query query = FirebaseFirestore.instance.collection(path);
  if (queryBuilder != null) 
    query = queryBuilder(query)!;
  
  final Stream<QuerySnapshot> snapshots = query.snapshots();
  return snapshots.map((snapshot) 
    final result = snapshot.docs
        .map((snapshot) => builder(snapshot.data(), snapshot.id))
        .where((value) => value != null)
        .toList();
    if (sort != null) 
      result.sort(sort);
    
    return result;
  );

错误:参数类型“对象?”不能分配给参数类型'Map?'。

“对象”来自“dart:core”。 “地图”来自“飞镖:核心”。 .map((snapshot) => builder(snapshot.data(), snapshot.id))

编辑:

如果我使用 final Stream&lt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt;&gt; snapshots = query.snapshots(); 更新 QuerySnapshot,我现在会收到以下错误。

【问题讨论】:

查看***.com/questions/67610111/… @PeterHaddad 我看过那篇文章,但我没有找到解决我的 Stream QuerySnapshot 问题的方法。请参阅下面我对 Victor Eronmosele 的评论。如何让query.snapshots() 返回地图? 和我在回答中解释的一样.. 对不起,如果它在我面前,我看不到它。如果您愿意,请提供特定于我的用例的代码答案。另外,请注意,我刚刚在我的原始帖子中添加了一个编辑,其中包含我所做的更新和我现在遇到的问题。 检查副本,并根据您的用例进行更新。当你尝试它时告诉我是否一切正常,谢谢! 【参考方案1】:

您需要指定 QuerySnapshot 中包含的对象类型,如下所示:

    final   Stream<QuerySnapshot<Map<String, dynamic>>> snapshots =
          query.snapshots() as Stream<QuerySnapshot<Map<String, dynamic>>>;

Migration Guide

【讨论】:

这几乎可以让我到达那里,但是query.snapshots() 有红色下划线并且这个错误:Stream&lt;QuerySnapshot&lt;Object?&gt;&gt; 类型的值不能分配给Stream&lt;QuerySnapshot&lt;Map&lt;String, dynamic&gt;&gt;&gt; 类型的变量如果我更改为 Object这打破了所有寻找地图的功能。如何让query.snapshots() 返回Map&lt;String, dynamic&gt;&gt; 嗨@Zelf,我已经用演员更新了答案。这应该会删除红线。 啊,当然,那样也行。

以上是关于FlutterFire Firestore 2.0.0 与流式集合的迁移问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Flutterfire Firestore中的字符串匹配查询

FlutterFire Firestore 2.0.0 与流式集合的迁移问题 [重复]

FlutterFire DocumentSnapshot.data() 正在返回对象?

使用 FlutterFire 的 Firebase 自定义通知

使用 Flutterfire 堆栈获取 JSON 文件

FlutterFire 消息:您的后台消息处理程序中发生错误