Service/State Locator Service
Simply put, it locates services. And if it can't do that it builds them.
You provide factories in the form of AppDecorations.
You can then use locate<T>({instance_id=""})
like magic to get the instance anywhere.
locateAndBuild<YourChangeNotifier>((ctx, value)=>Text(value.someData))
When tree heirarchy of your services don't matter (i.e. they are "globals").
However you can store multiple instances if you key them or form a library.
Provide factories to construct your objects.
In your appDecorations
LocatorDecoration<SomeService>(()=>SomeServiceImpl())
if you want to use an interface.
or just simply
LocatorDecoration(()=>SomeService())
if type inferrence will do
locate<SomeService>()
and
locateAndBuild<T extends ChangeNotifier>((ctx, t) => yourWidget)
They will be lazily loaded and initialized as requested.
See Example for Simple Usage