initWalletConnect method

Future<void> initWalletConnect()

Implementation

Future<void> initWalletConnect() async {
  // Wallet Connect Session Storage - So we can persist connections
  final sessionStorage = WalletConnectSecureStorage();
  final session = await sessionStorage.getSession();

  // Create a connector
  walletConnect = WalletConnect(
    bridge: GlobalConstants.bridge,
    session: session,
    sessionStorage: sessionStorage,
    clientMeta: const PeerMeta(
      name: GlobalConstants.name,
      url: GlobalConstants.url,
    ),
  );

  // Did we restore a session?
  if (session != null) {
    curStatus =
        "WalletConnect - Restored  v${session.version} session: ${session.accounts.length} account(s), bridge: ${session.bridge} connected: ${session.connected}, clientId: ${session.clientId}";

    if (session.connected) {
      curStatus =
          'WalletConnect - Attempting to reuse existing connection for chainId ${session.chainId} and wallet address ${session.accounts[0]}.';

      account = session.accounts[0];
      chainId = session.chainId;
      blockchainFlavor = BlockchainFlavorExtention.fromChainId(chainId);
    }
  } else {
    curStatus =
        'WalletConnect - No existing sessions.  User needs to connect to a wallet.';
  }

  walletConnect.registerListeners(
    onConnect: (status) {
      // Status is updated, but session.peerinfo is not yet available.
      curStatus =
          'WalletConnect - onConnect - Established connection with  Wallet app: ${walletConnect.session.peerMeta?.name!} -${walletConnect.session.peerMeta?.description}';

      statusMessage =
          'WalletConnect session established with ${walletConnect.session.peerMeta?.name} - ${walletConnect.session.peerMeta?.description}.';
      // Did the user select a new chain?
      if (chainId != status.chainId) {
        curStatus =
            'WalletConnect - onConnect - Selected blockchain has changed: chainId: $chainId <- ${status.chainId})';

        chainId = status.chainId;
        blockchainFlavor = BlockchainFlavorExtention.fromChainId(chainId);
      }

      // Did the user select a new wallet address?
      if (account != status.accounts[0]) {
        curStatus =
            'WalletConnect - onConnect - Selected wallet has changed: minter: $account <- ${status.accounts[0]}';

        account = status.accounts[0];
      }
    },
    onSessionUpdate: (status) {
      // What information is available?
      //print('WalletConnect - Updated session. $status');

      curStatus =
          'WalletConnect - onSessionUpdate - Wallet ${walletConnect.session.peerMeta?.name} - ${walletConnect.session.peerMeta?.description}';

      statusMessage =
          'WalletConnect - SessionUpdate received with chainId ${status.chainId} and account ${status.accounts[0]}.';

      // Did the user select a new chain?
      if (chainId != status.chainId) {
        curStatus =
            'WalletConnect - onSessionUpdate - Selected blockchain has changed: chainId: $chainId <- ${status.chainId}';

        chainId = status.chainId;
        blockchainFlavor = BlockchainFlavorExtention.fromChainId(chainId);
      }

      // Did the user select a new wallet address?
      if (account != status.accounts[0]) {
        curStatus =
            'WalletConnect - onSessionUpdate - Selected wallet has changed: minter: $account <- ${status.accounts[0]}';

        account = status.accounts[0];
      }
    },
    onDisconnect: () async {
      curStatus =
          'WalletConnect - onDisconnect - minter: $account <- "Please Connect Wallet"';

      account = null;
      statusMessage = 'WalletConnect session disconnected.';
      await initWalletConnect();
    },
  );
}