Flutter音频处理插件qosic_dart的使用

Flutter音频处理插件qosic_dart的使用

关于 ❓

此包是处理 Qosic USSD 支付的一种简单方式。它允许您将移动货币支付集成到您的 Dart 和 Flutter 应用程序中。

警告
此客户端只能在服务器端使用。

安装 💻

为了开始使用 Qosic Dart,您必须在机器上安装 Dart SDK

pubspec.yaml 文件中添加 qosic_dart

dependencies:
  qosic_dart:

然后运行以下命令以安装它:

dart pub get qosic_dart

使用 🔨

发起支付

以下是一个简单的例子,展示如何使用 QOSIC 计算 USSD 支付。

import 'dart:async';
import 'dart:developer';

import 'package:qosic_dart/qosic_dart.dart';

void main(List<String> args) async {
  // 初始化 QosicDart 实例,传入必要的认证信息
  final qosic = QosicDart(
    moovKey: 'XXXXXXXXXx', // Moov API 密钥
    mtnKey: 'XXXXXXXXXX',  // MTN API 密钥
    username: 'XXXXXXXXXX', // 用户名
    password: 'XXXXXXXXX',  // 密码
  );

  // 发起支付请求
  final transactionRef = await qosic.pay(
    network: QosicNetwork.mtn, // 指定网络运营商(MTN)
    phoneNumber: 'XXXXXXXX',   // 手机号码(带国家代码,例如:229XXXXXXXX)
    amount: '1',               // 支付金额
  );

  // 定时检查支付状态
  Timer.periodic(
    const Duration(seconds: 10), // 每隔 10 秒检查一次支付状态
    (timer) async {
      final status = await qosic.getPaymentStatus(
        transactionReference: transactionRef!, // 交易参考号
        network: QosicNetwork.mtn,             // 网络运营商
        country: QosicCountry.benin,           // 国家
      );

      // 如果支付成功或失败,停止定时器
      if (status == QosicStatus.successfull || status == QosicStatus.failed) {
        timer.cancel();

        // 输出支付结果
        if (status == QosicStatus.successfull) {
          log("支付成功!");
        } else {
          log("支付失败!");
        }
      }
    },
  );
}

连续集成 🤖

Qosic Dart 配备了由 Very Good Workflows 提供支持的内置 GitHub Actions 工作流。您可以根据需要添加自己的 CI/CD 解决方案。

默认情况下,在每次拉取请求和推送时,CI 会格式化代码、检查代码质量和运行测试。这确保代码保持一致并正确运行。项目使用 Very Good Analysis 进行严格的分析选项设置,并通过 Very Good Workflows 强制执行代码覆盖率。


运行测试 🧪

要运行所有单元测试:

dart pub global activate coverage 1.2.0
dart test --coverage=coverage
dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info

要查看生成的覆盖率报告,可以使用 lcov

# 生成覆盖率报告
genhtml coverage/lcov.info -o coverage/

# 打开覆盖率报告
open coverage/index.html

更多关于Flutter音频处理插件qosic_dart的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音频处理插件qosic_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


qosic_dart 是一个用于处理音频的 Flutter 插件,它提供了录制、播放和处理音频的功能。以下是如何在 Flutter 项目中使用 qosic_dart 插件的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 qosic_dart 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  qosic_dart: ^1.0.0  # 请确保使用最新版本

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

2. 导入包

在需要使用 qosic_dart 的 Dart 文件中导入包:

import 'package:qosic_dart/qosic_dart.dart';

3. 初始化插件

在使用插件之前,通常需要初始化它。可以在 main.dart 或任何其他合适的地方进行初始化:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await QosicDart.initialize();
  runApp(MyApp());
}

4. 录制音频

使用 QosicDart 录制音频的基本步骤如下:

// 开始录制
await QosicDart.startRecording();

// 停止录制并保存文件
String filePath = await QosicDart.stopRecording();
print('音频文件保存路径: $filePath');

5. 播放音频

使用 QosicDart 播放音频的基本步骤如下:

// 播放音频
await QosicDart.playAudio(filePath);

// 暂停播放
await QosicDart.pauseAudio();

// 停止播放
await QosicDart.stopAudio();

6. 处理音频

qosic_dart 还提供了一些音频处理功能,例如裁剪、合并等。以下是一个简单的裁剪音频的示例:

// 裁剪音频
String outputPath = await QosicDart.cropAudio(filePath, startTime: 5000, endTime: 10000);
print('裁剪后的音频文件保存路径: $outputPath');

7. 处理权限

在 Android 和 iOS 上,录制和播放音频通常需要处理权限。确保在应用中请求并处理相关权限。

import 'package:permission_handler/permission_handler.dart';

void requestPermissions() async {
  await Permission.microphone.request();
  await Permission.storage.request();
}

8. 错误处理

在使用插件时,建议添加错误处理以捕获可能的异常:

try {
  await QosicDart.startRecording();
} catch (e) {
  print('录制失败: $e');
}

9. 示例代码

以下是一个完整的示例代码,展示了如何使用 qosic_dart 进行音频的录制和播放:

import 'package:flutter/material.dart';
import 'package:qosic_dart/qosic_dart.dart';
import 'package:permission_handler/permission_handler.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await QosicDart.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AudioRecorderApp(),
    );
  }
}

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

class _AudioRecorderAppState extends State<AudioRecorderApp> {
  String _filePath = '';

  Future<void> _startRecording() async {
    try {
      await Permission.microphone.request();
      await Permission.storage.request();
      await QosicDart.startRecording();
    } catch (e) {
      print('录制失败: $e');
    }
  }

  Future<void> _stopRecording() async {
    try {
      _filePath = await QosicDart.stopRecording();
      setState(() {});
    } catch (e) {
      print('停止录制失败: $e');
    }
  }

  Future<void> _playAudio() async {
    if (_filePath.isNotEmpty) {
      try {
        await QosicDart.playAudio(_filePath);
      } catch (e) {
        print('播放失败: $e');
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('音频录制与播放'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _startRecording,
              child: Text('开始录制'),
            ),
            ElevatedButton(
              onPressed: _stopRecording,
              child: Text('停止录制'),
            ),
            ElevatedButton(
              onPressed: _playAudio,
              child: Text('播放音频'),
            ),
            if (_filePath.isNotEmpty)
              Text('音频文件保存路径: $_filePath'),
          ],
        ),
      ),
    );
  }
}
回到顶部