registerExtensions method

void registerExtensions()

Registers the extension. Call once, before runApp.

Implementation

void registerExtensions() {
  developer.registerExtension('ext.flutterware.act', (method, params) {
    _armBeats();
    var completer = Completer<developer.ServiceExtensionResponse>();
    _queue = _queue.then((_) async {
      Object? result;
      try {
        result = await _dispatch(params);
      } catch (e, stack) {
        result = {'error': '$e', 'stack': '$stack'};
      }
      // Nothing may escape this callback: an error left in [_queue] would
      // wedge every later call, which for a long-lived app is forever.
      developer.ServiceExtensionResponse response;
      try {
        response = developer.ServiceExtensionResponse.result(
          jsonEncode(result),
        );
      } catch (e) {
        response = developer.ServiceExtensionResponse.result(
          jsonEncode({'error': 'observation was not encodable: $e'}),
        );
      }
      completer.complete(response);
    });
    return completer.future;
  });
  // Deliberately *not* on [_queue], and deliberately not an observation:
  // this hands over records the recorder already made and clears them. It
  // settles nothing, walks nothing and photographs nothing, so a host may
  // poll it on a timer without competing with a driver for the app.
  //
  // The pictures were taken when their bursts closed; this is the collection.
  developer.registerExtension('ext.flutterware.beats', (
    method,
    params,
  ) async {
    _armBeats();
    return developer.ServiceExtensionResponse.result(
      jsonEncode({'human': humanActions?.take() ?? const []}),
    );
  });
}