Flutter区块链交互插件web3mq_dapp_connect的使用
Flutter区块链交互插件web3mq_dapp_connect的使用
快速开始
需求
- Dart SDK: “>=2.18.5 <4.0.0”
- Web3MQ API Key
添加依赖
在你的项目 pubspec.yaml
文件中添加以下依赖:
dependencies:
web3mq: 0.1.0
然后运行以下命令以获取依赖项:
flutter packages get
初始化SDK
首先,你需要一个Web3MQ API密钥。详情可以查看:Web3MQ文档。
初始化SDK的示例如下:
import 'package:web3mq/web3mq.dart';
import 'package:web3mq/utils_api.dart';
final client = DappConnectClient(
'App-Key',
baseURL: TestnetEndpoint.sg1,
appMedata);
// 建立实际连接
await client.connectUser();
提示:
你可以自定义 baseURL
,默认值为 TestnetEndpoint.sg1
,或者使用 UtilsApi().findTheLowestLatencyEndpoint()
获取具有最低延迟的端点并将其分配给 baseURL
。
会话管理
会话是一个包含dapp和钱包之间连接信息的对象。它包含一个唯一的标识符 topic
,你可以用它向钱包发送请求。
会话管理默认启用。这意味着SDK会自动缓存会话中的所有信息,如请求和响应。你可以通过调用 client.sessions
获取会话列表。你可以通过调用 client.cleanup()
清除所有会话,或者通过调用 client.deleteSession(topic)
删除单个会话。
对于钱包
接收会话提议
- 注册会话提议订阅者:
client.sessionProposalStream.listen((proposal) {
// 你应该呈现一个模型来展示该提议,并让用户可以选择批准或拒绝。
// 如果批准,你应该准备你支持的 `SessionNamespaces`。
try {
await client.approveSessionProposal(proposal.id, sessionNamespaces);
} catch (e) {
// 处理异常
}
// 如果拒绝
try {
await client.rejectSessionProposal(proposal.id);
} catch (e) {
// 处理异常
}
});
- 当收到深度链接时:
final uri = DappConnectURI(string: urlString);
client.pairURI(uri);
接收请求
dappConnectClient.requestStream.listen((request) {
// 处理请求
switch (request.method) {
case 'personal_sign':
// 作为签名请求,参数应该是一个字符串数组,表示 [消息, 地址, 密码]
final params = request.params;
// 调用你的签名函数并获取签名
final signature = yourSign(params);
// 然后发送成功响应
dappConnectClient.sendSuccessResponse(request, signature);
// 或者发送错误响应
dappConnectClient.sendErrorResponse(request, 50001, 'some error message');
break;
default:
}
});
发送响应
// 对于错误
await client.sendErrorResponse(request, code, message);
// 对于成功
await client.sendSuccessResponse(request, result);
对于Dapp
发送会话提议
在你可以向钱包发送请求之前,你需要通过调用此方法向钱包提供一个 SessionProposal
:
try {
final session = await dappConnectClient.connectWallet(requiredNamespaces);
} on DappConnectError {
// 处理超时错误
} on RPCError {
// 处理RPC错误
}
上述代码将生成一个支持CAIPs的 SessionProposal
并通过深度链接发送到钱包。如果钱包批准了提议,函数返回一个 Session
对象;否则抛出 RPCError
,其中包含错误代码和消息。如果钱包侧3分钟内无响应,则抛出 TimeoutError
。
会话列表
final sessions = await client.sessions;
发送请求
// 1. 准备你的请求内容,可以是任何继承 `Codable` 的对象
final params = "just a string";
final method = "a method name";
// 获取 `session.topic` 并发送请求
await client.sendRequest(session.topic, method, params);
接收响应
try {
final response = await client.sendRequest(session.topic, method, params);
} on DappConnectError {
// 处理超时错误
} on RPCError {
// 处理RPC错误
}
personal_sign
我们提供了一个方便的函数用于 personal_sign
,因此你可以轻松地获取签名:
do {
final signature = await client.personalSign(message, address, topic);
} on DappConnectError {
// 处理超时错误
} on RPCError {
// 处理RPC错误
} catch(e) {
// 处理未知错误
}
更多关于Flutter区块链交互插件web3mq_dapp_connect的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter区块链交互插件web3mq_dapp_connect的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
web3mq_dapp_connect
是一个用于在 Flutter 应用中与区块链进行交互的插件。它允许开发者轻松地集成区块链功能,并与去中心化应用(DApps)进行交互。以下是如何使用 web3mq_dapp_connect
插件的指南。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 web3mq_dapp_connect
插件的依赖。
dependencies:
flutter:
sdk: flutter
web3mq_dapp_connect: ^0.1.0 # 请确保使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化插件
在你的 Flutter 应用中,首先需要初始化 web3mq_dapp_connect
插件。
import 'package:web3mq_dapp_connect/web3mq_dapp_connect.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await Web3MQDAppConnect.initialize();
runApp(MyApp());
}
3. 连接到区块链钱包
使用 web3mq_dapp_connect
插件,你可以连接到支持的钱包(如 MetaMask、Trust Wallet 等)。
import 'package:web3mq_dapp_connect/web3mq_dapp_connect.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter DApp'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
// 连接到钱包
final wallet = await Web3MQDAppConnect.connect();
print('Connected to wallet: ${wallet.address}');
} catch (e) {
print('Failed to connect to wallet: $e');
}
},
child: Text('Connect Wallet'),
),
),
),
);
}
}
4. 发送交易
连接到钱包后,你可以使用插件的功能来发送交易或调用智能合约。
import 'package:web3mq_dapp_connect/web3mq_dapp_connect.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter DApp'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
// 连接到钱包
final wallet = await Web3MQDAppConnect.connect();
print('Connected to wallet: ${wallet.address}');
// 发送交易
final transaction = Transaction(
to: '0xRecipientAddress',
value: '1000000000000000000', // 1 ETH
gas: '21000',
);
final txHash = await wallet.sendTransaction(transaction);
print('Transaction sent with hash: $txHash');
} catch (e) {
print('Failed to send transaction: $e');
}
},
child: Text('Send Transaction'),
),
),
),
);
}
}
5. 与智能合约交互
你还可以使用插件与智能合约进行交互。首先,你需要获取智能合约的 ABI 和地址。
import 'package:web3mq_dapp_connect/web3mq_dapp_connect.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter DApp'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
// 连接到钱包
final wallet = await Web3MQDAppConnect.connect();
print('Connected to wallet: ${wallet.address}');
// 智能合约地址和 ABI
final contractAddress = '0xYourContractAddress';
final contractAbi = '[{"constant":true,"inputs":[],"name":"getValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]';
// 创建合约实例
final contract = Contract(contractAddress, contractAbi);
// 调用合约方法
final result = await contract.call('getValue', []);
print('Contract call result: $result');
} catch (e) {
print('Failed to interact with contract: $e');
}
},
child: Text('Call Contract'),
),
),
),
);
}
}
6. 断开连接
当你不再需要与钱包交互时,可以断开连接。
await Web3MQDAppConnect.disconnect();