init method

Future<TikiSyncChain> init({
  1. String? address,
  2. String? publicKey,
  3. void onError(
    1. Object
    )?,
})

Implementation

Future<TikiSyncChain> init(
    {String? address,
    String? publicKey,
    void Function(Object)? onError}) async {
  if (_kv == null) _kv = await TikiKv(database: _database).init();
  _dbService = await DBService().open(_database);
  bool? isRegistered =
      await _kv!.read(_isRegistered) == 'true' ? true : false;
  if (!isRegistered) {
    await _authorizeService.register(
        address: address,
        publicKeyB64: publicKey,
        onSuccess: () async {
          await _kv!.upsert(_isRegistered, 'true');
          await _authorizeService.policy(
              address: address,
              onError: onError,
              onSuccess: (rsp) => _policy = rsp);
        },
        onError: (err) {
          if (err is AuthorizeModelRsp && err.code == 400) {
            err.messages?.forEach((msg) async {
              if (msg.message?.trim().toLowerCase() ==
                  'address already registered') {
                await _kv!.upsert(_isRegistered, 'true');
                await _authorizeService.policy(
                    address: address,
                    onError: onError,
                    onSuccess: (rsp) => _policy = rsp);
              }
            });
          } else if (onError != null)
            onError(err);
          else
            throw StateError('Failed to init. Cannot register public key');
        });
  } else
    await _authorizeService.policy(
        address: address,
        onError: onError,
        onSuccess: (rsp) => _policy = rsp);
  _address = address;
  return this;
}