1: Как я могу использовать здесь async / await вместо Future.then ()? Какое самое элегантное решение?
асинхронные методы заразны. Это означает, что ваш метод ItemsRepository должен быть асинхронным, чтобы использовать await внутри. Это также означает, что вы должны вызывать его асинхронно из других мест. Смотрите пример:
Future<dynamic> ItemsRepository() async {
// #1
myString = await rootBundle.loadString('assets/data/item_int2string.json');
// do something with my string here, which is not in a Future anymore...
}
Обратите внимание, что использование .then - это то же самое, что и ожидание в асинхронной функции. Это просто синтаксический сахар. Обратите внимание, что вы будете использовать .then иначе, чем в вашем примере:
ItemsRepository() {
// #1
rootBundle.loadString('assets/data/item_int2string.json').then((String myString) {
// do something with myString here, which is not in a Future anymore...
});
}
И для # 2 не беспокойтесь о влиянии асинхронного кода на производительность. Код будет выполняться с той же скоростью, что и синхронный код, чуть позже, когда произойдет обратный вызов. Единственная причина, по которой существует асинхронность, заключается в простом способе продолжения работы кода, пока система ожидает возврата асинхронно вызываемой части. Например, не блокируйте пользовательский интерфейс, ожидая, пока диск загрузит файл.
Я рекомендую вам прочитать основные документы об асинхронности в Dart .