From 88210ce1bce73e56d5fc4cc30d892d3579256985 Mon Sep 17 00:00:00 2001 From: Hans Kokx Date: Tue, 29 Apr 2025 19:52:58 +0200 Subject: [PATCH] Added requiredServiceOfType getter on ArcaneServiceProvider Signed-off-by: Hans Kokx --- .../providers/service/service_provider.dart | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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.