[FLUTTER] Sự khác biệt giữa Future và Stream trong Flutter

Lập trình không đồng bộ trong Flutter được đặc trưng bởi hai lớp Future và Stream

1. Future

Khi một hàm bất đồng bộ được thực hiện xong nó sẽ trả về một Future.

  • Một hàm Future có thể trả về một giá trị.
  • Một hàm Future cũng có thể trả về một lỗi nếu có bất kì ngoại lệ nào xảy ra.
Future<void> fetchUserOrder() {
  // Imagine that this function is fetching user info from another service or database.
  return Future.delayed(const Duration(seconds: 2), () => print('Large Latte'));
}

void main() {
  fetchUserOrder();
  print('Fetching user order...');
}

2. Stream

Định nghĩa: Stream là một chuỗi các sự kiện không đồng bộ. Nó giống như một Lặp lại không đồng bộ – trong đó, thay vì nhận được sự kiện tiếp theo khi bạn yêu cầu, luồng cho bạn biết rằng có một sự kiện khi nó sẵn sàng.

Future<int> sumStream(Stream<int> stream) async {
  var sum = 0;
  await for (final value in stream) {
    sum += value;
  }
  return sum;
}

Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    yield i;
  }
}

void main() async {
  var stream = countStream(10);
  var sum = await sumStream(stream);
  print(sum); // 55
}

3. Khác biệt giữa Future và Stream

Như chúng ta có thể thấy ở trên thì điểm khác biệt rõ rệt nhất của Future và Stream là:

  • Trong quá trình xử lý Future sẽ chờ đợi đến khi hoàn thành và chỉ trả lại kết quả tại thời điểm đó.
  • Stream thì sẽ trả về dữ liệu liên tục nếu nó vẫn tiếp tục được chuyển về, tạo thành một luồng.

Từ những sự khác biệt này chúng ta có thể suy luận ra các trường hợp nào nên sử dụng Future, trường hợp nào nên sử dụng Stream.

Future:

  • Chụp một bức ảnh từ camera, hoặc lấy từ trong bộ nhớ.
  • Lẩy các thông tin về file.
  • Tạo các https request.

Stream:

  • Lắng nghe sự thay đổi của vị trí.
  • Chơi nhạc.
  • Đồng hồ bấm giờ.
  • Làm việc với web-socket.

Hãy chọn cho mình những cách phù hợp nhất với các vấn đề chúng ta cần giải quyết.

Tài liệu tham khảo:

Author: LamNT59

Leave a Comment

* By using this form you agree with the storage and handling of your data by this website.

You may also like