У меня есть такой псевдокод в состоянии Widget
(он использует flutter_staggered_grid_view для отображения бесконечного числа карточек переменного размера, карточки загружаются постранично):
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback(_onAfterLayout);
super.initState();
}
_onAfterLayout(_) {
if (_needNextPage()) {
_getNextPage();
_fillPages();
}
}
// a function that fills the screen with cards, calling getNextPage every 500 ms until the screen is full
_fillPages() {
Future.delayed(const Duration(milliseconds: 500), () {
if (_needNextPage()) {
_getNextPage();
_fillPages(); // go recursive
}
});
}
// a function that checks if a page should be loaded
bool _needNextPage() {
...
}
// a function that loads a page from network
_getNextPage() {
if (loading) return;
loading = true;
op = CancelableOperation.fromFuture(Context.search(context, results.input)).then((res) {
loading = false;
setState(() {
// add what has been loaded to the current result list, causes rebuilt, etc.
});
});
}
Этот код работает функционально, но когда я запускаю его на виртуальном устройстве Android Nexus 10 с небольшим размером страницы (у него большой экран, поэтому ему нужно много запросов для заполнения всей страницы), все приложение простобыстро падает без какого-либо журнала, информации или отслеживания стека, и мне было интересно, может ли это быть из-за моего кода ...
Рекурсивный _fillPages
пахнет плохо для меня, может быть, есть более эффективные способы, я знаю, что естьнет оптимизация хвостовой рекурсии в Dart, поэтому мне было интересно, может ли это вызвать проблемы?