Note that snapshot.hasData only returns true
when the snapshot contains a non-null data value.

Because fetchAlbum can only return non-null values,
the function should throw an exception
even in the case of a “404 Not Found” server response.
Throwing an exception sets the snapshot.hasError to true
which can be used to display an error message.

Otherwise, the spinner will be displayed.

Why is fetchAlbum() called in initState()?

Although it’s convenient,
it’s not recommended to put an API call in a build() method.

Flutter calls the build() method every time it needs
to change anything in the view,
and this happens surprisingly often.
The fetchAlbum() method, if placed inside build(), is repeatedly 
called on each rebuild causing the app to slow down.

Storing the fetchAlbum() result in a state variable ensures that
the Future is executed only once and then cached for subsequent
rebuilds.