flutter如何用just_audio播放mp3

我在Flutter项目中集成了just_audio插件,想用它来播放本地assets目录下的MP3文件。按照文档配置了pubspec.yaml和代码,但运行时总是报"Unable to load asset"错误。我的实现代码如下:

AudioPlayer player = AudioPlayer();
await player.setAsset('assets/audio/sample.mp3');

已经在pubspec.yaml中正确声明了assets:

assets:
  - assets/audio/sample.mp3

文件路径确认无误,但就是无法加载。请问正确的实现方式是什么?是否需要额外的配置步骤?


更多关于flutter如何用just_audio播放mp3的实战教程也可以访问 https://www.itying.com/category-92-b0.html

2 回复

使用just_audio播放MP3:

  1. 添加依赖:just_audio: ^0.9.34
  2. 创建播放器实例:
final player = AudioPlayer();
  1. 播放MP3:
await player.setUrl('https://example.com/audio.mp3');
player.play();
  1. 暂停:player.pause()
  2. 停止:player.stop()

记得处理异常和资源释放。

更多关于flutter如何用just_audio播放mp3的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 just_audio 播放 MP3 文件非常简单,只需几个步骤:

  1. 添加依赖:在 pubspec.yaml 文件中添加 just_audio 依赖:

    dependencies:
      just_audio: ^0.9.35
    

    运行 flutter pub get 安装依赖。

  2. 基本代码示例

    import 'package:just_audio/just_audio.dart';
    
    class AudioPlayerExample extends StatefulWidget {
      @override
      _AudioPlayerExampleState createState() => _AudioPlayerExampleState();
    }
    
    class _AudioPlayerExampleState extends State<AudioPlayerExample> {
      final AudioPlayer _audioPlayer = AudioPlayer();
    
      @override
      void initState() {
        super.initState();
        _initAudio();
      }
    
      Future<void> _initAudio() async {
        try {
          // 播放网络 MP3 文件
          await _audioPlayer.setUrl('https://example.com/audio.mp3');
          // 或播放本地文件(需将文件放在 assets 中并在 pubspec.yaml 声明)
          // await _audioPlayer.setAsset('assets/audio.mp3');
        } catch (e) {
          print("Error loading audio: $e");
        }
      }
    
      @override
      void dispose() {
        _audioPlayer.dispose(); // 释放资源
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                // 播放/暂停按钮
                StreamBuilder<PlayerState>(
                  stream: _audioPlayer.playerStateStream,
                  builder: (context, snapshot) {
                    final playerState = snapshot.data;
                    final processingState = playerState?.processingState;
                    final playing = playerState?.playing;
                    if (processingState == ProcessingState.loading ||
                        processingState == ProcessingState.buffering) {
                      return CircularProgressIndicator();
                    } else if (playing != true) {
                      return IconButton(
                        icon: Icon(Icons.play_arrow),
                        onPressed: _audioPlayer.play,
                      );
                    } else {
                      return IconButton(
                        icon: Icon(Icons.pause),
                        onPressed: _audioPlayer.pause,
                      );
                    }
                  },
                ),
                // 进度条(可选)
                StreamBuilder<Duration>(
                  stream: _audioPlayer.positionStream,
                  builder: (context, snapshot) {
                    final position = snapshot.data ?? Duration.zero;
                    return Text('${position.inSeconds}s');
                  },
                ),
              ],
            ),
          ),
        );
      }
    }
    

关键说明

  • 网络音频:使用 setUrl() 并提供有效的 MP3 URL。
  • 本地音频:将文件放入 assets 文件夹,在 pubspec.yaml 中声明,并使用 setAsset()
  • 控制方法play()pause()stop()seek() 等。
  • 资源释放:在 dispose() 中调用 _audioPlayer.dispose() 避免内存泄漏。

如需更多功能(如循环、音量调节、播放列表),请参考 just_audio 官方文档。

回到顶部