feat: update PinballGamePage

pull/206/head
arturplaczek 3 years ago
parent 5732a999fb
commit a94fb6767c

@ -43,10 +43,9 @@ class PinballGamePage extends StatelessWidget {
final loadables = [
...game.preLoadAssets(),
pinballAudio.load(),
...BonusAnimation.loadAssets(),
];
BonusAnimation.loadAssets();
return MultiBlocProvider(
providers: [
BlocProvider(create: (_) => StartGameBloc(game: game)),
@ -115,6 +114,11 @@ class PinballGameLoadedView extends StatelessWidget {
@override
Widget build(BuildContext context) {
final leftMargin = MediaQuery.of(context).size.width * 0.3;
final isPlaying = context.select(
(StartGameBloc bloc) => bloc.state.status == StartGameStatus.play,
);
return Stack(
children: [
Positioned.fill(
@ -133,10 +137,13 @@ class PinballGameLoadedView extends StatelessWidget {
},
),
),
const Positioned(
top: 8,
left: 8,
child: GameHud(),
Positioned(
top: 16,
left: leftMargin,
child: Visibility(
visible: isPlaying,
child: const GameHud(),
),
),
],
);

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:pinball/game/game.dart';
import 'package:pinball/select_character/select_character.dart';
import 'package:pinball/start_game/start_game.dart';
import '../../helpers/helpers.dart';
@ -79,6 +80,7 @@ void main() {
'renders PinballGameLoadedView after resources have been loaded',
(tester) async {
final assetsManagerCubit = MockAssetsManagerCubit();
final startGameBloc = MockStartGameBloc();
final loadedAssetsState = AssetsManagerState(
loadables: [Future<void>.value()],
@ -89,6 +91,11 @@ void main() {
Stream.value(loadedAssetsState),
initialState: loadedAssetsState,
);
whenListen(
startGameBloc,
Stream.value(StartGameState.initial()),
initialState: StartGameState.initial(),
);
await tester.pumpApp(
PinballGameView(
@ -97,6 +104,7 @@ void main() {
assetsManagerCubit: assetsManagerCubit,
characterThemeCubit: characterThemeCubit,
gameBloc: gameBloc,
startGameBloc: startGameBloc,
);
await tester.pump();
@ -160,27 +168,59 @@ void main() {
});
group('PinballGameView', () {
final gameBloc = MockGameBloc();
final startGameBloc = MockStartGameBloc();
setUp(() async {
await Future.wait<void>(game.preLoadAssets());
});
testWidgets('renders game and a hud', (tester) async {
final gameBloc = MockGameBloc();
whenListen(
gameBloc,
Stream.value(const GameState.initial()),
initialState: const GameState.initial(),
);
whenListen(
startGameBloc,
Stream.value(StartGameState.initial()),
initialState: StartGameState.initial(),
);
});
testWidgets('renders game', (tester) async {
await tester.pumpApp(
PinballGameView(game: game),
gameBloc: gameBloc,
startGameBloc: startGameBloc,
);
expect(
find.byWidgetPredicate((w) => w is GameWidget<PinballGame>),
findsOneWidget,
);
expect(
find.byType(GameHud),
findsNothing,
);
});
testWidgets('renders a hud on play state', (tester) async {
final startGameState = StartGameState.initial().copyWith(
status: StartGameStatus.play,
);
whenListen(
startGameBloc,
Stream.value(startGameState),
initialState: startGameState,
);
await tester.pumpApp(
PinballGameView(game: game),
gameBloc: gameBloc,
startGameBloc: startGameBloc,
);
expect(
find.byType(GameHud),
findsOneWidget,

Loading…
Cancel
Save