Flutter Bolt11解码插件bolt11_decoder的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter Bolt11解码插件bolt11_decoder的使用

介绍

bolt11_decoder 是一个用于解码BOLT #11发票的Flutter插件。BOLT #11是闪电网络中的一种支付编码标准,用于表示支付请求。通过这个插件,开发者可以轻松地解析BOLT #11发票,提取其中的关键信息,如金额、时间戳和标签数据。

使用方法

以下是一个简单的使用示例,展示了如何使用 bolt11_decoder 插件来解码BOLT #11发票:

import 'package:bolt11_decoder/bolt11_decoder.dart';

void main() {
  // 创建一个BOLT #11支付请求对象
  var req = Bolt11PaymentRequest(
      'lnbc1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqdpl2pkx2ctnv5sxxmmwwd5kgetjypeh2ursdae8g6twvus8g6rfwvs8qun0dfjkxaq8rkx3yf5tcsyz3d73gafnh3cax9rn449d9p5uxz9ezhhypd0elx87sjle52x86fux2ypatgddc6k63n7erqz25le42c4u4ecky03ylcqca784w');

  // 打印发票中的金额
  print('amount: ${req.amount}');
  // 输出: amount: 0

  // 打印发票的时间戳
  print('timestamp: ${req.timestamp}');
  // 输出: timestamp: 1496314658

  // 遍历并打印所有标签字段
  req.tags.forEach((TaggedField? t) {
    print('${t!.type}: ${t.data}');
  });
  // 输出:
  // payment_hash: 0001020304050607080900010203040506070809000102030405060708090102
  // description: Please consider supporting this project

  print('');

  // 解码另一个BOLT #11发票
  req = Bolt11PaymentRequest(
      'lnbc20m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqsfpp3qjmp7lwpagxun9pygexvgpjdc4jdj85fr9yq20q82gphp2nflc7jtzrcazrra7wwgzxqc8u7754cdlpfrmccae92qgzqvzq2ps8pqqqqqqpqqqqq9qqqvpeuqafqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqgqqqqq7qqzqj9n4evl6mr5aj9f58zp6fyjzup6ywn3x6sk8akg5v4tgn2q8g4fhx05wf6juaxu9760yp46454gpg5mtzgerlzezqcqvjnhjh8z3g2qqdhhwkj');

  // 打印发票中的金额
  print('amount: ${req.amount}');
  // 输出: amount: 0.0025

  // 打印发票的时间戳
  print('timestamp: ${req.timestamp}');
  // 输出: timestamp: 1496314658

  // 遍历并打印所有标签字段
  req.tags.forEach((TaggedField? t) {
    print('${t!.type}: ${t.data}');
  });
}

示例说明

  1. 导入插件:首先,我们需要导入 bolt11_decoder 包。

    import 'package:bolt11_decoder/bolt11_decoder.dart';
    
  2. 创建支付请求对象:使用 Bolt11PaymentRequest 类来创建一个BOLT #11支付请求对象,并传入BOLT #11发票字符串。

    var req = Bolt11PaymentRequest('your_bolt11_invoice_string');
    
  3. 访问发票信息

    • req.amount:获取发票中的金额。
    • req.timestamp:获取发票的创建时间戳。
    • req.tags:获取发票中的标签字段,每个标签字段包含类型和数据。
  4. 遍历标签字段:使用 forEach 方法遍历所有标签字段,并打印其类型和数据。

    req.tags.forEach((TaggedField? t) {
      print('${t!.type}: ${t.data}');
    });
    

特性和问题反馈

  • 如果你有功能请求或发现了bug,可以在项目的issue跟踪器中提交。
  • 该插件基于Richard Bondi的BOLT #11教程开发,感谢他的贡献。
  • 该插件遵循MIT许可证,详情请参阅LICENSE文件。

完整示例Demo

为了更好地理解如何使用 bolt11_decoder 插件,以下是一个完整的Flutter项目示例:

import 'package:flutter/material.dart';
import 'package:bolt11_decoder/bolt11_decoder.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'BOLT11 Decoder Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Bolt11DecoderPage(),
    );
  }
}

