If you want to dynamically change the UI based on data received
after making an HTTP call, use a StatefulWidget.
After the HTTP call has completed, tell the Flutter framework
that the widget’s State is updated, so it can update the UI.

The important difference between stateless and
stateful widgets is that StatefulWidgets have a State object
that stores state data and carries it over across tree rebuilds,
so it’s not lost.

If you are in doubt, remember this rule:
if a widget changes outside of the build method
(because of runtime user interactions, for example),
it’s stateful.
If the widget never changes, once built, it’s stateless.
However, even if a widget is stateful, the containing parent widget
can still be stateless if it isn’t itself reacting to those changes
(or other inputs).