diff --git a/lib/src/providers/service/service_provider.dart b/lib/src/providers/service/service_provider.dart index 990691d..e317438 100644 --- a/lib/src/providers/service/service_provider.dart +++ b/lib/src/providers/service/service_provider.dart @@ -77,6 +77,27 @@ class ArcaneServiceProvider return provider.registeredServices.whereType().firstOrNull; } + /// Retrieves a service of type `T` from the nearest provider. + /// + /// Throws an exception if no service of type `T` is found or if no provider exists. + /// + /// Example: + /// ```dart + /// final myService = ArcaneServiceProvider.of(context); + /// ``` + static T requiredServiceOfType( + BuildContext context, + ) { + final provider = maybeOf(context); + assert(provider != null, "No ArcaneServiceProvider found"); + + final T? service = provider!.registeredServices.whereType().firstOrNull; + + assert(service != null, "No service of type $T found"); + + return service!; + } + /// Updates the service instances in this provider. /// /// This will trigger a rebuild of all widgets that depend on this provider.