refactor: removed props from state for sharing only score

pull/359/head
RuiAlonso 3 years ago
parent 6308606c21
commit 7840485c7d

@ -80,15 +80,11 @@ class Backbox extends PositionComponent with ZIndex {
GameOverInfoDisplay(
onShare: () {
_bloc.add(
ShareScoreRequested(
score: state.score,
initials: state.initials,
character: state.character,
),
ShareScoreRequested(score: state.score),
);
},
onNavigate: () {
openLink(ShareRepository.openSourceUrl);
openLink(ShareRepository.googleIOEvent);
},
),
);

@ -51,9 +51,7 @@ class BackboxBloc extends Bloc<BackboxEvent, BackboxState> {
);
emit(
InitialsSuccessState(
initials: event.initials,
score: event.score,
character: event.character,
),
);
} catch (error, stackTrace) {
@ -68,9 +66,7 @@ class BackboxBloc extends Bloc<BackboxEvent, BackboxState> {
) async {
emit(
ShareState(
initials: event.initials,
score: event.score,
character: event.character,
),
);
}

@ -53,27 +53,19 @@ class PlayerInitialsSubmitted extends BackboxEvent {
}
/// {@template share_score_requested}
/// Event that request the user to share score and initials.
/// Event when user requests to share their score.
/// {@endtemplate}
class ShareScoreRequested extends BackboxEvent {
/// {@macro share_score_requested}
const ShareScoreRequested({
required this.score,
required this.initials,
required this.character,
});
/// Player's score.
final int score;
/// Player's initials.
final String initials;
/// Player's character.
final CharacterTheme character;
@override
List<Object?> get props => [score, initials, character];
List<Object?> get props => [score];
}
/// Event that triggers the fetching of the leaderboard

@ -55,27 +55,19 @@ class InitialsFormState extends BackboxState {
}
/// {@template initials_success_state}
/// State when the leaderboard was successfully loaded.
/// State when the score was successfully sended.
/// {@endtemplate}
class InitialsSuccessState extends BackboxState {
/// {@macro initials_success_state}
const InitialsSuccessState({
required this.score,
required this.initials,
required this.character,
}) : super();
/// Player's score.
final int score;
/// Player's initials.
final String initials;
/// Player's character.
final CharacterTheme character;
@override
List<Object?> get props => [score, initials, character];
List<Object?> get props => [score];
}
/// State when the initials submission failed.
@ -91,19 +83,11 @@ class ShareState extends BackboxState {
/// {@macro share_state}
const ShareState({
required this.score,
required this.initials,
required this.character,
}) : super();
/// Player's score.
final int score;
/// Player's initials.
final String initials;
/// Player's character.
final CharacterTheme character;
@override
List<Object?> get props => [score, initials, character];
List<Object?> get props => [score];
}

@ -140,7 +140,8 @@ class _TitleBackgroundSpriteComponent extends SpriteComponent with HasGameRef {
Future<void> onLoad() async {
await super.onLoad();
final sprite = Sprite(
gameRef.images.fromCache(Assets.images.backbox.button.share.keyName),
gameRef.images
.fromCache(Assets.images.backbox.displayTitleDecoration.keyName),
);
this.sprite = sprite;
size = sprite.originalSize / 22;

@ -100,7 +100,8 @@ extension PinballGameAssetsX on PinballGame {
images.load(components.Assets.images.sparky.bumper.c.dimmed.keyName),
images.load(components.Assets.images.backbox.marquee.keyName),
images.load(components.Assets.images.backbox.displayDivider.keyName),
images.load(components.Assets.images.backbox.button.share.keyName),
images.load(
components.Assets.images.backbox.displayTitleDecoration.keyName),
images.load(components.Assets.images.googleWord.letter1.lit.keyName),
images.load(components.Assets.images.googleWord.letter1.dimmed.keyName),
images.load(components.Assets.images.googleWord.letter2.lit.keyName),

@ -59,13 +59,14 @@ class $AssetsImagesAndroidGen {
class $AssetsImagesBackboxGen {
const $AssetsImagesBackboxGen();
$AssetsImagesBackboxButtonGen get button =>
const $AssetsImagesBackboxButtonGen();
/// File path: assets/images/backbox/display-divider.png
AssetGenImage get displayDivider =>
const AssetGenImage('assets/images/backbox/display-divider.png');
/// File path: assets/images/backbox/display_title_decoration.png
AssetGenImage get displayTitleDecoration =>
const AssetGenImage('assets/images/backbox/display_title_decoration.png');
/// File path: assets/images/backbox/marquee.png
AssetGenImage get marquee =>
const AssetGenImage('assets/images/backbox/marquee.png');
@ -385,14 +386,6 @@ class $AssetsImagesAndroidSpaceshipGen {
const AssetGenImage('assets/images/android/spaceship/saucer.png');
}
class $AssetsImagesBackboxButtonGen {
const $AssetsImagesBackboxButtonGen();
/// File path: assets/images/backbox/button/share.png
AssetGenImage get share =>
const AssetGenImage('assets/images/backbox/button/share.png');
}
class $AssetsImagesDashBumperGen {
const $AssetsImagesDashBumperGen();

@ -12,7 +12,8 @@ class ShareRepository {
final String _appUrl;
/// Url to the Github Open Source Pinball project.
static const openSourceUrl = 'https://github.com/VGVentures/pinball';
static const openSourceCode = 'https://github.com/VGVentures/pinball';
static const googleIOEvent = 'https://events.google.com/io/';
/// Returns a url to share the [value] on the given [platform].
///

@ -38,7 +38,7 @@ class _TestGame extends Forge2DGame
character.leaderboardIcon.keyName,
Assets.images.backbox.marquee.keyName,
Assets.images.backbox.displayDivider.keyName,
Assets.images.backbox.button.share.keyName,
Assets.images.backbox.displayTitleDecoration.keyName,
]);
}
@ -298,6 +298,56 @@ void main() {
},
);
flameTester.test(
'open Google IO Event url when navigating',
(game) async {
when(() => urlLauncher.canLaunch(any()))
.thenAnswer((_) async => true);
when(
() => urlLauncher.launch(
any(),
useSafariVC: any(named: 'useSafariVC'),
useWebView: any(named: 'useWebView'),
enableJavaScript: any(named: 'enableJavaScript'),
enableDomStorage: any(named: 'enableDomStorage'),
universalLinksOnly: any(named: 'universalLinksOnly'),
headers: any(named: 'headers'),
),
).thenAnswer((_) async => true);
final state = InitialsSuccessState(
score: 100,
initials: 'AAA',
character: theme.AndroidTheme(),
);
whenListen(
bloc,
Stream.value(state),
initialState: state,
);
final backbox = Backbox.test(bloc: bloc);
await game.pump(backbox);
final shareLink =
game.descendants().whereType<GoogleIOLinkComponent>().first;
shareLink.onTapDown(_MockTapDownInfo());
await game.ready();
verify(
() => urlLauncher.launch(
ShareRepository.googleIOEvent,
useSafariVC: any(named: 'useSafariVC'),
useWebView: any(named: 'useWebView'),
enableJavaScript: any(named: 'enableJavaScript'),
enableDomStorage: any(named: 'enableDomStorage'),
universalLinksOnly: any(named: 'universalLinksOnly'),
headers: any(named: 'headers'),
),
);
},
);
flameTester.test(
'open OpenSource url when navigating',
(game) async {
@ -336,7 +386,7 @@ void main() {
verify(
() => urlLauncher.launch(
ShareRepository.openSourceUrl,
ShareRepository.openSourceCode,
useSafariVC: any(named: 'useSafariVC'),
useWebView: any(named: 'useWebView'),
enableJavaScript: any(named: 'enableJavaScript'),

@ -56,11 +56,7 @@ void main() {
),
expect: () => [
LoadingState(),
InitialsSuccessState(
score: 10,
initials: 'AAA',
character: DashTheme(),
),
InitialsSuccessState(score: 10),
],
);
@ -101,18 +97,10 @@ void main() {
},
build: () => BackboxBloc(leaderboardRepository: leaderboardRepository),
act: (bloc) => bloc.add(
ShareScoreRequested(
score: 100,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 100),
),
expect: () => [
ShareState(
score: 100,
initials: 'AAA',
character: AndroidTheme(),
),
ShareState(score: 100),
],
);
});

@ -126,78 +126,42 @@ void main() {
group('ScoreShareRequested', () {
test('can be instantiated', () {
expect(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
isNotNull,
);
});
test('supports value comparison', () {
expect(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
equals(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
),
);
expect(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
isNot(
equals(
ShareScoreRequested(
score: 1,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 1),
),
),
);
expect(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
isNot(
equals(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: SparkyTheme(),
),
ShareScoreRequested(score: 0),
),
),
);
expect(
ShareScoreRequested(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
isNot(
equals(
ShareScoreRequested(
score: 0,
initials: 'BBB',
character: AndroidTheme(),
),
ShareScoreRequested(score: 0),
),
),
);

@ -116,28 +116,16 @@ void main() {
group('InitialsSuccessState', () {
test('can be instantiated', () {
expect(
InitialsSuccessState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
InitialsSuccessState(score: 0),
isNotNull,
);
});
test('supports value comparison', () {
expect(
InitialsSuccessState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
InitialsSuccessState(score: 0),
equals(
InitialsSuccessState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
InitialsSuccessState(score: 0),
),
);
});
@ -155,28 +143,16 @@ void main() {
group('ShareState', () {
test('can be instantiated', () {
expect(
ShareState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareState(score: 0),
isNotNull,
);
});
test('supports value comparison', () {
expect(
ShareState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareState(score: 0),
equals(
ShareState(
score: 0,
initials: 'AAA',
character: AndroidTheme(),
),
ShareState(score: 0),
),
);
});

@ -20,7 +20,7 @@ class _TestGame extends Forge2DGame with HasTappables {
images.prefix = '';
await images.loadAll(
[
Assets.images.backbox.button.share.keyName,
Assets.images.backbox.displayTitleDecoration.keyName,
],
);
}

Loading…
Cancel
Save