Flutter钱包客户端插件archethic_wallet_client的使用
Flutter钱包客户端插件 archethic_wallet_client
的使用
什么是 ArchethicWallet RPC?
要了解更多关于 ArchethicWallet RPC,请参考 AEIP-4。
使用方法
添加依赖
在您的项目中添加 archethic-wallet-client
依赖:
$ flutter pub add archethic-wallet-client
设置 Deeplink
如果您希望应用程序在 Android 或 iOS 上工作,则必须设置应用程序的 Deeplink 端点。这是为了让 DeeplinkRPC 正常工作。
Android
在 AndroidManifest.xml
文件中,作为根元素的子元素添加一个 queries
元素:
<queries>
<!-- AEWallet deeplink support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<data
android:scheme="aewallet"
android:host="archethic.tech" />
</intent>
</queries>
在 .MainActivity
标签内添加 meta-data
和 intent-filter
:
<!-- AEWallet deeplink support -->
<meta-data
android:name="flutter_deeplinking_enabled"
android:value="true" />
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Replace `flutterdappexample` by your custom deeplink scheme -->
<!-- Replace `dapp.example` by your custom deeplink host -->
<!-- These will be used to compose the replyUrl when sending RPCs -->
<data
android:scheme="flutterdappexample"
android:host="dapp.example" />
</intent-filter>
iOS
在 Info.plist
文件中添加 LSApplicationQueriesSchemes
条目:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>aewallet</string>
</array>
在 ios/Runner
目录下的 Info.plist
中添加两个新键:
<key>FlutterDeepLinkingEnabled</key>
<true/>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<!-- Replace `flutterdappexample` by your custom deeplink scheme -->
<!-- Replace `dapp.example` by your custom deeplink host -->
<!-- These will be used to compose the replyUrl when sending RPCs -->
<key>CFBundleURLName</key>
<string>dapp.example</string>
<key>CFBundleURLSchemes</key>
<array>
<string>flutterdappexample</string>
</array>
</dict>
</array>
其他本地设置
MacOS
将以下内容添加到 macos/Runner/DebugProfile.entitlements
和 macos/Runner/Release.entitlements
文件中:
<key>com.apple.security.network.client</key>
<true/>
客户端设置
实例化客户端
import 'package:archethic-wallet-client/archethic-wallet-client.dart';
// 1. 实例化客户端
final _aewalletClient = ArchethicDAppClient.auto(
origin: const RequestOrigin(
name: 'FlutterDappExample',
),
replyBaseUrl: 'flutterdappexample://dapp.example',
);
[仅限 Deeplink] 监听 Deeplink 响应
在 onGenerateRoute
方法中处理传入的 Deeplinks:
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Dapp Demo',
home: MyHome(),
onGenerateRoute: (settings) {
if ((_aewalletClient as DeeplinkArchethicDappClient)
.handleRoute(settings.name)) return;
//... 处理应用所需的其他路由
return null;
},
);
}
}
发出请求
final response = await _aewalletClient.sendTransaction(
transactionJsonData,
);
response.when(
failure: (failure) {
log(
'Transaction failed',
error: failure,
);
},
success: (result) {
log(
'Transaction succeed : ${json.encode(result)}',
);
},
);
RPC 方法
有两种类型的 RPC 方法:
- 单次调用
- 订阅(由于技术限制,订阅不适用于 Deeplink 通道)
获取 Endpoint (get_endpoint
)
获取 AEWallet 使用的 Endpoint URL。
请求
// 请求体为空
成功响应
{
"endpointUrl": String // Endpoint URL
}
刷新当前账户 (refresh_current_account
)
请求钱包刷新当前账户信息。
请求
// 请求体为空
成功响应
// 无响应体
获取账户 (get_accounts
)
获取 AEWallet 中可用的账户。
请求
// 请求体为空
成功响应
{
"accounts": [
{
"shortName": String, // 账户名称
"serviceName": String // 服务名称
"genesisAddress": String, // 创世地址
}
]
}
发送交易 (send_transaction
)
签名并发送交易。
请求
{
"type": String, // 交易类型
"version": Number, // 交易版本
"data": Object, // 交易数据区
"generateEncryptedSeedSC": bool // 是否生成加密种子
}
成功响应
{
"transactionAddress": String, // 发送交易的地址
"nbConfirmations": Number, // 已接收确认数
"maxConfirmations": Number, // 最大确认数
}
示例代码
以下是一个完整的示例代码,展示了如何使用 archethic_wallet_client
插件:
import 'package:archethic_wallet_client/archethic_wallet_client.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dapp_example/logger.dart';
import 'package:flutter_dapp_example/main_screen.dart';
late final ArchethicDAppClient _aewalletClient;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
LoggerSetup.instance().setup();
_aewalletClient = await ArchethicDAppClient.auto(
origin: const RequestOrigin(
name: 'FlutterDappExample',
),
replyBaseUrl:
kIsWeb ? Uri.base.toString() : 'flutterdappexample://dapp.example',
);
await _aewalletClient.connect();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Archethic Wallet Client Demo',
home: Scaffold(
body: MainScreen(aewalletClient: _aewalletClient),
),
onGenerateRoute: (settings) {
if ((_aewalletClient as DeeplinkArchethicDappClient)
.handleRoute(settings.name)) return;
return null;
},
);
}
}
更多关于Flutter钱包客户端插件archethic_wallet_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter钱包客户端插件archethic_wallet_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中使用archethic_wallet_client
插件的示例代码。这个插件可能是一个假设的插件,用于与某种钱包服务进行交互。由于archethic_wallet_client
并非一个真实存在的公开Flutter插件(在撰写此回复时),我将基于一般Flutter插件的使用方式来提供一个示例。
首先,确保你已经在pubspec.yaml
文件中添加了archethic_wallet_client
(假设它存在)作为依赖项:
dependencies:
flutter:
sdk: flutter
archethic_wallet_client: ^x.y.z # 假设的版本号
然后,运行flutter pub get
来安装依赖项。
接下来,在你的Flutter应用中,你可以按照以下步骤使用archethic_wallet_client
插件:
- 导入插件:
import 'package:archethic_wallet_client/archethic_wallet_client.dart';
- 初始化插件:
通常,插件可能需要在应用启动时进行一些初始化。这里假设archethic_wallet_client
有一个初始化方法:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await ArchethicWalletClient.initialize();
runApp(MyApp());
}
- 使用插件的功能:
假设archethic_wallet_client
提供了创建钱包、获取钱包余额等功能,下面是如何使用这些功能的示例代码:
import 'package:flutter/material.dart';
import 'package:archethic_wallet_client/archethic_wallet_client.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await ArchethicWalletClient.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Wallet App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: WalletScreen(),
);
}
}
class WalletScreen extends StatefulWidget {
@override
_WalletScreenState createState() => _WalletScreenState();
}
class _WalletScreenState extends State<WalletScreen> {
String walletAddress = '';
String balance = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Wallet Client Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Wallet Address:'),
SizedBox(height: 8),
Text(walletAddress, style: TextStyle(fontSize: 18)),
SizedBox(height: 24),
Text('Balance:'),
SizedBox(height: 8),
Text(balance, style: TextStyle(fontSize: 18)),
SizedBox(height: 24),
ElevatedButton(
onPressed: () async {
// 创建新钱包
String newAddress = await ArchethicWalletClient.createWallet();
setState(() {
walletAddress = newAddress;
});
},
child: Text('Create New Wallet'),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
if (walletAddress.isNotEmpty) {
// 获取钱包余额
String newBalance = await ArchethicWalletClient.getBalance(walletAddress);
setState(() {
balance = newBalance;
});
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Please create a wallet first!')),
);
}
},
child: Text('Get Balance'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中有两个按钮:一个用于创建新钱包,另一个用于获取钱包的余额。这些功能都假设是通过archethic_wallet_client
插件提供的。
请注意,由于archethic_wallet_client
是一个假设的插件,实际的API调用和初始化过程可能会有所不同。你应该参考该插件的官方文档来获取准确的API使用方法和初始化步骤。