Dart और Flutter डेवलपर Ethereum विकास के लिए Web3Dart का उपयोग कर सकते हैं, जिससे क्रॉस-प्लेटफॉर्म मोबाइल और वेब अनुप्रयोग सक्षम होते हैं।
Dart और Flutter इकोसिस्टम के लिए प्राथमिक Ethereum लाइब्रेरी, जो व्यापक ब्लॉकचेन इंटरैक्शन क्षमताएँ प्रदान करती है।
import 'package:web3dart/web3dart.dart';
import 'package:http/http.dart';
class EthereumService {
final Web3Client client;
EthereumService(String rpcUrl) : client = Web3Client(rpcUrl, Client());
Future<EtherAmount> getBalance(String address) async {
final addr = EthereumAddress.fromHex(address);
return await client.getBalance(addr);
}
Future<String> sendTransaction({
required Credentials credentials,
required String to,
required BigInt amount,
}) async {
final transaction = await client.sendTransaction(
credentials,
Transaction(
to: EthereumAddress.fromHex(to),
value: EtherAmount.fromBigInt(EtherUnit.wei, amount),
),
);
return transaction;
}
}
महत्वपूर्ण नोट: अप्रत्याशित लेनदेन विफलताओं को रोकने के लिए लेनदेन बनाते समय हमेशा गैस सीमा निर्दिष्ट करें। Web3Dart लाइब्रेरी गैस का अनुमान लगाने का प्रयास करेगी लेकिन प्रोडक्शन अनुप्रयोगों के लिए स्पष्ट मान की सिफारिश की जाती है।
वॉलेट बैलेंस प्रदर्शित करने के लिए Web3Dart का उपयोग करने वाले Flutter विजेट का उदाहरण:
import 'package:flutter/material.dart';
import 'package:web3dart/web3dart.dart';
class WalletWidget extends StatefulWidget {
_WalletWidgetState createState() => _WalletWidgetState();
}
class _WalletWidgetState extends State<WalletWidget> {
final ethereum = EthereumService('YOUR_ETHEREUM_NODE_URL');
EtherAmount? balance;
Future<void> updateBalance() async {
final newBalance = await ethereum.getBalance('YOUR_ADDRESS');
setState(() {
balance = newBalance;
});
}
Widget build(BuildContext context) {
return Card(
child: Padding(
padding: EdgeInsets.all(16.0),
child: Column(
children: [
Text('Balance: ${balance?.getValueInUnit(EtherUnit.ether)} ETH'),
ElevatedButton(
onPressed: updateBalance,
child: Text('Refresh Balance'),
),
],
),
),
);
}
}
प्रदर्शन टिप: प्रोडक्शन Flutter ऐप्स के लिए, कैशिंग तंत्र और बैकग्राउंड रिफ्रेश पैटर्न को लागू करने पर विचार करें ताकि अत्यधिक RPC कॉल से बचा जा सके जो ऐप की प्रतिक्रियाशीलता को प्रभावित कर सकती हैं।
पूर्ण टाइप सुरक्षा के साथ Dart में स्मार्ट कॉन्ट्रैक्ट्स के साथ काम करना:
class SmartContractService {
final Web3Client client;
final DeployedContract contract;
SmartContractService(String rpcUrl, String contractAddress, String abi)
: client = Web3Client(rpcUrl, Client()),
contract = DeployedContract(
ContractAbi.fromJson(abi, 'YourContract'),
EthereumAddress.fromHex(contractAddress),
);
Future<List<dynamic>> callFunction(
String functionName,
List<dynamic> params,
) async {
final function = contract.function(functionName);
final result = await client.call(
contract: contract,
function: function,
params: params,
);
return result;
}
}
सुरक्षा नोट: Flutter अनुप्रयोगों में निजी कुंजियों को संभालते समय, संवेदनशील क्रेडेंशियल्स की सुरक्षा के लिए
flutter_secure_storage
जैसे सुरक्षित स्टोरेज समाधानों का उपयोग करें। अपने एप्लिकेशन कोड में कभी भी निजी कुंजियों को हार्डकोड न करें।
मजबूत Ethereum अनुप्रयोगों के लिए Dart में उचित त्रुटि नियंत्रण:
class EthereumException implements Exception {
final String message;
final dynamic originalError;
EthereumException(this.message, [this.originalError]);
String toString() => 'EthereumException: $message';
}
extension EtherAmountExtension on EtherAmount {
String formatEther([int decimals = 4]) {
return getValueInUnit(EtherUnit.ether).toStringAsFixed(decimals);
}
}