Ответ
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()