【发布时间】:2020-06-07 22:07:06
【问题描述】:
我对 Flutter Streams/Bloc/Provider 很陌生,我正在按照教程来理解它。 在教程面团中,他们使用 Firestore,所以他们得到了这样的流:
Stream<List<Todo>> todos() {
return todoCollection.snapshots().map((snapshot) {
return snapshot.documents
.map((doc) => Todo.fromEntity(TodoEntity.fromSnapshot(doc)))
.toList();
});
}
他们的快照是List<DocumentSnapshot>,而我来自RTDB 的快照是Event.
我试图从RTDB 节点获取Stream<List<Object>>,但从.onValue() 属性我得到Stream<Event>。
在async map() 内部,我访问了snapshot 事件,但我无法访问Dart.core 的map(),就像在使用Firestore 的示例中一样,因为它不是列表。
alerts() 是 bloc 将要收听的流,但它期待 Stream<List<Object>> 并且我无法得到它。
我将如何根据需要将其映射到Stream<List<Object>>?
非常感谢您的时间和帮助。
我的代码是:
//
static UserAlert fromSnapshot(DataSnapshot snapshot) {
return UserAlert(
city: snapshot.value['City'],
country: snapshot.value['Country'],
date: snapshot.value['Date'],
description: snapshot.value['Description'],
id: snapshot.value['Id'],
latitude: snapshot.value['Latitude'],
longitude: snapshot.value['Longitude'],
region: snapshot.value['Region'],
timestamp: snapshot.value['Timestamp'],
alertImageName: snapshot.value['alertImageName'],
imageUrl: snapshot.value['imageUrl'],
user: snapshot.value['user']);
}
// try 1
Stream<List<UserAlert>> alerts() {
return _databaseReference.onValue.map((snapshot) {
// do the mapping to a Stream<List<UserAlert>>
});
}
// try 2
Stream<List<UserAlert>> alerts() {
return _databaseReference.onValue.toList(){ // Function expressions can't be named error
};
}
// try 3
Stream<List<UserAlert>> alerts() {
return _databaseReference.onValue.map(
(snapshot) => UserAlert.fromSnapshot(snapshot); // wrong return type
);
}
【问题讨论】:
标签: flutter firebase-realtime-database