Рекурсивные Будущие звонки с Дарт - PullRequest
0 голосов
/ 24 октября 2019

У меня есть такой псевдокод в состоянии 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, поэтому мне было интересно, может ли это вызвать проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...