class Bolt11DecoderPage extends StatefulWidget {
  [@override](/user/override)
  _Bolt11DecoderPageState createState() => _Bolt11DecoderPageState();
}

class _Bolt11DecoderPageState extends State<Bolt11DecoderPage> {
  final TextEditingController _controller = TextEditingController();
  String _output = '';

  void _decodeBolt11() {
    setState(() {
      try {
        var req = Bolt11PaymentRequest(_controller.text);
        _output = 'Amount: ${req.amount}\nTimestamp: ${req.timestamp}\n\nTags:\n';
        req.tags.forEach((TaggedField? t) {
          _output += '${t!.type}: ${t.data}\n';
        });
      } catch (e) {
        _output = 'Invalid BOLT11 invoice';
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('BOLT11 Decoder Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                labelText: 'Enter BOLT11 Invoice',
                border: OutlineInputBorder(),
              ),
              maxLines: null,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _decodeBolt11,
              child: Text('Decode'),
            ),
            SizedBox(height: 16),
            Expanded(
              child: SingleChildScrollView(
                child: Text(_output),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter Bolt11解码插件bolt11_decoder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Bolt11解码插件bolt11_decoder的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用bolt11_decoder插件来解码Bolt11(Lightning Network支付请求)的示例代码。首先,你需要确保你的Flutter项目已经创建并配置好。

步骤 1: 添加依赖

在你的pubspec.yaml文件中添加bolt11_decoder依赖:

dependencies:
  flutter:
    sdk: flutter
  bolt11_decoder: ^latest_version  # 替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

步骤 2: 导入并使用插件

接下来,你可以在你的Dart文件中导入并使用这个插件。以下是一个简单的示例,展示如何解码一个Bolt11字符串。

import 'package:flutter/material.dart';
import 'package:bolt11_decoder/bolt11_decoder.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bolt11 Decoder Example'),
        ),
        body: Bolt11DecoderExample(),
      ),
    );
  }
}

class Bolt11DecoderExample extends StatefulWidget {
  @override
  _Bolt11DecoderExampleState createState() => _Bolt11DecoderExampleState();
}

class _Bolt11DecoderExampleState extends State<Bolt11DecoderExample> {
  final TextEditingController _controller = TextEditingController();
  String _decodedData = '';

  void _decodeBolt11() async {
    String bolt11 = _controller.text;
    try {
      var decoded = await Bolt11Decoder.decode(bolt11);
      setState(() {
        _decodedData = decoded.toString();
      });
    } catch (e) {
      setState(() {
        _decodedData = 'Error decoding Bolt11: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextField(
            controller: _controller,
            decoration: InputDecoration(
              labelText: 'Enter Bolt11 string',
            ),
            maxLines: 10,
            keyboardType: TextInputType.multiline,
          ),
          SizedBox(height: 16),
          ElevatedButton(
            onPressed: _decodeBolt11,
            child: Text('Decode Bolt11'),
          ),
          SizedBox(height: 16),
          Text(
            _decodedData,
            style: TextStyle(fontSize: 16),
          ),
        ],
      ),
    );
  }
}

解释

  1. 添加依赖:在pubspec.yaml文件中添加bolt11_decoder依赖,然后运行flutter pub get
  2. 导入插件:在需要使用Bolt11解码功能的Dart文件中导入bolt11_decoder包。
  3. 创建界面:使用Flutter的Material Design组件创建一个简单的用户界面,包含一个TextField用于输入Bolt11字符串,一个ElevatedButton用于触发解码操作,以及一个Text组件用于显示解码结果。
  4. 解码逻辑:在按钮点击事件处理函数中,使用Bolt11Decoder.decode方法解码输入的Bolt11字符串,并将解码结果存储在状态变量中,以便在UI中显示。

这个示例展示了如何在Flutter应用中使用bolt11_decoder插件来解码Bolt11字符串。你可以根据实际需求进一步扩展这个示例,例如处理解码结果中的具体信息或添加更多的错误处理逻辑。

回到顶部