'。但我的变量不是“对象”它是一张地图,flutter,dart"/>

首页 > 解决方案 > 参数类型“对象?” 不能分配给参数类型“地图”'。但我的变量不是“对象”它是一张地图

问题描述

我有以下代码

  Stream<List<T>> collectionStream<T>(
      {required String path,
      required T builder(Map<String, dynamic> data, String documentID),
      Query queryBuilder(Query query)?,
      int sort(T lhs, T rhs)?}) {
    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) {
              final snapid = snapshot.id;
              final snapdata = snapshot.data();
              return builder(
                snapdata,
                snapid,
              );
            })
            .where((value) => value != null)
            .toList();
        if (sort != null) {
          result.sort(sort);
        }
        return result;
      },
    );
  }

当我尝试分配给函数中snapdata的参数时,它会引发以下错误databuilder

The argument type 'Object?' can't be assigned to the parameter type 'Map<String, dynamic>'.

当我尝试打印snapdata.runtimeType它时说_InternalLinkedHashMap<String, dynamic>,这意味着它是一张地图。所以,snapdata不是一个对象,它是一个映射,但我不知道为什么编译器将它视为一个对象,我不知道在这种情况下我应该怎么做

标签: flutterdart

解决方案


请尝试此代码。

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

推荐阅读