Пример запроса следующий:
Код: Выделить всё
Stream[*]> cargarDiferenciasStream(String idEmpresa) {
final Query resp = db
.child('PATH')
.orderByChild('fecha')
.limitToLast(40);
log('First Point executed');
return resp.onValue.map((event) {
log('Second Point executed');
if (event.snapshot.exists && event.snapshot.value != null) {
final List diferenciaList = [];
for (final child in event.snapshot.children) {
final temp = DiferenciaModel.fromJson(Map.from(child.value as Map));
temp.idDiferencia = child.key;
diferenciaList.add(temp);
}
log('Data was loaded - ${diferenciaList.length}');
return diferenciaList;
} else {
return const [];
}
});
}
[log] Первая точка выполнена
[log] Вторая точка выполнена
[log] Данные были загружены — 45
Однако при запуске приложения на Android оно просто остается в состоянии загрузки и никогда не получает никаких данных от узла. Записывается только Выполненная первая точка. Никаких ошибок или исключений не возникает.
[log] Первая точка выполнена
Если я удалю limitToLast() и оставлю только orderByChild('fecha') (который правильно индексируется в моих правилах Firebase), запрос работает как положено, что убедительно свидетельствует о том, что проблема не связана с анализом данных, JSON структуру или десериализацию модели.
Аналогично, если я заменю orderByChild('fecha') на orderByKey() и удалю limitToLast(), это также будет работать правильно.
Использование limitToLast() важно для меня, поскольку оно позволяет мне получать только самые последние записи вместо перебора всего набора данных, что значительно повышает производительность.
/>Мои вопросы:
- Является ли limitToLast() устаревшим или проблематичным на Android, требующим другого подхода? Если да, то какую альтернативу рекомендуется использовать?
- Есть ли другой способ получить самые последние записи без использования limitToLast() и без изменения структуры базы данных?
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-android
Мобильная версия