registerExtension函数

void registerExtension(
  1. String method,
  2. ServiceExtensionHandler handler
)

注册一个ServiceExtensionHandler,在该隔离区中将被调用以处理method注意:服务协议扩展必须在每个隔离区中注册。

注意: method必须以'ext.'开头,您应该使用以下结构以避免与其他包冲突:'ext.package.command'。也就是说,紧跟着'ext.'前缀之后,应该是注册包名,然后是一个点('.'),接着是命令名。例如:'ext.dart.io.getOpenFiles'。

由于服务扩展是隔离区特定的,使用扩展的客户端必须始终在每个RPC中包含一个'isolateId'参数。

实现

void registerExtension(String method, ServiceExtensionHandler handler) {
  // TODO: When NNBD is complete, delete the following line.
  checkNotNullable(method, 'method');
  if (!method.startsWith('ext.')) {
    throw new ArgumentError.value(method, 'method', 'Must begin with ext.');
  }
  if (_lookupExtension(method) != null) {
    throw new ArgumentError('Extension already registered: $method');
  }
  // TODO: When NNBD is complete, delete the following line.
  checkNotNullable(handler, 'handler');
  final zoneHandler = Zone.current.bindBinaryCallback(handler);
  _registerExtension(method, zoneHandler);
}