create static method

Future<Client> create(
  1. Uint8List seed, {
  2. String identifier = '',
  3. int? numSubClients,
  4. ClientConfig? config,
})

create creates a multiclient with an account, an optional identifier, number of sub clients to create, whether to create original client without identifier prefix, and a optional client config that will be applied to all clients created. For any zero value field in config, the default client config value will be used. If config is nil, the default client config will be used.

Implementation

static Future<Client> create(Uint8List seed, {String identifier = '', int? numSubClients, ClientConfig? config}) async {
  List<Map>? ethResolverConfigArray;
  if (config?.ethResolverConfig != null) {
    ethResolverConfigArray = <Map>[];
    config?.ethResolverConfig?.forEach((item) {
      ethResolverConfigArray?.add({'prefix': item.prefix, 'contractAddress': item.contractAddress, 'rpcServer': item.rpcServer});
    });
  }

  List<Map>? dnsResolverConfigArray;
  if (config?.dnsResolverConfig != null) {
    dnsResolverConfigArray = <Map>[];
    config?.dnsResolverConfig?.forEach((item) {
      dnsResolverConfigArray?.add({
        'dnsServer': item.dnsServer,
      });
    });
  }

  try {
    Client client = Client();
    final Map resp = await _methodChannel.invokeMethod('create', {
      'identifier': identifier,
      'seed': seed,
      'numSubClients': numSubClients,
      'seedRpc': config?.seedRPCServerAddr?.isNotEmpty == true ? config?.seedRPCServerAddr : null,
      'ethResolverConfigArray': ethResolverConfigArray,
      'dnsResolverConfigArray': dnsResolverConfigArray,
    });
    client.address = resp['address'];
    client.publicKey = resp['publicKey'];
    client.seed = resp['seed'];

    client.eventChannelStreamSubscription = _stream!.where((res) => res['_id'] == client.address).listen((res) {
      if (res['_id'] != client.address) {
        return;
      }
      switch (res['event']) {
        case 'onConnect':
          client._onConnectStreamSink.add(OnConnect(node: res['node'], rpcServers: res['rpcServers']?.cast<String>()));
          break;
        case 'onMessage':
          Map data = res['data'];
          var onMsg = OnMessage(src: data['src'], type: data['type'], messageId: data['messageId'], data: data['data'], encrypted: data['encrypted'], noReply: data['noReply']);
          onMsg._id = res['_id'];
          client._onMessageStreamSink.add(onMsg);
          break;
        default:
          break;
      }
    }, onError: (err) {
      if (err.code != client.address) {
        return;
      }
      client._onErrorStreamSink.add(err);
    });
    return client;
  } catch (e) {
    rethrow;
  }
}