Какой тип данных возвращает async-метод в Dart?

«Какой тип данных возвращает async-метод в Dart?» — вопрос из категории Асинхронность, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Async-метод в Dart всегда возвращает объект типа Future<T>, где T — тип результата, который будет вычислен асинхронно. Если метод не возвращает значимого значения, используется Future<void>.

Примеры из реальной практики:

// Возвращает Future<String>
Future<String> fetchUserData(int userId) async {
  final response = await http.get(Uri.parse('https://api.example.com/users/$userId'));
  return response.body; // String
}

// Возвращает Future<List<User>>
Future<List<User>> loadUsersFromDatabase() async {
  final db = await DatabaseHelper.instance.database;
  final maps = await db.query('users');
  return maps.map((map) => User.fromMap(map)).toList();
}

// Возвращает Future<void>
Future<void> saveSettings(Settings settings) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('theme', settings.theme);
  await prefs.setBool('notifications', settings.notificationsEnabled);
}

Ключевые моменты:

  • Ключевое слово async автоматически оборачивает возвращаемое значение в Future
  • Для получения результата Future используется await
  • Исключения внутри async-метода преобразуются в Future, завершившийся с ошибкой, что позволяет обрабатывать их через try/catch с await или через .catchError()