create static method
Future<Client>
create(
- Uint8List seed, {
- String identifier = '',
- int? numSubClients,
- 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;
}
}