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 []}),
);
});
}