Как использовать compute () с функциями asyn c? - PullRequest
0 голосов
/ 29 апреля 2020

Мое приложение активно (и счастливо) использует функции asyn c. Однако я понял, что они влияют на производительность моего пользовательского интерфейса, потому что они выполняются в одном потоке. Принято решение использовать изолят.

Однако, когда я пытаюсь реорганизовать мое приложение для использования функции compute () в некоторых местах, чтобы код выполнялся в изоляте, я не смог переместить большую часть моего асин c кода. Вот пример:

    // in an async function
    storyList = await compute(_isolateLoad, 0);

static Future<List<Story>> _isolateLoad(int dummy) async {
    List<Story> storyList = List<Story>();
    QuerySnapshot querySS = await _db.collection('stories')
        .orderBy('lastedited', descending: true).limit(maxSearch).getDocuments();
    for (DocumentSnapshot doc in querySS.documents) {
      Story story = Story.fromMap(id: doc.documentID, map: doc.data);
      storyList.add(story);
      await story.getOwnerName();
    }
    return storyList;
  }

Генерирует ошибку:

exception in StoryRepository.loadStoriesStream: Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.

Я мог бы выполнять функции базы данных вне изолята, но это кажется бессмысленным, так как это то, что нужно наибольшее время в функции asyn c.

Как выполнить вызовы базы данных внутри изолята, когда выясняется, что compute () не может содержать функции asyn c?

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