On the Dart page, when the UI requires information from the backend, an [Event](Events) is dispatched to the [Bloc](Blocs). The Bloc then creates a **Request** and passes it to a [Repository](Repository). The Repository then communicates with the [Restful Server](Restful Server) which uses [Controllers](Server Components#controllers) to accomplish the task for the request.
On the Dart page, when the UI requires information from the backend, an [Event](Events) is dispatched to the [Bloc](Blocs). The Bloc then creates a [Request](Response and Requests#request) and passes it to a [Repository](Repository). The Repository then communicates with the [Restful Server](Restful Server) which uses [Controllers](Server Components#controllers) to accomplish the task for the request.
When the Server has completed its task, it sends a [Response](Response and Requests#response) back to the App, and the **Bloc** emits a specific **Event** depending on what the **Response** is (Often this is determined simply by whether the response is a success or a failure). This **Event** will carry the information from the **Response** and the **Bloc** event listener will update the **State** accordingly.