83 lines
2.0 KiB
Markdown
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. |