reflector_dispatcher 1.0.0 copy "reflector_dispatcher: ^1.0.0" to clipboard
reflector_dispatcher: ^1.0.0 copied to clipboard

A method introspector/invoker that can operate with a Reflectable class. Facilitates invoking an API for JSON-RPC server side implementation.

example/reflector_dispatcher_example.dart

import 'package:reflector_dispatcher/reflector_dispatcher.dart';
import 'package:reflectable/reflectable.dart';

/// this import does not exist until you run the builder
/// (presuming this is in an 'example' folder)
/// > pub run build_runner build example
/// or > flutter pub run build_runner build example
import 'reflector_dispatcher_example.reflectable.dart';

// Annotate with this class to enable reflection.
class Reflector extends Reflectable {
  const Reflector()
      : super(
            invokingCapability, // Request the capability to invoke methods.
            declarationsCapability); // needed for introspecting methods.
}

const reflectable = Reflector();

/// Look in test/reflector_dispatcher_test.dart for additional examples.

/// Make a class with the API we want. Something silly but instructive.
///
/// Hold count in Foo.
@reflectable
class Foo {
  num _count = 0;

  /// initialize with a count
  Foo(this._count);

  /// increment with an optional positional parameter
  void increment([num aNumber = 1]) => _count += aNumber;

  /// decrement with a required named parameter
  void decrement({required num aNumber}) => _count -= aNumber;

  /// get the current value of count
  num getCount() => _count;

  /// we decrement by 2 a lot.
  num goTwoLess() {
    _count -= 2;
    return _count;
  }
}

void main() async {
  // do this before using the ReflectorDispatcher
  initializeReflectable();

  /// make a dispatcher with an initialized instance of Foo class and its
  /// introspected data
  var dispatcher = ReflectorDispatcher(Foo(29), reflectable);

  /// dispatch a method with a parameter
  await dispatcher.dispatch('increment', 4);

  /// get the new value
  var c = await (dispatcher.dispatch('getCount'));
  printCount(c); // 33

  /// dispatch a method with a named parameter
  await dispatcher.dispatch('decrement', {'aNumber': 18});
  var d = await (dispatcher.dispatch('getCount'));
  printCount(d); // 15

  /// dispatch a method without a parameter
  await dispatcher.dispatch('increment');
  var e = await (dispatcher.dispatch('getCount'));
  printCount(e); // 16

  var f = await dispatcher.dispatch('goTwoLess');
  printCount(f); // 14
}

void printCount(num aCount) {
  print('the currentCount is $aCount');
}
0
likes
145
points
51
downloads

Publisher

unverified uploader

Weekly Downloads

A method introspector/invoker that can operate with a Reflectable class. Facilitates invoking an API for JSON-RPC server side implementation.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

rpc_dispatcher, rpc_exceptions

More

Packages that depend on reflector_dispatcher