diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index ae3094e1..0012b0f2 100644 --- a/lib/app/view/app.dart +++ b/lib/app/view/app.dart @@ -11,20 +11,24 @@ import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_ui/pinball_ui.dart'; +import 'package:share_repository/share_repository.dart'; class App extends StatelessWidget { const App({ Key? key, required AuthenticationRepository authenticationRepository, required LeaderboardRepository leaderboardRepository, + required ShareRepository shareRepository, required PinballPlayer pinballPlayer, }) : _authenticationRepository = authenticationRepository, _leaderboardRepository = leaderboardRepository, + _shareRepository = shareRepository, _pinballPlayer = pinballPlayer, super(key: key); final AuthenticationRepository _authenticationRepository; final LeaderboardRepository _leaderboardRepository; + final ShareRepository _shareRepository; final PinballPlayer _pinballPlayer; @override @@ -33,6 +37,7 @@ class App extends StatelessWidget { providers: [ RepositoryProvider.value(value: _authenticationRepository), RepositoryProvider.value(value: _leaderboardRepository), + RepositoryProvider.value(value: _shareRepository), RepositoryProvider.value(value: _pinballPlayer), ], child: MultiBlocProvider( diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 86eb29c8..158cae67 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -15,12 +15,14 @@ import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; +import 'package:share_repository/share_repository.dart'; class PinballGame extends PinballForge2DGame with HasKeyboardHandlerComponents, MultiTouchTapDetector, HasTappables { PinballGame({ required CharacterThemeCubit characterThemeBloc, required this.leaderboardRepository, + required this.shareRepository, required GameBloc gameBloc, required AppLocalizations l10n, required PinballPlayer player, @@ -49,6 +51,8 @@ class PinballGame extends PinballForge2DGame final LeaderboardRepository leaderboardRepository; + final ShareRepository shareRepository; + final AppLocalizations _l10n; final GameBloc _gameBloc; @@ -70,6 +74,7 @@ class PinballGame extends PinballForge2DGame providers: [ FlameProvider.value(_player), FlameProvider.value(leaderboardRepository), + FlameProvider.value(shareRepository), FlameProvider.value(_l10n), ], children: [ @@ -89,7 +94,10 @@ class PinballGame extends PinballForge2DGame children: [ BoardBackgroundSpriteComponent(), Boundaries(), - Backbox(leaderboardRepository: leaderboardRepository), + Backbox( + leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, + ), GoogleWord(position: Vector2(-4.45, 1.8)), Multipliers(), Multiballs(), @@ -170,6 +178,7 @@ class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { DebugPinballGame({ required CharacterThemeCubit characterThemeBloc, required LeaderboardRepository leaderboardRepository, + required ShareRepository shareRepository, required AppLocalizations l10n, required PinballPlayer player, required GameBloc gameBloc, @@ -177,6 +186,7 @@ class DebugPinballGame extends PinballGame with FPSCounter, PanDetector { characterThemeBloc: characterThemeBloc, player: player, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, l10n: l10n, gameBloc: gameBloc, ); diff --git a/lib/game/view/pinball_game_page.dart b/lib/game/view/pinball_game_page.dart index 354d61ed..739bc007 100644 --- a/lib/game/view/pinball_game_page.dart +++ b/lib/game/view/pinball_game_page.dart @@ -14,6 +14,7 @@ import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_ui/pinball_ui.dart'; +import 'package:share_repository/share_repository.dart'; class PinballGamePage extends StatelessWidget { const PinballGamePage({ @@ -34,12 +35,14 @@ class PinballGamePage extends StatelessWidget { final characterThemeBloc = context.read(); final player = context.read(); final leaderboardRepository = context.read(); + final shareRepository = context.read(); final gameBloc = context.read(); final game = isDebugMode ? DebugPinballGame( characterThemeBloc: characterThemeBloc, player: player, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, l10n: context.l10n, gameBloc: gameBloc, ) @@ -47,6 +50,7 @@ class PinballGamePage extends StatelessWidget { characterThemeBloc: characterThemeBloc, player: player, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, l10n: context.l10n, gameBloc: gameBloc, ); diff --git a/lib/main_development.dart b/lib/main_development.dart index 67d83b81..6c35ec02 100644 --- a/lib/main_development.dart +++ b/lib/main_development.dart @@ -6,10 +6,13 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/app/app.dart'; import 'package:pinball/bootstrap.dart'; import 'package:pinball_audio/pinball_audio.dart'; +import 'package:share_repository/share_repository.dart'; void main() { bootstrap((firestore, firebaseAuth) async { final leaderboardRepository = LeaderboardRepository(firestore); + const shareRepository = + ShareRepository(appUrl: ShareRepository.googleIOEvent); final authenticationRepository = AuthenticationRepository(firebaseAuth); final pinballPlayer = PinballPlayer(); unawaited( @@ -20,6 +23,7 @@ void main() { return App( authenticationRepository: authenticationRepository, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, pinballPlayer: pinballPlayer, ); }); diff --git a/lib/main_production.dart b/lib/main_production.dart index 67d83b81..6c35ec02 100644 --- a/lib/main_production.dart +++ b/lib/main_production.dart @@ -6,10 +6,13 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/app/app.dart'; import 'package:pinball/bootstrap.dart'; import 'package:pinball_audio/pinball_audio.dart'; +import 'package:share_repository/share_repository.dart'; void main() { bootstrap((firestore, firebaseAuth) async { final leaderboardRepository = LeaderboardRepository(firestore); + const shareRepository = + ShareRepository(appUrl: ShareRepository.googleIOEvent); final authenticationRepository = AuthenticationRepository(firebaseAuth); final pinballPlayer = PinballPlayer(); unawaited( @@ -20,6 +23,7 @@ void main() { return App( authenticationRepository: authenticationRepository, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, pinballPlayer: pinballPlayer, ); }); diff --git a/lib/main_staging.dart b/lib/main_staging.dart index 67d83b81..6c35ec02 100644 --- a/lib/main_staging.dart +++ b/lib/main_staging.dart @@ -6,10 +6,13 @@ import 'package:leaderboard_repository/leaderboard_repository.dart'; import 'package:pinball/app/app.dart'; import 'package:pinball/bootstrap.dart'; import 'package:pinball_audio/pinball_audio.dart'; +import 'package:share_repository/share_repository.dart'; void main() { bootstrap((firestore, firebaseAuth) async { final leaderboardRepository = LeaderboardRepository(firestore); + const shareRepository = + ShareRepository(appUrl: ShareRepository.googleIOEvent); final authenticationRepository = AuthenticationRepository(firebaseAuth); final pinballPlayer = PinballPlayer(); unawaited( @@ -20,6 +23,7 @@ void main() { return App( authenticationRepository: authenticationRepository, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, pinballPlayer: pinballPlayer, ); }); diff --git a/test/app/view/app_test.dart b/test/app/view/app_test.dart index 4f04a89d..60d7e1b4 100644 --- a/test/app/view/app_test.dart +++ b/test/app/view/app_test.dart @@ -5,6 +5,7 @@ import 'package:mocktail/mocktail.dart'; import 'package:pinball/app/app.dart'; import 'package:pinball/game/game.dart'; import 'package:pinball_audio/pinball_audio.dart'; +import 'package:share_repository/share_repository.dart'; class _MockAuthenticationRepository extends Mock implements AuthenticationRepository {} @@ -14,15 +15,19 @@ class _MockPinballPlayer extends Mock implements PinballPlayer {} class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { } +class _MockShareRepository extends Mock implements ShareRepository {} + void main() { group('App', () { late AuthenticationRepository authenticationRepository; late LeaderboardRepository leaderboardRepository; + late ShareRepository shareRepository; late PinballPlayer pinballPlayer; setUp(() { authenticationRepository = _MockAuthenticationRepository(); leaderboardRepository = _MockLeaderboardRepository(); + shareRepository = _MockShareRepository(); pinballPlayer = _MockPinballPlayer(); when(pinballPlayer.load).thenAnswer((_) => [Future.value()]); }); @@ -32,6 +37,7 @@ void main() { App( authenticationRepository: authenticationRepository, leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, pinballPlayer: pinballPlayer, ), ); diff --git a/test/game/components/game_bloc_status_listener_test.dart b/test/game/components/game_bloc_status_listener_test.dart index 767ddefa..29c43011 100644 --- a/test/game/components/game_bloc_status_listener_test.dart +++ b/test/game/components/game_bloc_status_listener_test.dart @@ -12,6 +12,7 @@ import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; import 'package:pinball_flame/pinball_flame.dart'; +import 'package:share_repository/share_repository.dart'; class _TestGame extends Forge2DGame { @override @@ -50,6 +51,8 @@ class _MockPinballPlayer extends Mock implements PinballPlayer {} class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { } +class _MockShareRepository extends Mock implements ShareRepository {} + void main() { TestWidgetsFlutterBinding.ensureInitialized(); @@ -96,8 +99,12 @@ void main() { 'changes the backbox display when the game is over', (game) async { final component = GameBlocStatusListener(); - final repository = _MockLeaderboardRepository(); - final backbox = Backbox(leaderboardRepository: repository); + final leaderboardRepository = _MockLeaderboardRepository(); + final shareRepository = _MockShareRepository(); + final backbox = Backbox( + leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, + ); final state = const GameState.initial() ..copyWith( status: GameStatus.gameOver, @@ -129,8 +136,12 @@ void main() { (game) async { final player = _MockPinballPlayer(); final component = GameBlocStatusListener(); - final repository = _MockLeaderboardRepository(); - final backbox = Backbox(leaderboardRepository: repository); + final leaderboardRepository = _MockLeaderboardRepository(); + final shareRepository = _MockShareRepository(); + final backbox = Backbox( + leaderboardRepository: leaderboardRepository, + shareRepository: shareRepository, + ); await game.pump([component, backbox], pinballPlayer: player); component.onNewState( diff --git a/test/game/pinball_game_test.dart b/test/game/pinball_game_test.dart index 3b034c8f..1bf8722f 100644 --- a/test/game/pinball_game_test.dart +++ b/test/game/pinball_game_test.dart @@ -16,12 +16,14 @@ import 'package:pinball/game/game.dart'; import 'package:pinball/select_character/select_character.dart'; import 'package:pinball_audio/src/pinball_audio.dart'; import 'package:pinball_components/pinball_components.dart'; +import 'package:share_repository/share_repository.dart'; class _TestPinballGame extends PinballGame { _TestPinballGame() : super( characterThemeBloc: CharacterThemeCubit(), leaderboardRepository: _MockLeaderboardRepository(), + shareRepository: _MockShareRepository(), gameBloc: GameBloc(), l10n: _MockAppLocalizations(), player: _MockPinballPlayer(), @@ -41,6 +43,7 @@ class _TestDebugPinballGame extends DebugPinballGame { : super( characterThemeBloc: CharacterThemeCubit(), leaderboardRepository: _MockLeaderboardRepository(), + shareRepository: _MockShareRepository(), gameBloc: GameBloc(), l10n: _MockAppLocalizations(), player: _MockPinballPlayer(), @@ -78,6 +81,8 @@ class _MockDragEndInfo extends Mock implements DragEndInfo {} class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { } +class _MockShareRepository extends Mock implements ShareRepository {} + class _MockPinballPlayer extends Mock implements PinballPlayer {} void main() { diff --git a/test/game/view/pinball_game_page_test.dart b/test/game/view/pinball_game_page_test.dart index 0e23e54d..badc3d04 100644 --- a/test/game/view/pinball_game_page_test.dart +++ b/test/game/view/pinball_game_page_test.dart @@ -16,6 +16,7 @@ import 'package:pinball/more_information/more_information.dart'; import 'package:pinball/select_character/select_character.dart'; import 'package:pinball/start_game/start_game.dart'; import 'package:pinball_audio/pinball_audio.dart'; +import 'package:share_repository/share_repository.dart'; import '../../helpers/helpers.dart'; @@ -24,6 +25,7 @@ class _TestPinballGame extends PinballGame { : super( characterThemeBloc: CharacterThemeCubit(), leaderboardRepository: _MockLeaderboardRepository(), + shareRepository: _MockShareRepository(), gameBloc: GameBloc(), l10n: _MockAppLocalizations(), player: _MockPinballPlayer(), @@ -54,6 +56,8 @@ class _MockPinballPlayer extends Mock implements PinballPlayer {} class _MockLeaderboardRepository extends Mock implements LeaderboardRepository { } +class _MockShareRepository extends Mock implements ShareRepository {} + void main() { final game = _TestPinballGame();