spyglass 0.0.2 copy "spyglass: ^0.0.2" to clipboard
spyglass: ^0.0.2 copied to clipboard

Reliable service locator for Dart.

Spyglass [WIP] #

Note: This package is in active development and its API might change frequently. Currently it's basically functional but might contain frequent bugs. It has not yet been thoroughly tested and is missing documentation and examples.

Reliable service locator for all your Dart needs.

Installation & usage #

Add the latest spyglass to your pubspec and you're ready to go!

dart pub add spyglass

A basic hello world:

import 'package:spyglass/spyglass.dart';

void main() {
  deps.add(Dependency.value(Greeter()));

  final greeter = deps.get<Greeter>();

  greeter.greet();
}

class Greeter {
  void greet() {
    print('Hello world!');
  }
}

Register dependencies:

// simplest way
deps.add(Dependency.value(SomeService()));

// lazy
deps.add(Dependency(create: (deps) => SomeService()));

// with dispose function
deps.add(
  Dependency(
    create: (deps) => SomeService(),
    dispose: (service) => service.dispose(),
  ),
);

// with another dependency as parameter
deps.add(
  Dependency(
    create: (deps) => SomeService(
      other: deps.get<SomeOtherService>(),
    ),
  ),
);

// live updates on change
deps.add(
  Dependency(
    create: (deps) => SomeService(
      other: deps.get<SomeOtherService>(),
    ),
    when: (deps) => deps.watch<SomeOtherService>(),
    update: (deps, service) {
      return service..other = deps.get<SomeOtherService>();
    },
  ),
);

// async initialization
deps.add(
  Dependency(
    create: (deps) async {
      final service = SomeService();
      await service.ensureInitialized();
      return service;
    },
  ),
);

// await other dependencies
deps.add(
  Dependency(
    create: (deps) async {
      final other = deps.getAsync<SomeOtherService>();
      return SomeService(
        other: other,
      );
    },
  ),
);

Read & watch changes:

// sync
SomeService service = deps.get<SomeService>();

// optional
SomeService? service = deps.tryGet<SomeService>();

// asynchronously initialized
SomeService service = await deps.getAsync<SomeService>();

// watch updates
Stream<SomeService> serviceStream = deps.watch<SomeService>();
7
likes
140
points
29
downloads

Publisher

verified publisherleancode.co

Weekly Downloads

Reliable service locator for Dart.

Homepage
Repository (GitHub)

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

equatable, meta, rxdart

More

Packages that depend on spyglass