Я очень новичок, чтобы трепетать в 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.
Я пытаюсь получить Stream<List<Object>>
из узла RTDB
, но из свойства .onValue()
я получаю Stream<Event>
. Внутри async
map()
я получаю доступ к событию snapshot
, но не получаю доступа к Dart.core
map()
, как в примере, использующем Firestore
, поскольку это не список. alerts()
- это поток, который bloc
будет слушать, но он ожидает Stream<List<Object>>
, и я не могу его получить. Как мне go сопоставить его с 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
);
}