getActiveNetworkData method

  1. @override
Future<NetworkConfiguration?> getActiveNetworkData(
  1. String chain,
  2. String accountAddress
)
override

The full configuration of whichever network the connected external wallet is currently on, for chain/accountAddress — null when that network isn't in getNetworksData's dashboard list or (for EVM) getEvmHostNetworks' host-registered one. Checks the dashboard list first, then the EVM host list, so a host-added network the user's wallet happens to be on is still found. One provider round trip (getActiveNetworkId); everything else is a local lookup.

Implementation

@override
Future<NetworkConfiguration?> getActiveNetworkData(String chain, String accountAddress) async {
  Future<NetworkConfiguration?> instrumentationOperation() async {
    final operationScope = _state.flowScope.capture(replace: false);
    await operationScope.ready();
    final walletConnectProjectId = _state.projectSettings?.sdk?.walletConnect?.projectId;
    if (walletConnectProjectId == null) {
      throw DynamicStateException("This environment has no WalletConnect projectId — enable WalletConnect for it in the Dynamic dashboard");
    }
    operationScope.check();
    await _externalWalletProvider.initialize(walletConnectProjectId, _config.appName, _config.appLogoUrl, _config.nativeLink, _config.universalLink);
    operationScope.check();
    operationScope.check();
    final networkId = await _externalWalletProvider.getActiveNetworkId(chain, accountAddress);
    operationScope.check();

    final dashboardGroup = firstOrNull(_state.projectSettings?.networks?.map((group) => ((switch ((group.chainName ?? "")) { "evm" => "EVM", "solana" => "SOL", "bitcoin" => "BTC", "sui" => "SUI", "cosmos" => "COSMOS", "algo" => "ALGO", "flow" => "FLOW", "starknet" => "STARK", _ => (group.chainName ?? "").toUpperCase() }) == chain ? group : null)).where((v) => v != null).map((v) => v!).toList() ?? const []);
    final dashboardMatch = dashboardGroup?.networks == null ? null : firstWhereOrNull<NetworkConfiguration>(dashboardGroup?.networks!, (item) => item.networkId == networkId);
    return dashboardMatch ?? (chain == "EVM" ? (_state.evmHostNetworks == null ? null : firstWhereOrNull<NetworkConfiguration>(_state.evmHostNetworks!, (item) => item.networkId == networkId)) : null);
  }
  return await _api.instrumentation.runAsync("externalWallet.getActiveNetworkData", instrumentationOperation);
}