Showing validation errors

Just as you would with a “hint”, pass an InputDecoration object
to the decoration constructor for the Text widget.

However, you don’t want to start off by showing an error.
Instead, when the user has entered invalid data,
update the state, and pass a new InputDecoration object.

Threading & asynchronicity

This section discusses concurrency in Flutter and
how it compares with UIKit.

Writing asynchronous code

Dart has a single-threaded execution model,
with support for Isolates
(a way to run Dart code on another thread),
an event loop, and asynchronous programming.
Unless you spawn an Isolate,
your Dart code runs in the main UI thread and is
driven by an event loop. Flutter’s event loop is
equivalent to the iOS main loop—that is,
the Looper that is attached to the main thread.