saveAccountsState method

Future<void> saveAccountsState()

Implementation

Future<void> saveAccountsState() async {
  final accounts = NostrWidgetsAccounts(accounts: []);

  for (var account in ndk.accounts.accounts.values) {
    if (account.signer is Nip07EventSigner) {
      accounts.accounts.add(
        NostrAccount(kind: AccountKinds.nip07, pubkey: account.pubkey),
      );
      continue;
    }

    if (account.signer is AmberEventSigner) {
      accounts.accounts.add(
        NostrAccount(kind: AccountKinds.amber, pubkey: account.pubkey),
      );
      continue;
    }

    if (account.signer is Nip46EventSigner) {
      final signer = account.signer as Nip46EventSigner;
      accounts.accounts.add(
        NostrAccount(
          kind: AccountKinds.bunker,
          pubkey: account.pubkey,
          signerSeed: jsonEncode(signer.connection),
        ),
      );
      continue;
    }

    if (account.type == AccountType.privateKey) {
      final signer = account.signer as Bip340EventSigner;
      if (signer.privateKey == null) continue;
      accounts.accounts.add(
        NostrAccount(
          kind: AccountKinds.privkey,
          pubkey: account.pubkey,
          signerSeed: signer.privateKey!,
        ),
      );
      continue;
    }

    if (account.type == AccountType.publicKey) {
      accounts.accounts.add(
        NostrAccount(kind: AccountKinds.pubkey, pubkey: account.pubkey),
      );
      continue;
    }
  }

  accounts.loggedAccount = ndk.accounts.getPublicKey();

  final storage = FlutterSecureStorage();
  await storage.write(key: accountsKey, value: jsonEncode(accounts));
}