feat: Implement audio shutdown procedure for graceful app exit

Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
2026-03-23 17:38:18 +01:00
parent f4d6db2db0
commit a7353e45b3
3 changed files with 95 additions and 17 deletions
+2 -17
View File
@@ -143,7 +143,6 @@ class _GameScreenState extends State<GameScreen> {
DefaultRendererSettingsPersistence();
final DefaultSaveGamePersistence _savePersistence =
DefaultSaveGamePersistence();
Future<void>? _audioShutdownFuture;
/// Mirrors [WolfRendererSettings.mode] into the Flutter renderer enum.
RendererMode _rendererMode = RendererMode.hardware;
@@ -213,29 +212,15 @@ class _GameScreenState extends State<GameScreen> {
@override
void dispose() {
unawaited(_shutdownAudioForExit());
unawaited(widget.wolf3d.shutdownAudio());
super.dispose();
}
Future<void> _quitApplication() async {
await _shutdownAudioForExit();
await widget.wolf3d.shutdownAudio();
await SystemNavigator.pop();
}
Future<void> _shutdownAudioForExit() {
final existing = _audioShutdownFuture;
if (existing != null) {
return existing;
}
final shutdown = () async {
await widget.wolf3d.audio.stopAllAudio();
widget.wolf3d.audio.dispose();
}();
_audioShutdownFuture = shutdown;
return shutdown;
}
@override
Widget build(BuildContext context) {
return PopScope(