Asynchronous Programming
For heavy tasks.
Future<String> fetchUser() async {
await Future.delayed(Duration(seconds: 2));
return "User Data";
}
// Streams: a Stream delivers data repeatedly over time (eg. Listening to the user's location or checking authentication state. You can use StreamBuilder widget to rebuild teh UI every time a stream emits a new value).