我正在Flutter中编写一个员工调度应用程序,并且正在使用Firestore存储数据。
我有一个 Employees 集合,其中保存了基本的雇员参数,例如姓名,薪水,职务,电子邮件。
对于每个员工文档,我都有一个子集合,其中包含他们的不可用状态。无法使用该数据可能是由于已经分配了轮班,疾病,休假。
为了获取数据,我实现了firebase_employees_repository。在存储库中,我具有以下功能可以实时获取员工。
@override
Stream<List<Employee>> employees() {
return employeeCollection.snapshots().map((snapshot) {
return snapshot.documents
.map((doc) => Employee.fromEntity(EmployeeEntity.fromSnapshot(doc)))
.toList();
});
}
现在我要对不可用执行相同的操作。
据我了解,员工的不可用列表应保存在employee对象内。
我需要一个雇员的不可用列表,以显示其每天/每周/每月的状态。另外,在创建新班次并希望分配给员工时,应仅显示可用职位。
这可能是一种解决方案,但出现以下错误:
类型为'Future
>>的值不能为 分配给类型为'Stream
>'的变量。尝试 更改变量的类型,或将右侧的类型转换为 “流<列表<不可用>>”。
@override
Stream<List<Employee>> employees() {
return employeeCollection.snapshots().map((snapshot) {
return snapshot.documents
.map((doc) {
Stream<List<Unavailability>> unavailabilities =
employeeCollection
.document(doc.documentID)
.collection('Unavailabilities')
.snapshots().map((snapshot) {
return snapshot.documents
.map((innerDoc) => Unavailability.fromEntity(UnavailabilityEntity.fromSnapshot(innerDoc)));
}).toList()
;
return Employee.fromEntity(EmployeeEntity.fromSnapshot(doc));})
.toList();
});
}
可以在以下链接的Github中找到整个项目:schedulingapp
答案 0 :(得分:1)
您期望和返回的内容不是同一类型。我假设您要接收的是Stream<List<Unavailability>
流。在这种情况下,您可以使用StreamTransformer
来更改Firestore中流的类型,以便获得所需的内容。但是,我不知道您的方法是否有效,因为您没有在任何地方使用unavailabilities
。而且,我不知道UnavailabilityEntity.fromSnapshot
是干什么的。假设您尝试解析数据。尝试在下面使用此代码。至少该错误应该消失。
Stream<List<Unavailability>> unavailabilities = employeeCollection
.document(doc.documentID)
.collection('Unavailabilities')
.snapshots()
.transform<List<Unavailability>>(
StreamTransformer.fromHandlers(
handleData: (QuerySnapshot data, EventSink<List<Unavailability>> sink) {
sink.add(
data.documents.map(
(innerDoc) => Unavailability.fromEntity(
UnavailabilityEntity.fromSnapshot(innerDoc),
),
).toList(),
);
},
),
);