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).