音频播放器

一个 Flutter 音频插件 (ObjC/Java),用于播放远程或本地音频文件。

特点

  • [x] Android & iOS
    • [x] 播放 (远程文件)
    • [x] 停止
    • [x] 暂停
    • [x] 播放完毕
    • [x] 持续时间/当前位置
    • [x] 跳转
    • [x] 静音

Audio-1

用法

示例

使用此插件

  dependencies:
    flutter:
      sdk: flutter
    audioplayer:
  • 实例化一个 AudioPlayer 实例
//...
AudioPlayer audioPlugin = new AudioPlayer();
//...

播放器控件

Future<void> play() async {
  await audioPlayer.play(kUrl);
  setState(() => playerState = PlayerState.playing);
}

Future<void> pause() async {
  await audioPlayer.pause();
  setState(() => playerState = PlayerState.paused);
}

Future<void> stop() async {
  await audioPlayer.stop();
  setState(() {
    playerState = PlayerState.stopped;
    position = new Duration();
  });
}

状态和当前位置

插件的 Dart 部分监听平台调用

//...
_positionSubscription = audioPlayer.onAudioPositionChanged.listen(
  (p) => setState(() => position = p)
);

_audioPlayerStateSubscription = audioPlayer.onPlayerStateChanged.listen((s) {
  if (s == AudioPlayerState.PLAYING) {
    setState(() => duration = audioPlayer.duration);
  } else if (s == AudioPlayerState.STOPPED) {
    onComplete();
    setState(() {
      position = duration;
    });
  }
}, onError: (msg) {
  setState(() {
    playerState = PlayerState.stopped;
    duration = new Duration(seconds: 0);
    position = new Duration(seconds: 0);
  });
});

别忘了在 widget disposed 时取消所有订阅。

iOS

:warning: iOS 应用传输安全

默认情况下,iOS 禁止加载非 HTTPS URL。要取消此限制,请编辑您的 .plist 文件并添加

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

GitHub

https://github.com/rxlabz/audioplayer