Files
flutter-study-notebook/study_guide/Asynchronous Programming in Dart.md
T

83 lines
2.0 KiB
Markdown

# Asynchronous Programming in Dart: A Comprehensive Guide
Asynchronous programming is crucial in Dart and Flutter for handling operations that might take some time to complete, such as network requests or file I/O. This guide covers the key concepts and tools for asynchronous programming in Dart.
## 1. Futures
A Future represents a computation that doesn't complete immediately. It's a way to represent asynchronous operations.
### Example:
```dart
Future<String> fetchUserOrder() {
return Future.delayed(Duration(seconds: 2), () => "Large Latte");
}
void main() {
print('Fetching user order...');
fetchUserOrder().then((order) => print('Your order is: $order'));
print('This runs before the order is fetched!');
}
```
## 2. Async and Await
The `async` and `await` keywords provide a cleaner syntax for working with Futures.
### Example:
```dart
Future<String> fetchUserOrder() {
return Future.delayed(Duration(seconds: 2), () => "Large Latte");
}
void main() async {
print('Fetching user order...');
String order = await fetchUserOrder();
print('Your order is: $order');
}
```
## 3. Streams
Streams provide a way to receive a sequence of events over time.
### Example:
```dart
Stream<int> countStream(int max) async* {
for (int i = 1; i <= max; i++) {
yield i;
await Future.delayed(Duration(seconds: 1));
}
}
void main() {
countStream(5).listen((data) => print('Count: $data'));
}
```
## 4. StreamController
StreamController gives you a way to create and manage your own streams.
### Example:
```dart
import 'dart:async';
void main() {
final controller = StreamController<String>();
controller.stream.listen((data) => print('Received: $data'));
controller.add('Hello');
controller.add('World');
controller.close();
}
```
## Conclusion
Mastering asynchronous programming is essential for building responsive and efficient Dart and Flutter applications. Practice using Futures, async/await, Streams, and StreamControllers to become proficient in handling asynchronous operations.