feat: adding start screen sfx

pull/308/head
Erick Zanardo 3 years ago
parent 9784091f84
commit 13af20f2d9

@ -3,8 +3,10 @@
import 'dart:async'; import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pinball/gen/gen.dart'; import 'package:pinball/gen/gen.dart';
import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/l10n/l10n.dart';
import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_ui/pinball_ui.dart'; import 'package:pinball_ui/pinball_ui.dart';
import 'package:platform_helper/platform_helper.dart'; import 'package:platform_helper/platform_helper.dart';
@ -50,10 +52,13 @@ extension on Control {
} }
Future<void> showHowToPlayDialog(BuildContext context) { Future<void> showHowToPlayDialog(BuildContext context) {
final audio = context.read<PinballAudio>();
return showDialog<void>( return showDialog<void>(
context: context, context: context,
builder: (_) => HowToPlayDialog(), builder: (_) => HowToPlayDialog(),
); ).then((_) {
audio.startScreenSelect();
});
} }
class HowToPlayDialog extends StatefulWidget { class HowToPlayDialog extends StatefulWidget {

@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:pinball/how_to_play/how_to_play.dart'; import 'package:pinball/how_to_play/how_to_play.dart';
import 'package:pinball/l10n/l10n.dart'; import 'package:pinball/l10n/l10n.dart';
import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/select_character/select_character.dart';
import 'package:pinball_audio/pinball_audio.dart';
import 'package:pinball_theme/pinball_theme.dart'; import 'package:pinball_theme/pinball_theme.dart';
import 'package:pinball_ui/pinball_ui.dart'; import 'package:pinball_ui/pinball_ui.dart';

@ -16,6 +16,7 @@ class $AssetsSfxGen {
String get google => 'assets/sfx/google.mp3'; String get google => 'assets/sfx/google.mp3';
String get plim => 'assets/sfx/plim.mp3'; String get plim => 'assets/sfx/plim.mp3';
String get startScreenSelect => 'assets/sfx/start_screen_select.mp3';
} }
class Assets { class Assets {

@ -74,6 +74,7 @@ class PinballAudio {
await Future.wait([ await Future.wait([
_preCacheSingleAudio(_prefixFile(Assets.sfx.google)), _preCacheSingleAudio(_prefixFile(Assets.sfx.google)),
_preCacheSingleAudio(_prefixFile(Assets.sfx.startScreenSelect)),
_preCacheSingleAudio(_prefixFile(Assets.music.background)), _preCacheSingleAudio(_prefixFile(Assets.music.background)),
]); ]);
} }
@ -88,6 +89,11 @@ class PinballAudio {
_playSingleAudio(_prefixFile(Assets.sfx.google)); _playSingleAudio(_prefixFile(Assets.sfx.google));
} }
/// Plays the select screen sound effect
void startScreenSelect() {
_playSingleAudio(_prefixFile(Assets.sfx.startScreenSelect));
}
/// Plays the background music /// Plays the background music
void backgroundMusic() { void backgroundMusic() {
_loopSingleAudio(_prefixFile(Assets.music.background)); _loopSingleAudio(_prefixFile(Assets.music.background));

@ -93,6 +93,10 @@ void main() {
() => preCacheSingleAudio () => preCacheSingleAudio
.onCall('packages/pinball_audio/assets/sfx/google.mp3'), .onCall('packages/pinball_audio/assets/sfx/google.mp3'),
).called(1); ).called(1);
verify(
() => preCacheSingleAudio
.onCall('packages/pinball_audio/assets/sfx/start_screen_select.mp3'),
).called(1);
verify( verify(
() => preCacheSingleAudio () => preCacheSingleAudio
.onCall('packages/pinball_audio/assets/music/background.mp3'), .onCall('packages/pinball_audio/assets/music/background.mp3'),
@ -131,6 +135,18 @@ void main() {
}); });
}); });
group('startScreenSelect', () {
test('plays the correct file', () async {
await audio.load();
audio.startScreenSelect();
verify(
() => playSingleAudio
.onCall('packages/pinball_audio/${Assets.sfx.startScreenSelect}'),
).called(1);
});
});
group('backgroundMusic', () { group('backgroundMusic', () {
test('plays the correct file', () async { test('plays the correct file', () async {
await audio.load(); await audio.load();

@ -93,5 +93,30 @@ void main() {
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byType(HowToPlayDialog), findsNothing); expect(find.byType(HowToPlayDialog), findsNothing);
}); });
testWidgets(
'plays the start screen select music on dismiss',
(tester) async {
final audio = MockPinballAudio();
await tester.pumpApp(
Builder(
builder: (context) {
return TextButton(
onPressed: () => showHowToPlayDialog(context),
child: const Text('test'),
);
},
),
pinballAudio: audio,
);
expect(find.byType(HowToPlayDialog), findsNothing);
await tester.tap(find.text('test'));
await tester.pumpAndSettle();
await tester.tapAt(Offset.zero);
await tester.pumpAndSettle();
verify(audio.startScreenSelect).called(1);
},
);
}); });
} }

Loading…
Cancel
Save