Every Flutter developer meets Futures on day one: you call an API, you await the result, you show it on screen. Then, sooner or later, you meet the second half of Dart async programming β Streams β and the confusion starts. Both deal with values that arrive later. Both use await in some form. So when do you reach for a Future, and when do you need a Stream?
The answer is simpler than most tutorials make it sound. A Future delivers one value, once, at some point in the future. A Stream delivers zero or more values, over time, until it closes. That single distinction drives every decision in this guide: which type to return from a function, how to consume it in a widget, and which mistakes to avoid.
Futures: one value, later
A Future represents a computation that has not finished yet. It will complete with either a value or an error, exactly once.β¦