Available Networks
Access networks enabled in your Dynamic dashboard:Copy
Ask AI
import 'package:dynamic_sdk/dynamic_sdk.dart';
final sdk = DynamicSDK.instance;
// EVM networks (Ethereum, Polygon, Base, etc.)
for (final network in sdk.networks.evm) {
print('${network.name} - Chain ID: ${network.chainId.value}');
}
// Solana networks
for (final network in sdk.networks.solana) {
print(network.name);
}
Get Current Network
Copy
Ask AI
Future<String> getCurrentNetwork(BaseWallet wallet) async {
final network = await sdk.wallets.getNetwork(wallet: wallet);
return network.value.value.toString();
}
Resolve Network Name
Copy
Ask AI
Future<String> getNetworkName(BaseWallet wallet) async {
try {
final network = await sdk.wallets.getNetwork(wallet: wallet);
final rawId = network.value.value.toString();
if (wallet.chain.toUpperCase() == 'EVM') {
final evmNetwork = sdk.networks.evm.firstWhere(
(n) => n.chainId.value.toString() == rawId,
orElse: () => throw Exception('Network not found'),
);
return evmNetwork.name;
}
if (wallet.chain.toUpperCase() == 'SOL') {
final solanaNetwork = sdk.networks.solana.firstWhere(
(n) => n.networkId.value.toString() == rawId,
orElse: () => throw Exception('Network not found'),
);
return solanaNetwork.name;
}
return rawId;
} catch (e) {
return 'Unknown';
}
}
Switch Network
Copy
Ask AI
Future<void> switchNetwork(BaseWallet wallet, GenericNetwork network) async {
try {
await sdk.wallets.switchNetwork(wallet: wallet, network: network);
print('Switched to ${network.name}');
} catch (e) {
print('Failed to switch network: $e');
}
}
Example Usage
Copy
Ask AI
// Get first available Polygon network and switch to it
final polygonNetwork = sdk.networks.evm.firstWhere(
(network) => network.name.contains('Polygon'),
orElse: () => throw Exception('Polygon network not found'),
);
await switchNetwork(myWallet, polygonNetwork);
Error Handling
Copy
Ask AI
Future<void> switchNetworkWithErrorHandling(
BaseWallet wallet,
GenericNetwork network,
) async {
try {
await sdk.wallets.switchNetwork(wallet: wallet, network: network);
print('Network switched successfully');
} catch (e) {
final errorDesc = e.toString().toLowerCase();
if (errorDesc.contains('rejected')) {
print('User rejected network switch');
} else if (errorDesc.contains('unsupported')) {
print('Network not supported');
} else {
print('Switch failed: $e');
}
}
}
Flutter Widget Example
Copy
Ask AI
import 'package:flutter/material.dart';
import 'package:dynamic_sdk/dynamic_sdk.dart';
class NetworkSwitcher extends StatefulWidget {
final BaseWallet wallet;
const NetworkSwitcher({Key? key, required this.wallet}) : super(key: key);
@override
State<NetworkSwitcher> createState() => _NetworkSwitcherState();
}
class _NetworkSwitcherState extends State<NetworkSwitcher> {
final sdk = DynamicSDK.instance;
String? currentNetwork;
bool isLoading = false;
@override
void initState() {
super.initState();
_loadCurrentNetwork();
}
Future<void> _loadCurrentNetwork() async {
setState(() => isLoading = true);
try {
final networkName = await getNetworkName(widget.wallet);
setState(() => currentNetwork = networkName);
} catch (e) {
print('Failed to load network: $e');
} finally {
setState(() => isLoading = false);
}
}
Future<String> getNetworkName(BaseWallet wallet) async {
try {
final network = await sdk.wallets.getNetwork(wallet: wallet);
final rawId = network.value.value.toString();
if (wallet.chain.toUpperCase() == 'EVM') {
final evmNetwork = sdk.networks.evm.firstWhere(
(n) => n.chainId.value.toString() == rawId,
orElse: () => throw Exception('Network not found'),
);
return evmNetwork.name;
}
return rawId;
} catch (e) {
return 'Unknown';
}
}
@override
Widget build(BuildContext context) {
if (isLoading) {
return const Center(child: CircularProgressIndicator());
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Current Network: ${currentNetwork ?? "Unknown"}'),
const SizedBox(height: 16),
DropdownButton<GenericNetwork>(
hint: const Text('Select Network'),
items: sdk.networks.evm.map((network) {
return DropdownMenuItem(
value: network,
child: Text(network.name),
);
}).toList(),
onChanged: (network) async {
if (network != null) {
await switchNetwork(widget.wallet, network);
await _loadCurrentNetwork();
}
},
),
],
);
}
}
StreamBuilder Example
Copy
Ask AI
import 'package:flutter/material.dart';
import 'package:dynamic_sdk/dynamic_sdk.dart';
class NetworkMonitor extends StatelessWidget {
final BaseWallet wallet;
const NetworkMonitor({Key? key, required this.wallet}) : super(key: key);
Stream<String> networkStream() async* {
while (true) {
try {
final sdk = DynamicSDK.instance;
final network = await sdk.wallets.getNetwork(wallet: wallet);
yield network.value.value.toString();
} catch (e) {
yield 'Error: $e';
}
await Future.delayed(const Duration(seconds: 5));
}
}
@override
Widget build(BuildContext context) {
return StreamBuilder<String>(
stream: networkStream(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text('Network: ${snapshot.data}');
}
return const CircularProgressIndicator();
},
);
}
}
Next Steps
- Token Balances - Get balances on different networks
- Send ETH - Send transactions on EVM networks
- Solana Transactions - Send on Solana