类型 'AudioCache' 没有定义 'play' 方法。

7

'AudioCache'类型中未定义'method' 'play'。

导入'package:flutter/material.dart'; 导入'package:audioplayers/src/audio_cache.dart';

void main() {
runApp(XylophoneApp());
}

class XylophoneApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
  home: Scaffold(
    body: SafeArea(
      child: Center(
        child: TextButton(
          onPressed: () {
            final player = AudioCache();
            player.play('note1.wave');
          },
          child: Text('click me'),
        ),
      ),
    ),
  ),
 );
}

}

7个回答

26

从audioplayers v1.0.1起,下面的代码已不再有效。

final player = AudioCache();
player.play('note1.wave');

您可以这样做。

final player = AudioPlayer();
//
player.play(UrlSource('note1.wave'));

// If file located in assets folder like assets/sounds/note01.wave"
await player.play(AssetSource('sounds/note1.wave'));

考虑查看从audioplayers迁移指南


5

AudioCache因名称混淆已经被弃用。现在,如果您想从 assets 播放 音频文件 ,可以使用以下方法。

// add this in imports
import 'package:audioplayers/audioplayers.dart';

// play audio
final player = AudioPlayer();
player.play(AssetSource('note1.wav'));

如果您想要播放非assets中的音频,请使用此选项而不是AssetSource

  1. UrlSource:从互联网中获取音频
  2. DeviceFileSource:访问用户设备中的文件,通常是通过文件选择器选择的
  3. AssetSource:播放与应用捆绑的资源,通常在assets目录中
  4. BytesSource(仅适用于某些平台):直接传入音频字节(从任何地方读取)。

您可以从文档中查看更多信息。


1

如果您在使用 Tharwat Samy 课程 时遇到了这个问题,那么这里是解决方案:

  • 请注意:

audioplayers 4.0.1

flutter 3.7.10

  • 修改此代码:

     Number(
     image: 'assets/images/numbers/number_one.png',
     enName: 'one',
     jpName: 'Ichi',
     sound: 'assets/sounds/numbers/number_one_sound.mp3'),
    

目标:

    Number(
    image: 'assets/images/numbers/number_one.png',
    enName: 'one',
    jpName: 'Ichi',
    // remove 'assets/' from audio path .
    sound: 'sounds/numbers/number_one_sound.mp3'), 
  • 将所有音频文件路径进行此更改。
  • 同时也更改播放器代码:

     AudioCache player = AudioCache(prefix:'assets/sounds/numbers/');
     player. Play(number.sound);
    
  • 至:

        final player = AudioPlayer();
        player.play(AssetSource(number.sound));
    

    或者你也可以直接通过路径添加:

        final player = AudioPlayer();
        // don't forget to delete 'assets/' from the path 
        player.play(AssetSource('sounds/numbers/number_one_sound.mp3'));
    

    来自Tharwat Samy的学生, 提供者:AMG, https://web.facebook.com/mohamed.amged.351


    1
    下面的代码使用AudioCache而不是AudioPlayer();
    final player = AudioCache();
    player.play('note1.wave');
    

    你应该换成 ...

    final player = AudioPlayer();
    player.play('note1.wave');
    

    0

    @Raj 如果您正在学习伦敦应用酿造厂和Angela Yu的LinkedIn课程,那么完美运行的确切版本将是0.10.0

    audioplayers: 0.10.0

    这是Angela使用的版本,对我来说完美运行了:-) 如果不是@Zain Basharat Ali的建议,我就不会尝试它。 感谢您的提示!:-)


    0

    你的导入似乎有问题。请导入以下内容:

    import 'package:audioplayers/audioplayers.dart';

    如果问题仍然存在,请使用旧版本。 我认为版本0.19.0适合你。


    谢谢,之前的版本正常工作。 - Raj
    好的,请将我的回答标记为正确答案,这样其他人就可以将其作为验证过的答案使用。 - Zain Basharat Ali

    0

    AudioCache类用于管理缓存存储,临时保存音频文件。从源代码查看AudioCache类

    AudioPlayer类已经使用了AudioCache类,并在setSourceAsset方法中实现了它,用于保存位于assets文件夹中的文件到缓存中。

    然后,请注意它不会自动播放,您需要手动播放它。

    由于play()方法返回resume()方法从源代码查看AudioPlayer类,您可以通过直接执行resume()方法来手动播放它。


    例子:

    对于文件 'assets/note1.wav'。 默认情况下,会在前面添加 'assets/'。

    final player = AudioPlayer();
    await player.setSourceAsset('note1.wav'); 
    await player.resume();`
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接