Future là một giá trị sẽ có một lần trong tương lai (giống Promise của JS); Stream là chuỗi nhiều giá trị đến dần theo thời gian, như một băng chuyền.
dart
// Future: gọi API, đợi một kết quả
final user = await api.getUser(1);
// Stream: nghe nhiều sự kiện, ví dụ tin nhắn WebSocket
await for (final msg in socket.messages) {
print(msg);
}
// hoặc đăng ký listener
final sub = socket.messages.listen((msg) => print(msg));Trong Flutter, FutureBuilder dựng UI từ một Future, StreamBuilder dựng UI từ một Stream. Stream có hai loại: single-subscription (mặc định, chỉ một listener, ví dụ đọc file) và broadcast (nhiều listener, ví dụ sự kiện click).
Lưu ý: subscription của stream phải cancel() trong dispose(), nếu không listener vẫn chạy sau khi màn đã đóng. Đừng tạo Future ngay trong build() rồi đưa vào FutureBuilder — mỗi lần rebuild sẽ gọi API lại; hãy tạo nó trong initState() rồi giữ lại.