美文网首页
Flutter之audioplayers音频播放(提问)

Flutter之audioplayers音频播放(提问)

作者: Janise001 | 来源:发表于2021-06-09 16:30 被阅读0次

在pubspec.yaml中添加audioplayers: ^0.19.0之后在lib中添加部件文件,文件中

class AudioFile extends StatefulWidget {
  final AudioPlayer advancedPlayer;

  const AudioFile({Key key, this.advancedPlayer}) : super(key: key);

  @override
  _AudioFileState createState() => _AudioFileState();
}

class _AudioFileState extends State<AudioFile> {
  // 缓冲时长
  Duration _duration = Duration();

  // 播放时长
  Duration _position = Duration();

  // 播放链接地址
  final String path = 'https://luan.xyz/files/audio/ambient_c_motion.mp3';

  // 是否正在播放
  bool isPlaying = false;

  // 是否已暂停
  bool isPaused = false;

  // 是否循环
  bool isLoop = false;

  // 播放按钮图片
  List<IconData> _icons = [
    Icons.play_circle_fill,
    Icons.pause_circle_filled,
  ];

  @override
  void initState() {
    super.initState();
    this.widget.advancedPlayer.setUrl(path);
    // 缓冲时长触发
    this.widget.advancedPlayer.onDurationChanged.listen((d) {
      setState(() {
        _duration = d;
      });
    });
    // 播放时长触发(通常用于播放进度条的使用)
    this.widget.advancedPlayer.onAudioPositionChanged.listen((p) {
      setState(() {
        _position = p;
      });
    });
    // widget.advancedPlayer.onPlayerError.listen((msg) {
    //   print('audioPlayer error : $msg');
    //   setState(() {
    //     _duration = Duration(seconds: 0);
    //     _position = Duration(seconds: 0);
    //   });
    // });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          _loadAssets(),
        ],
      ),
    );
  }

  Widget _startBtn() {
    return IconButton(
      padding: EdgeInsets.only(bottom: 10.0),
      onPressed: () {
        _play();
      },
      icon: Icon(Icons.play_circle_filled),
    );
  }
  Future _play() async {
    int result = await widget.advancedPlayer.play(path,isLocal: false);
    if (result == 1) {
      // success
      print('play success');
    } else {
      print('play failed');
    }
  }

  Widget _loadAssets() {
    return Container(
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: [
          _startBtn(),
        ],
      ),
    );
  }
}

使用的是iOS虚拟机播放,在iOS文件下的info.plist文件中添加网络访问权限

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

为以防万一我到ios文件夹下做了个pod install.
播放文件为https线上音频文件。
是不是以为我来写技术文了?

当然不是!我都没写暂停paused!!

惭愧啊,我是来提问的,做完上面的工作后我的虚拟机没有声音,对,点击播放没有声音,我还没找到原因,道友有解请留下你的解决方法,不胜感激!

相关文章

网友评论

      本文标题:Flutter之audioplayers音频播放(提问)

      本文链接:https://www.haomeiwen.com/subject/aryeeltx.html