Flutter LNURL处理插件dart_lnurl的使用
Flutter LNURL处理插件dart_lnurl的使用
dart_lnurl
dart_lnurl
是一个用于解码 bech32 编码的 LNURL 字符串的 Dart 实现。目前支持以下标签:
- withdrawRequest
- payRequest
- channelRequest
- login
特性
- ✅ 解码一个 bech32 编码的 LNURL 字符串。
- ✅ 处理 LUD-17 非 bech32 LNURL 字符串(lnurlw, lnurlp, lnurlc, keyauth)。
- ✅ 向解码后的 LN 服务发起 GET 请求并返回响应。
了解更多关于 LNURL 规范的信息,请访问 LNURL RFC。
API 参考
Future<LNURLParseResult> getParams(String encodedUrl)
使用此方法解析编码的 bech32 LNURL 字符串,调用解码后的 URI,并从 LNURL 服务返回解析后的响应。encodedUrl
可以包含 lightning:
或不包含。
String decryptSuccessActionAesPayload({LNURLPaySuccessAction successAction, String preimage})
在进行 LNURL 支付时,成功操作可能包含使用支付预图像加密的有效载荷。使用此函数解密该有效载荷。
完整示例 Demo
步骤 1: 添加依赖
在 pubspec.yaml
文件中添加 dart_lnurl
依赖项:
dependencies:
flutter:
sdk: flutter
dart_lnurl: ^0.0.1
步骤 2: 导入包
在 Dart 文件中导入 dart_lnurl
包:
import 'package:dart_lnurl/dart_lnurl.dart';
步骤 3: 使用 getParams
方法
import 'package:flutter/material.dart';
import 'package:dart_lnurl/dart_lnurl.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('LNURL Demo')),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
final encodedUrl = "lightning:lnurl1dp68gum...";
final result = await getParams(encodedUrl);
print("Decoded Result: $result");
} catch (e) {
print("Error: $e");
}
},
child: Text('Decode LNURL'),
),
),
),
);
}
}
步骤 4: 解析 LNURL 并处理结果
在上面的示例中,我们使用 getParams
方法解析 LNURL 字符串。当按钮被点击时,将调用 getParams
方法并打印解码结果。如果发生错误,则会捕获异常并打印错误信息。
步骤 5: 解密成功动作的有效载荷(可选)
如果成功动作包含加密的有效载荷,可以使用 decryptSuccessActionAesPayload
方法来解密它:
import 'package:dart_lnurl/dart_lnurl.dart';
void decryptPayload() {
final successAction = LNURLPaySuccessAction(
tag: "tag",
description: "description",
aes: "aes_payload",
// 其他参数
);
final preimage = "your_preimage_here";
final decryptedPayload = decryptSuccessActionAesPayload(
successAction: successAction,
preimage: preimage,
);
print("Decrypted Payload: $decryptedPayload");
}
更多关于Flutter LNURL处理插件dart_lnurl的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter LNURL处理插件dart_lnurl的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
dart_lnurl
是一个用于处理 LNURL (Lightning Network URLs) 的 Dart 包,它可以帮助你在 Flutter 应用中轻松处理 LNURL 相关的操作。LNURL 是一种基于 Lightning Network 的协议,允许用户通过简单的 URL 进行支付、认证等操作。
以下是如何在 Flutter 项目中使用 dart_lnurl
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 dart_lnurl
依赖:
dependencies:
flutter:
sdk: flutter
dart_lnurl: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入包
在你的 Dart 文件中导入 dart_lnurl
包:
import 'package:dart_lnurl/dart_lnurl.dart';
3. 使用 dart_lnurl
处理 LNURL
dart_lnurl
提供了多种功能来处理 LNURL,包括解析 LNURL、生成 LNURL、处理 LNURL 请求等。
解析 LNURL
你可以使用 LNURL.parse
方法来解析一个 LNURL:
void parseLnurl(String lnurl) async {
try {
final parsedLnurl = await LNURL.parse(lnurl);
print('Parsed LNURL: $parsedLnurl');
} catch (e) {
print('Error parsing LNURL: $e');
}
}
处理 LNURL 支付请求
如果你有一个 LNURL 支付请求,你可以使用 LNURLPay
来处理它:
void handleLnurlPay(String lnurlPay) async {
try {
final lnurlPayRequest = await LNURLPay.parse(lnurlPay);
print('LNURL Pay Request: $lnurlPayRequest');
// 创建支付请求
final invoice = await lnurlPayRequest.createInvoice(amount: 1000); // 1000 sats
print('Invoice: $invoice');
// 发送支付请求
final paymentResult = await lnurlPayRequest.sendPayment(invoice);
print('Payment Result: $paymentResult');
} catch (e) {
print('Error handling LNURL Pay: $e');
}
}
处理 LNURL 认证请求
如果你有一个 LNURL 认证请求,你可以使用 LNURLAuth
来处理它:
void handleLnurlAuth(String lnurlAuth) async {
try {
final lnurlAuthRequest = await LNURLAuth.parse(lnurlAuth);
print('LNURL Auth Request: $lnurlAuthRequest');
// 进行认证
final authResult = await lnurlAuthRequest.authenticate();
print('Auth Result: $authResult');
} catch (e) {
print('Error handling LNURL Auth: $e');
}
}
4. 示例代码
以下是一个完整的示例,展示了如何解析和处理 LNURL:
import 'package:dart_lnurl/dart_lnurl.dart';
void main() async {
const lnurlPay = 'lnurl1dp68gurn8ghj7um9wfmxjcm99e3k7mf0v9cxj0m385ekvcenxc6r2c35xvukxefcv5mkvv34x5ekzd3ev56nyd3hxqurzepexejxxepnxscrvwfnv9nxzcn9xq6xyefhvgcxxcmyxymnserxfq5fns';
const lnurlAuth = 'lnurl1dp68gurn8ghj7um9wfmxjcm99e3k7mf0v9cxj0m385ekvcenxc6r2c35xvukxefcv5mkvv34x5ekzd3ev56nyd3hxqurzepexejxxepnxscrvwfnv9nxzcn9xq6xyefhvgcxxcmyxymnserxfq5fns';
await parseLnurl(lnurlPay);
await handleLnurlPay(lnurlPay);
await handleLnurlAuth(lnurlAuth);
}
void parseLnurl(String lnurl) async {
try {
final parsedLnurl = await LNURL.parse(lnurl);
print('Parsed LNURL: $parsedLnurl');
} catch (e) {
print('Error parsing LNURL: $e');
}
}
void handleLnurlPay(String lnurlPay) async {
try {
final lnurlPayRequest = await LNURLPay.parse(lnurlPay);
print('LNURL Pay Request: $lnurlPayRequest');
final invoice = await lnurlPayRequest.createInvoice(amount: 1000);
print('Invoice: $invoice');
final paymentResult = await lnurlPayRequest.sendPayment(invoice);
print('Payment Result: $paymentResult');
} catch (e) {
print('Error handling LNURL Pay: $e');
}
}
void handleLnurlAuth(String lnurlAuth) async {
try {
final lnurlAuthRequest = await LNURLAuth.parse(lnurlAuth);
print('LNURL Auth Request: $lnurlAuthRequest');
final authResult = await lnurlAuthRequest.authenticate();
print('Auth Result: $authResult');
} catch (e) {
print('Error handling LNURL Auth: $e');
}
}