У меня есть функция loadData которая загружает некоторый текст из файла:
Future<String> loadAsset() async {
return await rootBundle.loadString('assets/data/entities.json');
}
Метод loadString - от Flutter SDK и является асинхронным.
Затем метод loadAsset вызывается другим методом, который должен быть помечен как async, поскольку loadAsset является асинхронным, и мне нужно использовать await:
Future<List<Entity>> loadEntities() async {
String jsonData = await loadAsset();
return parseData(jsonData);
}
Метод parseData не является асинхронным, он получает String, анализирует ее и возвращает список объектов:
List<Entity> parseData(String jsonString) {
...
}
Но поскольку loadEntities должен быть помечен async, для этого требуется, чтобы он возвращал Future, но на практике это не Future потому что, поскольку я использую await, он ждет loadAsset метода loadAsset, а затем вызовет parseData с использованием результата.
Это легко превращается в снежный ком async вызова, потому что каждый метод, который использует loadEntities должен быть помечен как async.
Кроме того, я не могу использовать loadEntities в конструкторе класса, потому что конструктор должен быть помечен как async, что запрещено в Dart.
Я использую шаблон async/await в Dart неправильно? Как я могу использовать метод loadEntities в конструкторе класса?