Flutter 颤振:致命错误:回调查找失败!(带音频播放器套装)

Flutter 颤振:致命错误:回调查找失败!(带音频播放器套装),flutter,dart,flutter-dependencies,flame,Flutter,Dart,Flutter Dependencies,Flame,以下代码段是单击按钮时发出的短嘟嘟声: FlatButton( onPressed: () => { final player = new AudioCache(); player.play('note1.wav'); } child: Text('Click to ding!'), ), 我面临的问题是,每当我单击此按钮时,尽管声音播放正确,但我在终端中收到此错误:flatter:Fatal error:Callback lookup failed 我想知道

以下代码段是单击按钮时发出的短嘟嘟声:

FlatButton(
  onPressed: () => {
    final player = new AudioCache();
    player.play('note1.wav');
  }
  child: Text('Click to ding!'),
),
我面临的问题是,每当我单击此按钮时,尽管声音播放正确,但我在终端中收到此错误:
flatter:Fatal error:Callback lookup failed
我想知道这是什么,我该怎么做

我查了一下,但没有发现任何有用的东西


谢谢

我也遇到了同样的问题,所以这适用于我的游戏代码,我希望这适用于您,首先,创建如下控制器类:

import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';

void audioPlayerHandler(AudioPlayerState value) => print('state => $value');

class GameController {

  static AudioPlayer audioPlayer = AudioPlayer();
  static AudioCache audioCache = AudioCache();

  static void play(String sound) {
    if (!kIsWeb && Platform.isIOS) {
      audioPlayer.monitorNotificationStateChanges(audioPlayerHandler);
    }
    audioCache.play(sound);
  }
}
然后通过以下方式使用您的代码:

FlatButton(
  onPressed: () => {
    GameController.play('note1.wav');
  }
  child: Text('Click to ding!'),
),
看起来像是一个错误,如果没有通过
monitorNotificationStateChanges
定义回调方法,则日志中会打印“致命错误:回调查找失败!”

这似乎没有任何影响

但避免这种情况的一种方法确实是设置回调,它必须在类之外定义,如下所示:

import 'package:audioplayers/audioplayers.dart';

class YourStatefulWidget extends StatefulWidget {
  @override
  _YourStatefulWidgetState createState() => _YourStatefulWidgetState();
}

class _YourStatefulWidgetState extends State<YourStatefulWidget> {
  ...

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

    if (Platform.isIOS) {
      // to avoid getting "Fatal Error: Callback lookup failed!"
      audioPlayer.monitorNotificationStateChanges(audioPlayerHandler);    
    }
  }

  ...
}

// must be defined globally
void audioPlayerHandler(AudioPlayerState value) => null;
import'包:audioplayers/audioplayers.dart';
类YourStatefulWidget扩展StatefulWidget{
@凌驾
_YourStatefulWidgetState createState()=>\u YourStatefulWidgetState();
}
类_YourStatefulWidgetState扩展状态{
...
@凌驾
void initState(){
super.initState();
if(Platform.isIOS){
//避免获取“致命错误:回调查找失败!”
audioPlayer.monitorNotificationStateChanges(audioPlayerHandler);
}
}
...
}
//必须全局定义
void audioPlayerHandler(AudioPlayerState值)=>null;

谢谢,这就解决了问题。尽管我需要去掉扁平按钮上的花括号和分号。