BlocState is an abstract class that all states of a Bloc must extend.
It uses the Equatable package to ensure states can be compared
by value rather than by reference, which is useful in the Bloc pattern.
ScopeController is an abstract class that serves as a controller
for a Bloc (a pattern that separates business logic from UI).
It provides a way to create or retrieve a Bloc instance.
ScopeControllerProvider is a widget that retrieves a ScopeController
from the nearest ScopeProvider in the widget tree and passes it to the builder function.
It simplifies access to the controller, making the UI code cleaner and more readable.
ScopeProvider is an abstract class that acts as a base for any StatefulWidget
that wants to provide a ScopeController, Bloc, and listen to state changes.