flutter_bloc: explicit events and states at scale flutter_bloc is useful because it focuses on Cubit, Bloc, BlocListener, and predictable state transitions. The important engineering move is to place the package behind a clear boundary, so your Flutter UI depends on a stable capability rather than a vendor-shaped API. What the library should own Keep package calls inside a named adapter or feature boundary. Make lifecycle, errors, and loading state part of a testable contract. Expose only the capability the app needs; hide implementation details from the whole tree. A focused starting point sealed class CheckoutState {} final class CheckoutIdle extends CheckoutState {} final class CheckoutSubmitting extends CheckoutState {} final class CheckoutDone extends CheckoutState {} class CheckoutCubit extends Cubit < CheckoutState > { CheckoutCubit ( this .repository) : super ( CheckoutIdle ()); final CheckoutRepository repository; Future ...