Мое приложение активно (и счастливо) использует функции 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?