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();
},
);
}