Flutter插件ton的使用_Ton SDK for Flutter用于钱包管理与助记词工具
Flutter插件ton的使用_Ton SDK for Flutter用于钱包管理与助记词工具
简介
Ton SDK for Flutter。
该项目使用 org.ton:ton-kotlin:0.2.15
进行原生 Android 调用,并使用 https://github.com/toncenter/tonweb-mnemonic
进行 Web 支持,目前还不支持 Linux 和 Windows。
捐赠支持
如果您喜欢这个库并希望支持其开发,可以向此 TON 地址捐款:
UQDKcML9_qEz_YsiUtxxIzaEBwCfAiCfKnM1oHIw5qIVO67S
您也可以通过我的 PizzaTon 活动 进行捐款。
开始使用
初始化Ton变量
首先,需要初始化一个 Ton
变量。
final _tonPlugin = Ton();
生成随机助记词
生成随机助记词:
_tonPlugin.randomMnemonic();
该函数将返回一个包含字符串列表的 Future,这些字符串是您的钱包种子。
带密码生成随机助记词
如果助记词有密码,则可以传递密码作为参数。
_tonPlugin.randomMnemonic(password: "YOUR_WALLET_PASSWORD");
该函数同样会返回一个包含字符串列表的 Future,这些字符串是您的钱包种子。
检查助记词是否有效
检查助记词是否有效:
mnemonic = ['a', 'b', ...];
_tonPlugin.isMnemonicValid(mnemonic);
您还可以传递助记词的密码。
Web配置
在项目中添加 web
目录下的文件到您的项目中,并在 index.html
文件中添加以下脚本:
<script src="ton-mnemonic/web/index.js"></script>
文件可以在以下位置找到: Web Mnemonic 库
Ton Connect
您可以在这里找到关于 Ton Connect 的文档: Ton Connect 文档
实现Ton Connect钱包连接
- 将您的应用包裹在
TonConnectUiProvider
中。 - 在任何内部小部件中使用
TonConnectButton
。
完整示例代码
以下是一个完整的示例代码,展示了如何使用 Ton
插件生成随机助记词并验证其有效性。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:ton/ton.dart';
import 'package:ton/tonconnect_ui/components/tonconnect_ui_provider.dart';
import 'tonconnect/tonconnect_test_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
builder: (context, child) {
return TonConnectUiProvider(
manifestUrl:
'https://raw.githubusercontent.com/XaBbl4/pytonconnect/main/pytonconnect-manifest.json',
child: child!,
);
},
home: HomeWidget(),
);
}
}
class HomeWidget extends StatefulWidget {
const HomeWidget({super.key});
[@override](/user/override)
State<HomeWidget> createState() => _HomeWidgetState();
}
class _HomeWidgetState extends State<HomeWidget> {
String _platformVersion = 'Unknown';
final _tonPlugin = Ton();
// 平台消息是异步的,因此我们在异步方法中初始化。
Future<void> initPlatformState() async {
String platformVersion;
// 平台消息可能会失败,所以我们使用 try/catch PlatformException。
// 我们还处理消息可能返回 null 的情况。
try {
platformVersion = await _tonPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// 如果小部件在异步平台消息仍在飞行时从树中移除,我们希望丢弃回复而不是调用
// setState 来更新我们的不存在的外观。
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Text('运行于: $_platformVersion\n'),
FutureBuilder(
future: _tonPlugin.randomMnemonic(password: "HELLOWORLD"),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
if (snapshot.hasData && snapshot.data != null) {
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Text(
'助记词:',
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: FutureBuilder(
future:
_tonPlugin.isMnemonicValid(snapshot.data!, 'HELLOWORLD'),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text(
snapshot.error.toString(),
textAlign: TextAlign.end,
maxLines: 1,
);
}
if (snapshot.hasData && snapshot.data != null) {
return Text(
snapshot.data! ? '有效' : '无效',
textAlign: TextAlign.end,
maxLines: 1,
);
}
return const CircularProgressIndicator();
},
),
),
],
),
Text(snapshot.data!.join(', ')),
const Divider(),
FutureBuilder(
future: _tonPlugin.toSeed(snapshot.data!),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
if (snapshot.hasData && snapshot.data != null) {
return Column(
children: [
const Text(
'种子:',
style: TextStyle(fontWeight: FontWeight.bold),
),
Text(base64Encode(snapshot.data!)),
const Divider(),
],
);
}
return const Text('正在将助记词转换为种子...');
},
),
],
);
}
return const Text('正在生成随机助记词...');
}),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const TonConnectTestPage(),
));
},
child: const Text('Ton Connect UI'),
)
],
),
),
),
);
}
}
更多关于Flutter插件ton的使用_Ton SDK for Flutter用于钱包管理与助记词工具的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件ton的使用_Ton SDK for Flutter用于钱包管理与助记词工具的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,基于您对Flutter插件 ton
的描述(虽然介绍为undefined),我会尝试根据插件名称和一些常见的Flutter插件功能进行合理推测,并给出一个示例代码框架,展示如何在Flutter项目中集成和使用一个假想的插件。请注意,由于实际插件的功能未知,以下代码仅作演示用途。
假设插件 ton
的功能
假设 ton
插件提供了一些与通知(Notifications)相关的功能,比如显示本地通知或处理远程通知。
Flutter项目结构
首先,确保您的Flutter项目结构如下:
my_flutter_app/
├── android/
├── ios/
├── lib/
│ ├── main.dart
│ └── services/
│ └── ton_service.dart
├── pubspec.yaml
└── ...
pubspec.yaml
在 pubspec.yaml
文件中添加对 ton
插件的依赖(注意:这里是一个假设的依赖项,实际使用时需要替换为真实插件的依赖):
dependencies:
flutter:
sdk: flutter
ton: ^0.0.1 # 假设的版本号,实际使用时需要替换为真实版本号
main.dart
在 main.dart
中导入并使用 ton_service
:
import 'package:flutter/material.dart';
import 'package:my_flutter_app/services/ton_service.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Ton Plugin Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
final TonService tonService = TonService();
await tonService.showLocalNotification(
title: 'Hello',
body: 'This is a local notification from the ton plugin!',
);
},
child: Text('Show Notification'),
),
),
),
);
}
}
ton_service.dart
在 lib/services/ton_service.dart
中定义 TonService
类,并封装插件的功能:
import 'package:flutter/services.dart';
import 'package:ton/ton.dart'; // 假设的导入路径,实际使用时需要替换为真实路径
class TonService {
static const MethodChannel _channel = MethodChannel('com.example.ton');
Future<void> showLocalNotification({required String title, required String body}) async {
try {
await _channel.invokeMethod('showLocalNotification', {
'title': title,
'body': body,
});
} on PlatformException catch (e) {
print("Failed to show notification: '${e.message}'.");
}
}
// 可以在这里添加更多与ton插件相关的功能方法
}
注意
- 插件实际功能:上述代码是基于假设的插件功能编写的。实际使用时,您需要查阅插件的官方文档,了解其具体提供的方法和参数。
- MethodChannel:如果插件是通过
MethodChannel
与原生代码通信的,上述代码框架是适用的。如果插件使用了其他通信机制(如EventChannel
),则需要相应地调整代码。 - 错误处理:在实际应用中,您可能需要添加更详细的错误处理和日志记录。
希望这个示例能够帮助您开始使用假设的 ton
插件。如果您有更多关于插件具体功能的信息,我可以提供更精确的帮助。