Flutter assets_audio_player 实例未处理时继续播放多个音频

问题描述 投票:0回答:0

我正在使用 flutter assets_audio_player 包,它有一个错误。它正在播放多个音频而不是替换现有音频。我在initState()方法中尝试了很多停止播放的方法,但都没有用。我不想处理它,因为我希望能够在后台播放音频时导航到其他屏幕。

如果我不处理它在后台播放的音频实例,但当我返回再次加载相同的音频时,它不会停止播放音频,而是开始播放多个音频。

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

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

  @override
  State<AudioPlayer6Page> createState() => _AudioPlayer6PageState();
}

class _AudioPlayer6PageState extends State<AudioPlayer6Page> {
  late AssetsAudioPlayer assetsAudioPlayer;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    assetsAudioPlayer = AssetsAudioPlayer.newPlayer();
    loadMedia();
  }

  Future<void> loadMedia() async {
    try {
      await assetsAudioPlayer.open(
          Audio.network(
              "https://s3.amazonaws.com/scifri-episodes/scifri20181123-episode.mp3"),
          autoStart: false,
          showNotification: true);
    } catch (t) {
      //mp3 unreachable
    }
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();

    print('dispose');
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        body: SingleChildScrollView(
          child: Container(
            height: MediaQuery.of(context).size.height,
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
                Center(
                  child: Text('Another audio player'),
                ),
                StreamBuilder(
                    stream: assetsAudioPlayer.isPlaying,
                    builder: (context, asyncSnapshot) {
                      final bool? isPlaying = asyncSnapshot.data;
                      return isPlaying == true
                          ? Center(
                              child: IconButton(
                                  onPressed: () {
                                    assetsAudioPlayer.pause();
                                  },
                                  icon: Icon(
                                    Icons.pause,
                                    size: 50,
                                  )))
                          : Center(
                              child: IconButton(
                                  onPressed: () {
                                    assetsAudioPlayer.play();
                                  },
                                  icon: Icon(
                                    Icons.play_arrow,
                                    size: 50,
                                  )),
                            );
                    }),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

请帮忙!

flutter dart assets
© www.soinside.com 2019 - 2024. All rights reserved.