我目前正在使用just_audio和flutter_riverpod包开发Flutter应用程序。在我的项目中,我遇到了一个问题,我得到一个错误消息说“错误:错误状态:调用源自just_audio包的close”后无法添加新事件。
当我点击报警声音按钮时出现此错误。
错误发生在以下函数中:
Future<void> playSound() async {
if (!_isDisposed) {
final selectedSound = ref.watch(selectedSoundProvider.notifier).state;
await _audioPlayer.setAsset(selectedSound.path); // Error here
_audioPlayer.play();
}
}
字符串
我已经尝试调试该问题,但我很难理解问题的根源。我怀疑它可能与just_audio包中的流的生命周期有关。
下面是我的代码的相关部分:
timer_notifier.dart:
class TimerNotifier extends StateNotifier<int> {
...
Future<void> playSound() async {
if (!_isDisposed) {
final selectedSound = ref.watch(selectedSoundProvider.notifier).state;
await _audioPlayer.setAsset(selectedSound.path); // Error here
_audioPlayer.play();
}
}
@override
void dispose() {
print('dispose is being called');
_mounted = false;
_timer?.cancel();
_isDisposed = true;
_audioPlayer.dispose();
super.dispose();
}
...
}
型
settings_page.dart:
class SettingsPage extends ConsumerWidget {
...
Widget build(BuildContext context, WidgetRef ref) {
return Scaffold(
...
ListTile(
title: Text('Alarm Sound'),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: ref.watch(soundListProvider).map((sound) {
return Padding(
padding: const EdgeInsets.all(2.0),
child: ElevatedButton(
onPressed: () async {
ref.read(selectedSoundProvider.notifier).state = sound;
await ref.read(timerNotifierProvider.notifier).playSound();
},
child: Text(sound.friendlyName),
),
);
}).toList(),
),
),
...
}
型
谁能帮助我理解这个问题,并指导我一步一步地在哪里进行必要的更改来解决这个问题?任何帮助将不胜感激。
谢谢你,谢谢
1条答案
按热度按时间h5qlskok1#
问题出在这部分代码中:
字符串
您应该在回调和生命周期方法(如
initState()
)中使用ref.read
。