Flutter集成Peppermint服务插件peppermint_sdk的使用
Flutter集成Peppermint服务插件peppermint_sdk的使用
本README描述了该插件。如果你将此插件发布到pub.dev,则此README的内容将出现在你的插件页面上。
功能简介
此Flutter库旨在轻松使用Peppermint功能。
Web3钱包最常见的用途是生成钱包地址(公钥)和私钥。Peppermint SDK简化了这一过程,无需手动实现其他复杂的web3包。此插件还通过flutter_secure_storage安全地存储密钥。
未来,此插件将成为一个桥梁,以更简单的方式使用Peppermint的功能。
特性
- 生成钱包地址(公钥)和私钥
- 获取当前钱包地址
- 获取当前私钥
- 生成随机合约名称
- 绑定现有或新钱包
- 删除钱包
- 从设备中选择媒体文件
- 从相机获取图像
- 打开URL
- 从相机扫描二维码
- 图像编辑器
如何安装
Android
- 在
AndroidManifest.xml
中添加UCropActivity
:
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
注意: 自v1.2.0版本起,你需要将Android项目迁移到v2嵌入(详情见这里)。
iOS
无需任何配置。
使用方法
导入package:peppermint_sdk/peppermint_sdk.dart
,实例化WalletManager
。
你可以在peppermint-flutter-sdk/example/lib/wallet_page.dart
中的WalletPage
类中查看完整的示例。
钱包功能
import 'package:peppermint_sdk/peppermint_sdk.dart';
WalletManager manager = WalletManager();
// 生成新的钱包
WalletKeys keys = manager.createWallet();
print('${keys.publicKey}');
print('${keys.privateKey}');
// 生成带有指定key的新钱包
WalletKeys keys = manager.createWallet(key: "wallet1");
// 从现有私钥生成钱包
String walletAddress = await manager.restoreWallet('enter your private key here');
// 获取当前钱包地址
String publicKey = await manager.getPublicKey();
// 获取当前私钥
String privateKey = await manager.getPrivateKey();
// 删除所有钱包
await deleteAllWallet();
// 检查是否有任何钱包
bool hasWallet = await manager.hasAnyWallet();
// 生成合约名称
String contractName = PeppermintUtility.generateContractName();
此库能够管理每个设备上的多个私钥和公钥。
你可以在peppermint-flutter-sdk/example/lib/utilities_page.dart
中的UtilitiesPage
类中查看完整的示例。
工具功能
import 'package:peppermint_sdk/peppermint_sdk.dart';
// 从相机上传图片。
// 可以设置edit为false或true来应用编辑器
File? file = await PeppermintUtility.getImageFromCamera(edit: true);
// 从相册上传图片。
// 可以设置squareCrop为false或true来应用方形裁剪
File? file = await PeppermintUtility.getImageFromGallery(squareCrop: true);
// 从文件浏览器上传媒体文件。
// 可以设置edit为false或true来应用方形裁剪
File? file = await PeppermintUtility.getMediaFromExplorer(squareCrop: true);
// 从相册上传视频。
File? file = await PeppermintUtility.getVideoFromGallery();
你可以在peppermint-flutter-sdk/example/lib/wallet_connect_page.dart
中的WalletConnectPage
类中查看完整的示例。
钱包连接功能
import 'package:peppermint_sdk/peppermint_sdk.dart';
WCAttributes attributes = await WalletConnectManager().initWalletConnect(
maticRpcUri: maticRpcUri, // 区块链服务提供商要使用的RPC URI。
onDisconnect: (code, reason) {
// 响应断开连接回调
},
onFailure: (error) {
// 响应连接失败回调
},
onSessionRequest: (id, peerMeta) {
// 响应连接请求回调
},
onEthSign: (id, message) {
// 响应personal_sign或eth_sign或eth_signTypedData请求回调
},
onEthSendTransaction: (id, tx) {
// 响应eth_sendTransaction请求回调
},
onEthSignTransaction: (id, tx) {
// 响应eth_signTransaction请求回调
},
);
// 从wc: URI创建WCSession对象。
// 创建WCPeerMeta对象,包含你的应用元数据。
// 连接到新会话。
attributes = WalletConnectManager().connectNewSession(result, attributes);
// 确认会话连接请求。
attributes = _wcManager.approveSession(
attributes: attributes,
chainId: 5,
rpcNetwork: 'https://goerli.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161',
walletAddress: walletAddress,
);
// 确认签名请求
attributes = await _wcManager.confirmSign(
attributes: attributes,
id: id,
ethereumSignMessage: ethereumSignMessage,
privateKey: walletAddress,
);
// 确认签名交易请求
attributes = await _wcManager.confirmSignTransaction(
attributes: attributes,
id: id,
ethereumTransaction: ethereumTransaction,
privateKey: walletAddress,
);
// 确认发送交易请求
attributes = await _wcManager.confirmSendTransaction(
attributes: attributes,
id: id,
ethereumTransaction: ethereumTransaction,
privateKey: walletAddress,
);
// 获取Gas价格
BigInt gasPrice = await _wcManager.getGasPrice(
attributes: attributes,
ethereumTransaction: ethereumTransaction,
);
// 拒绝会话连接请求。
attributes.wcClient.rejectSession();
// 通过指定请求ID拒绝任何上述请求
attributes.wcClient.rejectRequest(id: id);
// 永久关闭已连接的会话
attributes.wcClient.killSession();
Peppermint SDK 功能性
此SDK还提供了一些全局功能(用例),使项目更容易使用基本的Peppermint功能,如’ExchangeCode’、‘GetNftList’、'TokenDetail’等。更多详细信息可以在lib/src/peppermint_functionalities/nft/usecases
路径下的’uases’文件夹中找到。
如何使用
- 在使用功能之前,你需要在项目中注入用例:
import 'package:peppermint_sdk/peppermint_sdk.dart';
Get.lazyPut<NftRepo>(
() => NftRepo(
walletClient: Get.put(WalletClient()),
errorHandler: ErrorHandlers(
wrong: 'Something went wrong',
forbidden: 'Forbidden request',
doesntExist: 'Page does not exist',
underMaintenance: 'Feature is under maintenance'),
),
);
Get.lazyPut(() => GetNftListUseCase(Get.find()));
Get.lazyPut(() => TokenDetailUsecase(Get.find()));
Get.lazyPut(() => ExchangeCodeUseCase(Get.find()));
注意,上面的注入示例使用了Get包,你可以使用自己的依赖注入工具,如injectable、get_it。更多关于此包的信息可以在此处找到。
- 使用功能
你可以在项目的控制器类或业务逻辑类中使用以下功能:
import 'package:peppermint_sdk/peppermint_sdk.dart';
// 通过Peppermint SDK从仓库获取数据。
final resource = await _tokenDetailUsecase.invoke(
id: id,
);
// 在资源返回成功或失败后确定下一步。
// 下面的onSuccess将返回定义类模型的用例。
// 更多关于此用例示例的详细信息可以在这个路径中找到:
// lib/src/peppermint_functionalities/nft/usecases/token_detail_usecase.dart
resource.when(onSuccess: (onSuccess) {
detailData = onSuccess;
Get.toNamed(
Routes.nftViewDetail,
);
}, onFailure: (onFailure) {
Popup.error(onFailure);
return;
});
你可以在example/lib/demo_features/nft/nft_controller.dart
文件中找到更多关于此功能的详细信息。
示例代码
import 'package:example/demo_features/nft/nft_binding.dart';
import 'package:example/demo_features/nft/nft_detail_page.dart';
import 'package:example/demo_features/nft/nft_list_view.dart';
import 'package:example/demo_utilities/utilities_page.dart';
import 'package:example/wallet_connect_page.dart';
import 'package:example/demo_utilities/wallet_page.dart';
import 'package:example/routes.dart';
import 'package:example/widget/button.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
[@override](/user/override)
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'Peppermint SDK Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
getPages: [
GetPage(
name: Routes.main,
page: () => const CreateWalletPage(),
),
GetPage(
name: Routes.utilities,
page: () => const UtilitiesPage(),
),
GetPage(
name: Routes.widgets,
page: () => const WalletPage(),
),
GetPage(
name: Routes.nftView,
page: () => const NftViewList(),
binding: NftBinding(),
),
GetPage(
name: Routes.nftViewDetail,
page: () => const NftDetailPage(),
),
],
);
}
}
/// This page is a first page of the example appp.
class CreateWalletPage extends StatefulWidget {
const CreateWalletPage({Key? key}) : super(key: key);
[@override](/user/override)
State<CreateWalletPage> createState() => _CreateWalletPageState();
}
class _CreateWalletPageState extends State<CreateWalletPage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Example App'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
MyButton(
text: 'Utility Example Page',
onTap: () {
Get.toNamed(Routes.utilities);
}),
const SizedBox(height: 16.0),
MyButton(
text: 'Wallet Example Page',
onTap: () {
Get.toNamed(Routes.widgets);
}),
const SizedBox(height: 16.0),
MyButton(
text: 'Chatbot Example Page',
onTap: () {
Get.toNamed(Routes.chatbot);
}),
const SizedBox(height: 16.0),
MyButton(
text: 'Nft View Example Page',
onTap: () {
Get.toNamed(Routes.nftView);
}),
const SizedBox(height: 16.0),
MyButton(
text: 'Wallet Connect Example Page',
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const WalletConnectPage()));
}),
const SizedBox(height: 16.0),
],
),
),
);
}
}
更多关于Flutter集成Peppermint服务插件peppermint_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter集成Peppermint服务插件peppermint_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成并使用Peppermint服务插件peppermint_sdk
,你可以按照以下步骤进行操作。以下是一个简要的指南和代码示例,帮助你快速上手。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加peppermint_sdk
依赖:
dependencies:
flutter:
sdk: flutter
peppermint_sdk: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置iOS和Android
确保你已经在iOS和Android项目中配置了必要的权限和网络设置,以便peppermint_sdk
能够正常工作。这通常包括在Info.plist
和AndroidManifest.xml
中添加必要的权限声明。
iOS配置(Info.plist)
根据需要添加网络权限等配置。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Android配置(AndroidManifest.xml)
同样,根据需要添加网络权限等配置。
<uses-permission android:name="android.permission.INTERNET"/>
3. 初始化和使用Peppermint SDK
在你的Flutter项目中,导入peppermint_sdk
包并进行初始化。以下是一个简单的代码示例:
import 'package:flutter/material.dart';
import 'package:peppermint_sdk/peppermint_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late PeppermintClient peppermintClient;
@override
void initState() {
super.initState();
// 初始化Peppermint SDK
peppermintClient = PeppermintClient(
apiKey: '你的API密钥', // 替换为你的实际API密钥
endpoint: 'https://你的API端点', // 替换为你的实际API端点
);
// 示例:调用某个API
_fetchData();
}
Future<void> _fetchData() async {
try {
// 假设有一个获取用户信息的API
var response = await peppermintClient.get('/user/info');
print('User Info: ${response.body}');
} catch (e) {
print('Error fetching data: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Peppermint SDK Demo'),
),
body: Center(
child: Text('Check the console for user info.'),
),
),
);
}
}
4. 处理响应和错误
在上面的示例中,我们简单地打印了响应和错误。在实际应用中,你可能需要根据响应结果更新UI或处理错误情况。
注意事项
- API密钥和端点:确保你使用的是正确的API密钥和端点。
- 错误处理:在生产环境中,添加更详细的错误处理和用户反馈机制。
- 安全性:不要在客户端代码中硬编码敏感信息,考虑使用环境变量或安全存储机制。
通过以上步骤,你应该能够在Flutter项目中成功集成并使用peppermint_sdk
插件。如果有更多特定功能需求,请参考peppermint_sdk
的官方文档以获取更多详细信息和示例代码。