flutter - 参数类型“对象?” 不能分配给参数类型“地图”'。但我的变量不是“对象”它是一张地图
问题描述
我有以下代码
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
的参数时,它会引发以下错误data
builder
The argument type 'Object?' can't be assigned to the parameter type 'Map<String, dynamic>'.
当我尝试打印snapdata.runtimeType
它时说_InternalLinkedHashMap<String, dynamic>
,这意味着它是一张地图。所以,snapdata
不是一个对象,它是一个映射,但我不知道为什么编译器将它视为一个对象,我不知道在这种情况下我应该怎么做
解决方案
请尝试此代码。
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;
},
);
}
推荐阅读
- azure - 使用相同的文件系统对多个 wordpress azure 应用程序服务/部署槽进行负载平衡
- python - 没有名为“不和谐”的模块
- javascript - 不确定这是否是问这个问题的正确地方,但有人可以帮我了解删除功能在这里的工作方式吗?
- angular - 变量在初始化之前使用
- react-native - 反应本机流错误:计算属性可能只是原始文字值
- javascript - 当我按下按钮更改背景颜色时,颜色将保存在本地存储中,其他按钮也是如此
- ios - 在 SwiftUI 中显示和编辑文本的文本字段/视图是什么?
- php - Laravel 存储/日志连接到绝对路径
- ios - 如何使用 SF Symbols Swift 增加 UIImage 的大小
- go - 预加载附加柱