For example, you can run network code without causing the UI to hang by
using async/await and letting Dart do the heavy lifting:

Once the awaited network call is done,
update the UI by calling setState(),
which triggers a rebuild of the widget subtree and updates the data.

The following example loads data asynchronously
and displays it in a ListView:

Refer to the next section for more information
on doing work in the background,
and how Flutter differs from Android.

How do you move work to a background thread?

Since Flutter is single threaded and runs an event loop,
you don’t have to worry about thread management
or spawning background threads.
This is very similar to Xamarin.Forms.
If you’re doing I/O-bound work, such as disk access or a network call,
then you can safely use async/await and you’re all set.