Flutter音频选择插件better_audio_picker_plugin的使用

Flutter音频选择插件better_audio_picker_plugin的使用

安装开始

  1. 在你的pubspec.yaml文件中添加以下依赖:
dependencies:
  better_audio_picker_plugin: ^0.0.6
  1. 安装依赖:
$ flutter packages get

常规用法

// 监听音频搜索结果
scanResultStreamSubscription = audioPickerPlugin.scanResultStream.listen((event) {
  print("音频搜索结果:$event");
  setState(() {
    audioList = event;
  });
});

// 开始扫描音频
audioPickerPlugin.scanAudio();
// 监听音频选择结果
pickResultStreamSubscription = audioPickerPlugin.pickResultStream.listen((event) {
  print("音频保存路径:$event");
});

// 选择音频并保存到指定路径
audioPickerPlugin.pickAudio(uri: audio.uri);

特性

  • 可以在Android平台上选择音频

完整示例代码

import 'dart:async';
import 'package:better_audio_picker_plugin/better_audio_picker_plugin.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:path/path.dart' as path;

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

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

class _MyAppState extends State<MyApp> {
  late BetterAudioPickerPlugin audioPickerPlugin;
  late StreamSubscription scanResultStreamSubscription;
  late StreamSubscription pickResultStreamSubscription;

  List<BetterAudioPickerPluginAudioModel> audioList = [];

  [@override](/user/override)
  void initState() {
    super.initState();

    // 初始化音频选择插件
    audioPickerPlugin = BetterAudioPickerPlugin();

    // 监听音频搜索结果
    scanResultStreamSubscription = audioPickerPlugin.scanResultStream.listen((event) {
      print("音频搜索结果:$event");
      setState(() {
        audioList = event;
      });
    });

    // 监听音频选择结果
    pickResultStreamSubscription = audioPickerPlugin.pickResultStream.listen((event) {
      print("音频保存路径:$event");
    });

    // 请求存储权限并开始扫描音频
    Future.delayed(Duration.zero, () async {
      if (await Permission.storage.isGranted) {
        audioPickerPlugin.scanAudio();
      } else if (!(await Permission.storage.isPermanentlyDenied)) {
        final status = await Permission.storage.request();
        if (status == PermissionStatus.granted) {
          audioPickerPlugin.scanAudio();
        } else {
          openAppSettings();
        }
      } else {
        openAppSettings();
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListView.builder(
          itemBuilder: (context, index) {
            final audio = audioList[index];
            return CupertinoButton(
              child: Text("${audio.name}"),
              onPressed: () async {
                final tempDirectory = await getTemporaryDirectory();
                final tempPath = path.join(tempDirectory.path, audio.name);
                audioPickerPlugin.pickAudio(uri: audio.uri, path: tempPath);
              },
            );
          },
          itemCount: audioList.length,
        ),
      ),
    );
  }
}

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

1 回复

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


better_audio_picker_plugin 是一个 Flutter 插件,用于从设备中选择音频文件。它提供了一个简单的方式来让用户选择音频文件,并返回文件的路径或其他相关信息。

以下是如何在 Flutter 项目中使用 better_audio_picker_plugin 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 better_audio_picker_plugin 的依赖。

dependencies:
  flutter:
    sdk: flutter
  better_audio_picker_plugin: ^1.0.0 # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件。

import 'package:better_audio_picker_plugin/better_audio_picker_plugin.dart';

3. 使用插件选择音频文件

你可以使用 BetterAudioPickerPlugin 来选择音频文件。以下是一个简单的示例:

class MyHomePage extends StatelessWidget {
  Future<void> pickAudio() async {
    try {
      // 选择音频文件
      final audioFile = await BetterAudioPickerPlugin.pickAudio();

      // 检查是否成功选择了文件
      if (audioFile != null) {
        print("Selected audio file path: ${audioFile.path}");
        print("Selected audio file name: ${audioFile.name}");
        print("Selected audio file size: ${audioFile.size}");
      } else {
        print("No audio file selected.");
      }
    } catch (e) {
      print("Error picking audio file: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Picker Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: pickAudio,
          child: Text('Pick Audio'),
        ),
      ),
    );
  }
}

4. 处理权限

在 Android 和 iOS 上,访问文件系统可能需要特定的权限。确保你已经在 AndroidManifest.xmlInfo.plist 中添加了必要的权限。

Android

AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

iOS

Info.plist 中添加以下权限:

<key>NSMicrophoneUsageDescription</key>
<string>We need access to your microphone to record audio.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to select audio files.</string>

5. 运行项目

现在你可以运行你的 Flutter 项目,并测试音频选择功能。

6. 处理返回的音频文件

BetterAudioPickerPlugin.pickAudio() 返回一个 AudioFile 对象,你可以从中获取音频文件的相关信息,如路径、文件名、大小等。

class AudioFile {
  final String path;
  final String name;
  final int size;

  AudioFile({required this.path, required this.name, required this.size});
}
回到顶部