The thing is that the code inside the Future.delayed will be executed after the widget build completes. We use this methodology to build the widget with some pre-loaded data while we send a request to get other data, once we get the data it will be updated. It is best practice for showing loading widgets after the layout frame built. What if we don't use the Future.delayed at all? There will be inconsistency within the page you are displaying. That means you are showing the loading widget before the build method renders the widget.
Explanation: Dart has two modes of code execution: "Asynchronous" code execution and Synchronous code execution. The event loop prioritizes Synchronous codes first, followed by Asynchronous codes. The build function in the Statefull widget is synchronous code that runs on the main isolate/thread, therefore the Asynchronous code Future.delayed will wait till the synchronous code "build()" method completes its duty. The code Future.delayed will then be performed on the main thread, but it will wait zero seconds; the Future class requires a time, and we simply give it 0 seconds.