У меня есть функция 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
в конструкторе класса?