Как правильно использовать: futures, streams и async/await во flutter?

Пользователь

от jensen , в категории: Другие , 2 года назад

Как правильно использовать: futures, streams и async/await во flutter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от lori_jast , 2 года назад

@jensen 

Пользователь

от eryn.rodriguez , 10 месяцев назад

@jensen 

Использование futures, streams и async/await в Flutter связано с асинхронными операциями и обработкой данных.


Futures (будущие) представляют асинхронные операции, которые будут завершены в будущем. Они часто используются для выполнения задач, которые могут занять продолжительное время, такие как запросы к сети или загрузка изображений. Для использования futures в Flutter можно использовать ключевое слово async и методы then() и catchError():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Future<String> fetchData() async {
  final response = await http.get('http://example.com/data');
  if (response.statusCode == 200) {
    return response.body;
  } else {
    throw Exception('Failed to fetch data');
  }
}

fetchData().then((data) {
  print(data);
}).catchError((error) {
  print(error);
});


Streams (потоки) представляют набор асинхронных событий, которые могут поступать со временем. Они могут использоваться, например, для обработки обновлений в реальном времени или для отслеживания изменений в базе данных. Для использования streams в Flutter можно использовать класс StreamController и методы listen() и add():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Stream<int> counter() async* {
  for (int i = 0; i < 5; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i;
  }
}

StreamController<int> controller = StreamController<int>();

counter().listen((data) {
  controller.add(data);
}, onDone: () {
  controller.close();
});


Async/await - это новый синтаксис в Dart, который позволяет более просто и читаемо писать асинхронный код. Он используется в сочетании с futures для более удобной обработки и записи кода. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
Future<void> fetchData() async {
  try {
    final response = await http.get('http://example.com/data');
    if (response.statusCode == 200) {
      print(response.body);
    } else {
      throw Exception('Failed to fetch data');
    }
  } catch (error) {
    print(error);
  }
}


В этом примере мы используем ключевое слово async для объявления асинхронной функции fetchData(). Затем мы используем ключевое слово await для ожидания результата выполнения функции http.get(). Если запрос выполнен успешно, мы выводим данные. Если произошла ошибка, мы выбрасываем исключение и печатаем ошибку.


Это лишь некоторые примеры использования futures, streams и async/await в Flutter. Они могут использоваться вместе или отдельно, в зависимости от ваших потребностей и задачи.