You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter音频播放问题求助:已导入播放器库却无法排查问题

Flutter 音频播放实现指南

一、常用库与依赖配置

推荐使用audioplayers(当前主流的Flutter音频播放库),配置步骤如下:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  audioplayers: ^6.1.0 # 请替换为pub.dev上的最新版本号
  1. 执行命令安装依赖:
flutter pub get

二、基础实现代码

以下是包含播放、暂停、进度控制的完整示例:

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

class AudioPlayerDemo extends StatefulWidget {
  const AudioPlayerDemo({super.key});

  @override
  State<AudioPlayerDemo> createState() => _AudioPlayerDemoState();
}

class _AudioPlayerDemoState extends State<AudioPlayerDemo> {
  final AudioPlayer _player = AudioPlayer();
  bool _isPlaying = false;
  Duration _audioDuration = Duration.zero;
  Duration _currentPosition = Duration.zero;

  @override
  void initState() {
    super.initState();
    // 监听播放状态变化
    _player.onPlayerStateChanged.listen((state) {
      setState(() => _isPlaying = state == PlayerState.playing);
    });
    // 监听音频总时长
    _player.onDurationChanged.listen((duration) {
      setState(() => _audioDuration = duration);
    });
    // 监听当前播放进度
    _player.onPositionChanged.listen((position) {
      setState(() => _currentPosition = position);
    });
  }

  // 播放网络音频
  Future<void> _startPlay() async {
    await _player.play(UrlSource('https://example.com/your-audio.mp3'));
    // 若播放本地资源,替换为:AssetSource('assets/audios/demo.mp3')
  }

  // 暂停播放
  Future<void> _pausePlay() async {
    await _player.pause();
  }

  // 调整播放进度
  Future<void> _seekToPosition(double value) async {
    await _player.seek(Duration(seconds: value.toInt()));
  }

  @override
  void dispose() {
    _player.dispose(); // 销毁播放器,释放资源
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        // 进度条
        Slider(
          min: 0,
          max: _audioDuration.inSeconds.toDouble(),
          value: _currentPosition.inSeconds.toDouble(),
          onChanged: _seekToPosition,
        ),
        // 播放/暂停按钮
        IconButton(
          icon: Icon(_isPlaying ? Icons.pause_circle : Icons.play_circle),
          iconSize: 60,
          onPressed: () => _isPlaying ? _pausePlay() : _startPlay(),
        ),
      ],
    );
  }
}

三、常见问题排查(针对导入库后仍有问题的情况)

  • 依赖版本不兼容:检查audioplayers版本是否适配当前Flutter SDK,可查看pub.dev上的库版本说明。
  • 本地资源未声明:播放本地音频时,需在pubspec.yaml中正确配置资源路径:
flutter:
  assets:
    - assets/audios/ # 替换为你的音频资源目录
  • 权限缺失:
    • Android端播放网络音频需在AndroidManifest.xml添加:
      <uses-permission android:name="android.permission.INTERNET" />
      
    • iOS端播放网络音频需在Info.plist添加:
      <key>NSAppTransportSecurity</key>
      <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
      </dict>
      
  • 资源释放问题:确保在组件销毁时调用_player.dispose(),避免内存泄漏或播放异常。

内容的提问来源于stack exchange,提问作者عمر محمود

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:22:36