Flutter 当移动到另一个字母时停止字母声音

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

如果用户没有等待听到 信的声音 他在按钮之间快速移动 声音之间有重叠, 所有的声音依然存在。 在应用程序的后台 如何纠正或解决问题?

enter image description here

dependencies  : kplayer: ^0.2.4


class _HomeState extends State<Home> {
  String currentAlphabet = "A";
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.amber[200],
      body: LayoutBuilder(builder: (context, constraints) {
        var height = constraints.maxHeight;
        var width = constraints.maxWidth;
        return Column(
          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
          children: [
            sentenceHolder(height, width),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                imageHolder(height, width),
                wordHolder(height, width),
              ],
            ),
            Container(
              decoration:
                  BoxDecoration(borderRadius: BorderRadius.circular(15)),
              child: Wrap(
                children: changePos(),
              ),
            ),
          ],
        );
      }),
    );
  }

  playAudio(String path) {
    Player.asset(path).play();
  }

  List<Widget> changePos() {
    List<Widget> children = [
      ...alphabets
          .map(
            (e) => textHolder(e),
          )
          .toList()
    ];

    return children;
  }

Widget textHolder(String alphabet) {
    return Padding(
      padding: const EdgeInsets.all(7),
      child: ElevatedButton(
        onPressed: () {
          currentAlphabet = alphabet;
          playAudio("assets/audio/$alphabet.wav");
          setState(() {});
        },
        child: Text(alphabet),
      ),
    );
  }

// 调用字母时声音是一个函数

它工作正常,但如果我们在字母按钮之间快速移动,我们会注意到所有声音同时一起工作 //

flutter audio overlapping
1个回答
0
投票

一个简单的解决方案是: 在调用 play() 之前停止已经播放的歌曲/声音

© www.soinside.com 2019 - 2024. All rights reserved.