Я хочу загрузить с flutter список из базы данных firebase в реальном времени и дождаться окончания загрузки. Я ожидаю, что
FirebaseDatabase database = new FirebaseDatabase();
Query _newsQuery = database
.reference()
.child('news')
.orderByChild('published')
.limitToFirst(10);
Future<List<News>> loadNews() async {
List<News> list = new List<News>();
_newsQuery.onChildAdded.listen(onNewsAdded);
return list;
}
Future<News> onNewsAdded(Event event) async {
News n = News.fromSnapshot(event.snapshot);
print(n.title);
return n;
}
дает результат 2
с двумя записями базы данных, когда я выполняю его с
loadNews().then((List<News> newsList) {
print(newsList.length);
});
Но я получаю
I/flutter (19206): 0
I/flutter (19206): Title 1
I/flutter (19206): Title 2
Это означает, что слушатель не асинхронно ожидает. Я перепробовал много разных строк, но не нашел решения для ожидания последнего результата запроса.
Я НЕ хочу использовать setState()
в любом виджете, потому что я хочу использовать собственный одноэлементный databaseHandler для всех виджетов. По этой причине вы хотите загрузить данные асинхронно и ждать их в виджете.