flutter -- 音频播放 audioplayers

使用第三方插件实现音频播放,支持安卓、IOS

先上官网链接:
https://pub.dev/packages/audioplayers

安装

根目录打开 pubspec.yaml 找到dependencies, 添加

  audioplayers: ^0.13.1

控制台:(有些编辑器会自动帮你安装)

flutter pub get

使用

引用

import 'package:audioplayers/audioplayers.dart';

初始化

AudioPlayer audioPlayer = AudioPlayer();

播放

    play() async {
      int result = await audioPlayer.play(xxx.mp3);
      if (result == 1) {
        // success
        print('play success');
      } else {
        print('play failed');
      }
    }

暂停

pause() async {
      int result = await audioPlayer.pause();
      if (result == 1) {
        // success
        print('pause success');
      } else {
        print('pause failed');
      }
    }

转跳

int result = await audioPlayer.seek(new Duration(milliseconds: startMilliseconds));
        if (result == 1) {
          print('go to success');
          // await audioPlayer.resume();
        } else {
          print('go to failed');
        }

播放中监听

audioPlayer.onAudioPositionChanged.listen((p) async {
  // p参数可以获取当前进度,也是可以调整的,比如p.inMilliseconds
})

milliseconds参数可以调整的,请注意这个部分,不然发现一转头就没声音,要设置好哦。

一般我只用到这些,更多请看官网。

离开的时候,释放资源
例子

@override
  void deactivate() async{
    print('结束');
    int result = await audioPlayer.release();
    if (result == 1) {
      print('release success');
    } else {
      print('release failed');
    }
    super.deactivate();
  }

这时候释放资源了,作者是这样说的
Releases the resources associated with this media player.
The resources are going to be fetched or buffered again as soon as you call [play] [setUrl]

其实除了这个,还有一个dispose方法,用法一样,只是返回的不是int,而是void,只是我在使用的时候,报错了。。 具体大家可以再研究下。语法:

Future dispose ()

恢复播放

resume → Future 和上面用法一样用法。
作者描述原文:
Resumes the audio that has been paused or stopped, just like calling play, but without changing the parameters.

上面说恢复刚刚暂停或者停止播放的音频,问题来了,暂停和播放有啥区别?欢迎下方评论留言。

音量控制

Future setVolume (
double volume
)

也是Future函数,返回int类型,和上面一致,然后传入音量的值,取区域是 0 - 1。


TIPS

请不要在build函数里面声明变量。在initState中初始化,参考:


  @override
  void initState() {
    super.initState();
    initAudioPlayer();
  }

  void initAudioPlayer() {
    audioPlayer = new AudioPlayer();

    _positionSubscription =
        audioPlayer.onAudioPositionChanged.listen((p) async {
      if (!pickItem.containsKey('end')) {
        return;
      }
...

flutter pub get

的时候
如果你遇到了如下错误

"flutter run" prints warning multiple times after switching Flutter SDK's
请运行如下命令
flutter packages upgrade
如果你运行这个的时候出现
Waiting for another flutter command to release the startup lock

请切换到flutter安装目录下,运行
rm ./bin/cache/lockfile

然后再次执行

flutter packages upgrade

问题将解决。

相关链接

https://pub.dev/documentation/audioplayers/latest/audioplayers/AudioPlayer-class.html

--END--

你可能感兴趣的:(flutter -- 音频播放 audioplayers)