Package structure
Dependency direction
Data flow
- Your Riverpod provider instantiates a notifier, injecting your contract implementations.
- Your screen calls a notifier method (e.g.
fetchWallets()). - The notifier calls the contract, maps the result to an
Either<EmbeddedFailure, T>, and emits new state. - Widgets observe state and rebuild.
Error model
All notifier methods returnvoid / Future<void>. Failures are surfaced through the hasError / failure fields of each state class:
Offline & caching strategy
Each notifier accepts optionalEmbeddedWalletStorage and EmbeddedWalletBalanceCache contracts. When a fetch fails (network error), the notifier transparently falls back to cached data:

