├── .firebaserc ├── .github ├── CODEOWNERS ├── PULL_REQUEST_TEMPLATE.md ├── cspell.json ├── dependabot.yaml └── workflows │ ├── authentication_repository.yaml │ ├── deploy_app_dev.yaml │ ├── leaderboard_repository.yaml │ └── main.yaml ├── .gitignore ├── .idea └── runConfigurations │ ├── development.xml │ ├── main_dart.xml │ ├── production.xml │ └── staging.xml ├── .metadata ├── .vscode ├── extensions.json └── launch.json ├── LICENSE ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── io │ │ │ │ └── flutter │ │ │ │ └── app │ │ │ │ └── FlutterMultiDexApplication.java │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── verygoodventures │ │ │ │ └── super_dash │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ └── ic_launcher.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher_foreground.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher_foreground.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher_foreground.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher_foreground.png │ │ │ └── launcher_icon.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher_foreground.png │ │ │ └── launcher_icon.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── android_icon.png ├── assets ├── images │ ├── auto_run_instruction.png │ ├── avoid_bugs_instruction.png │ ├── collect_eggs_acorns_instruction.png │ ├── dash_wins.png │ ├── game_background.png │ ├── game_logo.png │ ├── game_over_bg.png │ ├── gate.png │ ├── instructions_background.png │ ├── intro_background_desktop.png │ ├── intro_background_mobile.png │ ├── leaderboard_bg.png │ ├── portalInstruction.png │ ├── powerful_wings_instruction.png │ ├── tap_to_jump_instruction.png │ ├── tap_to_jump_spacebar.png │ └── trophy.png ├── map │ ├── .gitignore │ ├── anim │ │ ├── spritesheet_dash_deathDrown.png │ │ ├── spritesheet_dash_deathDrown.tsx │ │ ├── spritesheet_dash_deathFaint.png │ │ ├── spritesheet_dash_deathFaint.tsx │ │ ├── spritesheet_dash_deathPit.png │ │ ├── spritesheet_dash_deathPit.tsx │ │ ├── spritesheet_dash_edgeGrab.png │ │ ├── spritesheet_dash_edgeGrab.tsx │ │ ├── spritesheet_dash_flap.png │ │ ├── spritesheet_dash_flap.tsx │ │ ├── spritesheet_dash_idle.png │ │ ├── spritesheet_dash_idle.tsx │ │ ├── spritesheet_dash_jump.png │ │ ├── spritesheet_dash_jump.tsx │ │ ├── spritesheet_dash_run.png │ │ ├── spritesheet_dash_run.tsx │ │ ├── spritesheet_dash_slide.png │ │ ├── spritesheet_dash_slide.tsx │ │ ├── spritesheet_enemy_ant.png │ │ ├── spritesheet_enemy_ant.tsx │ │ ├── spritesheet_enemy_bee.png │ │ ├── spritesheet_enemy_bee.tsx │ │ ├── spritesheet_enemy_beetle.png │ │ ├── spritesheet_enemy_beetle.tsx │ │ ├── spritesheet_enemy_butterfly.png │ │ ├── spritesheet_enemy_butterfly.tsx │ │ ├── spritesheet_enemy_dragonfly.png │ │ ├── spritesheet_enemy_grasshopper.png │ │ ├── spritesheet_enemy_grasshopper.tsx │ │ ├── spritesheet_fx_large.png │ │ ├── spritesheet_fx_large.tsx │ │ ├── spritesheet_fx_small.png │ │ ├── spritesheet_fx_small.tsx │ │ ├── spritesheet_item_egg.png │ │ ├── spritesheet_item_egg.tsx │ │ ├── spritesheet_item_feather.png │ │ ├── spritesheet_item_feather.tsx │ │ ├── spritesheet_phoenixDash_doublejump.png │ │ ├── spritesheet_phoenixDash_doublejump.tsx │ │ ├── spritesheet_phoenixDash_idle.png │ │ ├── spritesheet_phoenixDash_idle.tsx │ │ ├── spritesheet_phoenixDash_jump.png │ │ ├── spritesheet_phoenixDash_jump.tsx │ │ ├── spritesheet_phoenixDash_run.png │ │ ├── spritesheet_phoenixDash_run.tsx │ │ ├── spritesheet_poof.png │ │ ├── spritesheet_poof.tsx │ │ ├── spritesheet_poof_orange.png │ │ └── spritesheet_poof_orange.tsx │ ├── flutter_runnergame_map_A.tmx │ ├── flutter_runnergame_map_B.tmx │ ├── flutter_runnergame_map_C.tmx │ ├── objects │ │ ├── tile_enemies_v2.png │ │ ├── tile_enemies_v2.tsx │ │ ├── tile_forest_trees_back_v02.png │ │ ├── tile_forest_trees_back_v02.tsx │ │ ├── tile_forest_trees_front_v02.png │ │ ├── tile_forest_trees_front_v02.tsx │ │ ├── tile_gate_lvl5.png │ │ ├── tile_gate_lvl5.tsx │ │ ├── tile_gate_lvl7.png │ │ ├── tile_gate_lvl7.tsx │ │ ├── tile_items_v2.png │ │ ├── tile_items_v2.tsx │ │ ├── tile_mountain_tree_v01.png │ │ ├── tile_mountain_tree_v01.tsx │ │ ├── tile_plains_mountains_B.png │ │ ├── tile_plains_mountains_B.tsx │ │ ├── tile_plains_mountains_v01.png │ │ └── tile_plains_mountains_v01.tsx │ └── tiles │ │ ├── tile_atmos_forest_1.png │ │ ├── tile_atmos_forest_1.tsx │ │ ├── tile_atmos_forest_2.png │ │ ├── tile_atmos_forest_2.tsx │ │ ├── tile_atmos_forest_3.png │ │ ├── tile_atmos_forest_3.tsx │ │ ├── tile_clouds_BG.png │ │ ├── tile_clouds_BG.tsx │ │ ├── tile_clouds_v02.png │ │ ├── tile_clouds_v02.tsx │ │ ├── tile_decorations_v01.png │ │ ├── tile_decorations_v01.tsx │ │ ├── tile_forest_bushes_v02.png │ │ ├── tile_forest_bushes_v02.tsx │ │ ├── tile_forest_bushes_v03.png │ │ ├── tile_forest_bushes_v03.tsx │ │ ├── tile_forest_ground_v02.png │ │ ├── tile_forest_ground_v02.tsx │ │ ├── tile_forest_ground_v03.png │ │ ├── tile_forest_ground_v03.tsx │ │ ├── tile_forest_ground_v04.png │ │ ├── tile_forest_ground_v04.tsx │ │ ├── tile_gate_v2.png │ │ ├── tile_gate_v2.tsx │ │ ├── tile_ground_transition_v02.png │ │ ├── tile_ground_transition_v02.tsx │ │ ├── tile_mountain_ground_v02.png │ │ ├── tile_mountain_ground_v02.tsx │ │ ├── tile_mountain_ground_v03.png │ │ ├── tile_mountain_ground_v03.tsx │ │ ├── tile_mountain_mountains_v01.png │ │ ├── tile_mountain_mountains_v01.tsx │ │ ├── tile_mountain_stars_v01.png │ │ ├── tile_mountain_stars_v01.tsx │ │ ├── tile_plains_ground_v02.png │ │ ├── tile_plains_ground_v02.tsx │ │ ├── tile_plains_ground_v03.png │ │ ├── tile_plains_ground_v03.tsx │ │ ├── tile_plains_hills_v01.png │ │ ├── tile_plains_hills_v01.tsx │ │ ├── tile_plains_hills_v02.png │ │ ├── tile_plains_hills_v02.tsx │ │ ├── tile_sky_v02.png │ │ ├── tile_sky_v02.tsx │ │ ├── tile_treehouse.png │ │ └── tile_treehouse.tsx ├── music │ └── FlutterGame_SunshineAndDewdrops_1_1.mp3 └── sfx │ ├── Dash_AcornPickup.mp3 │ ├── Dash_EggPickup.mp3 │ ├── Dash_FeatherPowerup.mp3 │ ├── Dash_Footstep_Run.mp3 │ ├── Dash_Jump.mp3 │ ├── Phoenix_DOUBLEJump.wav │ └── Phoenix_Jump.wav ├── coverage_badge.svg ├── firebase.json ├── functions ├── .gitignore ├── index.js ├── package-lock.json └── package.json ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ ├── Contents.json │ │ ├── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── README.md │ │ │ └── intro_background_mobile.png │ │ ├── icon_no_transparency.png.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon_no_transparency.png-1024x1024@1x.png │ │ │ ├── icon_no_transparency.png-20x20@1x.png │ │ │ ├── icon_no_transparency.png-20x20@2x.png │ │ │ ├── icon_no_transparency.png-20x20@3x.png │ │ │ ├── icon_no_transparency.png-29x29@1x.png │ │ │ ├── icon_no_transparency.png-29x29@2x.png │ │ │ ├── icon_no_transparency.png-29x29@3x.png │ │ │ ├── icon_no_transparency.png-40x40@1x.png │ │ │ ├── icon_no_transparency.png-40x40@2x.png │ │ │ ├── icon_no_transparency.png-40x40@3x.png │ │ │ ├── icon_no_transparency.png-50x50@1x.png │ │ │ ├── icon_no_transparency.png-50x50@2x.png │ │ │ ├── icon_no_transparency.png-57x57@1x.png │ │ │ ├── icon_no_transparency.png-57x57@2x.png │ │ │ ├── icon_no_transparency.png-60x60@2x.png │ │ │ ├── icon_no_transparency.png-60x60@3x.png │ │ │ ├── icon_no_transparency.png-72x72@1x.png │ │ │ ├── icon_no_transparency.png-72x72@2x.png │ │ │ ├── icon_no_transparency.png-76x76@1x.png │ │ │ ├── icon_no_transparency.png-76x76@2x.png │ │ │ └── icon_no_transparency.png-83.5x83.5@2x.png │ │ └── ios_icon.png.appiconset │ │ │ ├── Contents.json │ │ │ ├── ios_icon.png-1024x1024@1x.png │ │ │ ├── ios_icon.png-20x20@1x.png │ │ │ ├── ios_icon.png-20x20@2x.png │ │ │ ├── ios_icon.png-20x20@3x.png │ │ │ ├── ios_icon.png-29x29@1x.png │ │ │ ├── ios_icon.png-29x29@2x.png │ │ │ ├── ios_icon.png-29x29@3x.png │ │ │ ├── ios_icon.png-40x40@1x.png │ │ │ ├── ios_icon.png-40x40@2x.png │ │ │ ├── ios_icon.png-40x40@3x.png │ │ │ ├── ios_icon.png-50x50@1x.png │ │ │ ├── ios_icon.png-50x50@2x.png │ │ │ ├── ios_icon.png-57x57@1x.png │ │ │ ├── ios_icon.png-57x57@2x.png │ │ │ ├── ios_icon.png-60x60@2x.png │ │ │ ├── ios_icon.png-60x60@3x.png │ │ │ ├── ios_icon.png-72x72@1x.png │ │ │ ├── ios_icon.png-72x72@2x.png │ │ │ ├── ios_icon.png-76x76@1x.png │ │ │ ├── ios_icon.png-76x76@2x.png │ │ │ └── ios_icon.png-83.5x83.5@2x.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h └── RunnerTests │ └── RunnerTests.swift ├── ios_icon.png ├── l10n.yaml ├── lib ├── app │ ├── app.dart │ └── view │ │ └── app.dart ├── app_lifecycle │ └── app_lifecycle.dart ├── audio │ ├── audio.dart │ └── songs.dart ├── bootstrap.dart ├── constants │ ├── constants.dart │ └── urls.dart ├── filesytem_asset_bundle │ └── filesystem_asset_bundle.dart ├── firebase_options_dev.dart ├── firebase_options_prod.dart ├── game │ ├── behaviors │ │ ├── behaviors.dart │ │ ├── follow_path_behavior.dart │ │ ├── player_controller_behavior.dart │ │ └── player_state_behavior.dart │ ├── bloc │ │ ├── game_bloc.dart │ │ ├── game_event.dart │ │ └── game_state.dart │ ├── components │ │ ├── camera_debugger.dart │ │ ├── components.dart │ │ ├── item_effect.dart │ │ ├── object_group_proximity_spawner.dart │ │ ├── player_camera_anchor.dart │ │ ├── tree_sign.dart │ │ └── treehouse_front.dart │ ├── entities │ │ ├── enemy.dart │ │ ├── entities.dart │ │ ├── item.dart │ │ └── player.dart │ ├── game.dart │ ├── super_dash_game.dart │ ├── view │ │ ├── game_view.dart │ │ └── view.dart │ └── widgets │ │ ├── game_background.dart │ │ ├── score_label.dart │ │ ├── tap_to_jump_overlay.dart │ │ └── widgets.dart ├── game_intro │ ├── game_instructions │ │ ├── cubit │ │ │ ├── game_instructions_cubit.dart │ │ │ └── game_instructions_state.dart │ │ ├── game_instructions.dart │ │ ├── view │ │ │ ├── game_instructions_overlay.dart │ │ │ └── view.dart │ │ └── widgets │ │ │ ├── game_instructions_navigation_controls.dart │ │ │ └── widgets.dart │ ├── game_intro.dart │ ├── view │ │ ├── game_info_dialog.dart │ │ ├── game_intro_page.dart │ │ └── view.dart │ └── widgets │ │ ├── bottom_bar.dart │ │ ├── game_intro_buttons.dart │ │ └── widgets.dart ├── gen │ └── assets.gen.dart ├── l10n │ ├── arb │ │ └── app_en.arb │ └── l10n.dart ├── leaderboard │ ├── bloc │ │ ├── leaderboard_bloc.dart │ │ ├── leaderboard_event.dart │ │ └── leaderboard_state.dart │ ├── leaderboard.dart │ └── view │ │ ├── leaderboard_page.dart │ │ └── view.dart ├── main_dev.dart ├── main_prod.dart ├── main_tester.dart ├── map_tester │ ├── map_tester.dart │ └── view │ │ ├── atlases_view.dart │ │ ├── map_tester_view.dart │ │ └── view.dart ├── score │ ├── bloc │ │ ├── score_bloc.dart │ │ ├── score_event.dart │ │ └── score_state.dart │ ├── game_over │ │ ├── game_over.dart │ │ └── view │ │ │ ├── game_over_page.dart │ │ │ └── view.dart │ ├── input_initials │ │ ├── formatters │ │ │ └── formatters.dart │ │ ├── input_initials.dart │ │ └── view │ │ │ ├── initials_form_view.dart │ │ │ ├── input_initials_page.dart │ │ │ └── view.dart │ ├── routes │ │ └── routes.dart │ ├── score.dart │ ├── score_overview │ │ ├── score_overview.dart │ │ ├── view │ │ │ ├── score_overview_page.dart │ │ │ └── view.dart │ │ └── widgets │ │ │ ├── buttons.dart │ │ │ └── widgets.dart │ └── view │ │ ├── score_page.dart │ │ └── view.dart ├── settings │ ├── persistence │ │ ├── local_storage_settings_persistence.dart │ │ ├── memory_settings_persistence.dart │ │ ├── persistence.dart │ │ └── settings_persistence.dart │ ├── settings.dart │ └── settings_controller.dart ├── share │ └── share.dart └── utils │ └── utils.dart ├── macos ├── .gitignore ├── Flutter │ ├── Flutter-Debug.xcconfig │ ├── Flutter-Release.xcconfig │ └── GeneratedPluginRegistrant.swift ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── app_icon_1024.png │ │ │ ├── app_icon_128.png │ │ │ ├── app_icon_16.png │ │ │ ├── app_icon_256.png │ │ │ ├── app_icon_32.png │ │ │ ├── app_icon_512.png │ │ │ └── app_icon_64.png │ ├── Base.lproj │ │ └── MainMenu.xib │ ├── Configs │ │ ├── AppInfo.xcconfig │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── Warnings.xcconfig │ ├── DebugProfile.entitlements │ ├── Info.plist │ ├── MainFlutterWindow.swift │ └── Release.entitlements └── RunnerTests │ └── RunnerTests.swift ├── packages ├── app_ui │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ └── fonts │ │ │ ├── GoogleSansText-Bold.ttf │ │ │ └── GoogleSansText-Regular.ttf │ ├── coverage_badge.svg │ ├── lib │ │ ├── app_ui.dart │ │ └── src │ │ │ ├── layout │ │ │ ├── breakpoints.dart │ │ │ ├── context.dart │ │ │ ├── layout.dart │ │ │ ├── page_with_background.dart │ │ │ └── responsive_layout.dart │ │ │ ├── routes │ │ │ ├── hero_dialog_route.dart │ │ │ └── routes.dart │ │ │ ├── theme │ │ │ ├── app_text_styles.dart │ │ │ └── theme.dart │ │ │ └── widgets │ │ │ ├── app_card.dart │ │ │ ├── app_dialog.dart │ │ │ ├── game_elevated_button.dart │ │ │ ├── game_icon_button.dart │ │ │ ├── traslucent_background.dart │ │ │ └── widgets.dart │ └── pubspec.yaml ├── authentication_repository │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── coverage_badge.svg │ ├── lib │ │ ├── authentication_repository.dart │ │ └── src │ │ │ ├── authentication_repository.dart │ │ │ └── models │ │ │ ├── models.dart │ │ │ └── user.dart │ ├── pubspec.yaml │ └── test │ │ └── src │ │ ├── authentication_repository_test.dart │ │ └── models │ │ └── user_test.dart └── leaderboard_repository │ ├── .gitignore │ ├── README.md │ ├── analysis_options.yaml │ ├── coverage_badge.svg │ ├── lib │ ├── leaderboard_repository.dart │ └── src │ │ ├── leaderboard_repository.dart │ │ └── models │ │ ├── exceptions.dart │ │ ├── leaderboard_entry_data.dart │ │ ├── leaderboard_entry_data.g.dart │ │ └── models.dart │ ├── pubspec.yaml │ └── test │ └── src │ ├── leaderboard_repository_test.dart │ └── models │ └── leaderboard_entry_data_test.dart ├── pubspec.yaml ├── test ├── app │ └── view │ │ └── app_test.dart ├── audio │ ├── audio_controller_test.dart │ └── songs_test.dart ├── filesystem_asset_bundle │ └── filesystem_asset_bundle_test.dart ├── game │ ├── behaviors │ │ └── follow_path_behavior_test.dart │ ├── bloc │ │ ├── game_bloc_test.dart │ │ └── game_state_test.dart │ ├── components │ │ ├── camera_debugger_test.dart │ │ └── object_group_proximity_spawner_test.dart │ ├── dash_run_game_test.dart │ ├── entities │ │ └── player_test.dart │ └── view │ │ └── game_view_test.dart ├── game_intro │ └── game_instructions │ │ ├── cubit │ │ └── game_instructions_cubit_test.dart │ │ └── view │ │ └── game_instructions_overlay_test.dart ├── helpers │ ├── helpers.dart │ ├── pump_app.dart │ └── view_size.dart ├── leaderboard │ ├── bloc │ │ ├── leaderboard_bloc_test.dart │ │ └── leaderboard_event_test.dart │ └── view │ │ └── leaderboard_page_test.dart ├── map_tester │ └── view │ │ └── map_tester_view_test.dart └── settings │ ├── persistence │ ├── local_storage_settings_persistence_test.dart │ └── memory_only_settings_persistence_test.dart │ └── settings_controller_test.dart ├── tilesets_source └── map │ ├── .gitignore │ ├── objects │ ├── tile_enemies_v2.png │ ├── tile_forest_trees_back_v02.png │ ├── tile_forest_trees_front_v02.png │ ├── tile_gate_lvl5.png │ ├── tile_gate_lvl7.png │ ├── tile_items_v2.png │ ├── tile_mountain_tree_v01.png │ ├── tile_plains_mountains_B.png │ └── tile_plains_mountains_v01.png │ └── tiles │ ├── tile_atmos_forest_1.png │ ├── tile_atmos_forest_2.png │ ├── tile_atmos_forest_3.png │ ├── tile_clouds_BG.png │ ├── tile_clouds_v02.png │ ├── tile_decorations_v01.png │ ├── tile_forest_bushes_v02.png │ ├── tile_forest_bushes_v03.png │ ├── tile_forest_ground_v02.png │ ├── tile_forest_ground_v03.png │ ├── tile_forest_ground_v04.png │ ├── tile_gate_v2.png │ ├── tile_ground_transition_v02.png │ ├── tile_mountain_ground_v02.png │ ├── tile_mountain_ground_v03.png │ ├── tile_mountain_mountains_v01.png │ ├── tile_mountain_stars_v01.png │ ├── tile_plains_ground_v02.png │ ├── tile_plains_ground_v03.png │ ├── tile_plains_hills_v01.png │ ├── tile_plains_hills_v02.png │ ├── tile_sky_v02.png │ └── tile_treehouse.png └── web ├── background.svg ├── favicon.png ├── icons ├── Icon-192.png ├── Icon-512.png ├── Icon-maskable-192.png ├── Icon-maskable-512.png └── favicon.png ├── index.html ├── logo.html └── manifest.json /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "dash-run-dev" 4 | }, 5 | "targets": { 6 | "dash-run-dev": { 7 | "hosting": { 8 | "app_dev": [ 9 | "endless-runner-9481713-383737" 10 | ] 11 | } 12 | }, 13 | "super-dash-game": { 14 | "hosting": { 15 | "app_prod": [ 16 | "super-dash-game" 17 | ] 18 | } 19 | } 20 | }, 21 | "etags": {} 22 | } 23 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Every request must be reviewed and accepted by: 2 | 3 | * @marcossevilla @erickzanardo @jsgalarraga 4 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ## Description 10 | 11 | 12 | 13 | ## Type of Change 14 | 15 | 16 | 17 | - [ ] ✨ New feature (non-breaking change which adds functionality) 18 | - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) 19 | - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) 20 | - [ ] 🧹 Code refactor 21 | - [ ] ✅ Build configuration change 22 | - [ ] 📝 Documentation 23 | - [ ] 🗑️ Chore 24 | -------------------------------------------------------------------------------- /.github/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2", 3 | "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json", 4 | "dictionaries": ["vgv_allowed", "vgv_forbidden"], 5 | "dictionaryDefinitions": [ 6 | { 7 | "name": "vgv_allowed", 8 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/allowed.txt", 9 | "description": "Allowed VGV Spellings" 10 | }, 11 | { 12 | "name": "vgv_forbidden", 13 | "path": "https://raw.githubusercontent.com/verygoodopensource/very_good_dictionaries/main/forbidden.txt", 14 | "description": "Forbidden VGV Spellings" 15 | } 16 | ], 17 | "useGitignore": true, 18 | "words": [ 19 | "Contador", 20 | "localizable", 21 | "mostrado", 22 | "página", 23 | "Texto", 24 | "Platformer", 25 | "Leaderboard" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | - package-ecosystem: "pub" 8 | directory: "/" 9 | schedule: 10 | interval: "daily" 11 | -------------------------------------------------------------------------------- /.github/workflows/authentication_repository.yaml: -------------------------------------------------------------------------------- 1 | name: authentication_repository 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/authentication_repository/**" 11 | - ".github/workflows/authentication_repository.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/authentication_repository/**" 16 | - ".github/workflows/authentication_repository.yaml" 17 | 18 | jobs: 19 | semantic_pull_request: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 21 | 22 | spell-check: 23 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 24 | with: 25 | includes: "**/*.md" 26 | modified_files_only: false 27 | 28 | build: 29 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 30 | with: 31 | flutter_channel: stable 32 | working_directory: packages/authentication_repository 33 | -------------------------------------------------------------------------------- /.github/workflows/deploy_app_dev.yaml: -------------------------------------------------------------------------------- 1 | name: deploy_app_dev 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy-dev: 10 | runs-on: ubuntu-latest 11 | name: Deploy App Development 12 | steps: 13 | - uses: actions/checkout@v4 14 | - uses: subosito/flutter-action@v2 15 | with: 16 | channel: "stable" 17 | - run: flutter packages get 18 | - run: flutter build web --web-renderer canvaskit -t lib/main_dev.dart 19 | 20 | - uses: FirebaseExtended/action-hosting-deploy@v0 21 | with: 22 | repoToken: "${{ secrets.GITHUB_TOKEN }}" 23 | firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_DEV }}" 24 | projectId: dash-run-dev 25 | target: app_dev 26 | expires: 30d 27 | channelId: live 28 | -------------------------------------------------------------------------------- /.github/workflows/leaderboard_repository.yaml: -------------------------------------------------------------------------------- 1 | name: leaderboard_repository 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | paths: 10 | - "packages/leaderboard_repository/**" 11 | - ".github/workflows/leaderboard_repository.yaml" 12 | 13 | pull_request: 14 | paths: 15 | - "packages/leaderboard_repository/**" 16 | - ".github/workflows/leaderboard_repository.yaml" 17 | 18 | jobs: 19 | semantic_pull_request: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 21 | 22 | spell-check: 23 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 24 | with: 25 | includes: "**/*.md" 26 | modified_files_only: false 27 | 28 | build: 29 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 30 | with: 31 | flutter_channel: stable 32 | working_directory: packages/leaderboard_repository 33 | -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: dash_run 2 | 3 | concurrency: 4 | group: $-$ 5 | cancel-in-progress: true 6 | 7 | on: 8 | push: 9 | branches: 10 | - main 11 | pull_request: 12 | branches: 13 | - main 14 | 15 | jobs: 16 | semantic-pull-request: 17 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1 18 | 19 | build: 20 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/flutter_package.yml@v1 21 | with: 22 | flutter_channel: stable 23 | min_coverage: 29 24 | 25 | spell-check: 26 | uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/spell_check.yml@v1 27 | with: 28 | includes: | 29 | **/*.md 30 | modified_files_only: false 31 | -------------------------------------------------------------------------------- /.idea/runConfigurations/development.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/runConfigurations/production.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/runConfigurations/staging.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: "d211f42860350d914a5ad8102f9ec32764dc6d06" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 17 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 18 | - platform: android 19 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 20 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 21 | - platform: ios 22 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 23 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 24 | - platform: macos 25 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 26 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 27 | - platform: web 28 | create_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 29 | base_revision: d211f42860350d914a5ad8102f9ec32764dc6d06 30 | 31 | # User provided section 32 | 33 | # List of Local paths (relative to this file) that should be 34 | # ignored by the migrate tool. 35 | # 36 | # Files that are not part of the templates will be ignored by default. 37 | unmanaged_files: 38 | - 'lib/main.dart' 39 | - 'ios/Runner.xcodeproj/project.pbxproj' 40 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dart-code.dart-code", 6 | "dart-code.flutter", 7 | "felixangelov.bloc" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Launch game", 9 | "request": "launch", 10 | "type": "dart", 11 | "program": "lib/main_dev.dart", 12 | }, 13 | { 14 | "name": "Launch game tester", 15 | "request": "launch", 16 | "type": "dart", 17 | "program": "lib/main_tester.dart", 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2023 The Flutter Authors. All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without modification, 4 | are permitted provided that the following conditions are met: 5 | 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above 9 | copyright notice, this list of conditions and the following 10 | disclaimer in the documentation and/or other materials provided 11 | with the distribution. 12 | * Neither the name of Google Inc. nor the names of its 13 | contributors may be used to endorse or promote products derived 14 | from this software without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 20 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 23 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.5.0.0.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | analyzer: 6 | exclude: 7 | - lib/firebase_options_dev.dart 8 | - lib/firebase_options_prod.dart 9 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/java/io/flutter/app/FlutterMultiDexApplication.java: -------------------------------------------------------------------------------- 1 | // Generated file. 2 | // 3 | // If you wish to remove Flutter's multidex support, delete this entire file. 4 | // 5 | // Modifications to this file should be done in a copy under a different name 6 | // as this file may be regenerated. 7 | 8 | package io.flutter.app; 9 | 10 | import android.app.Application; 11 | import android.content.Context; 12 | import androidx.annotation.CallSuper; 13 | import androidx.multidex.MultiDex; 14 | 15 | /** 16 | * Extension of {@link android.app.Application}, adding multidex support. 17 | */ 18 | public class FlutterMultiDexApplication extends Application { 19 | @Override 20 | @CallSuper 21 | protected void attachBaseContext(Context base) { 22 | super.attachBaseContext(base); 23 | MultiDex.install(this); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/verygoodventures/super_dash/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.verygoodventures.super_dash 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.3.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | tasks.register("clean", Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | } 9 | settings.ext.flutterSdkPath = flutterSdkPath() 10 | 11 | includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") 12 | 13 | plugins { 14 | id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false 15 | } 16 | } 17 | 18 | include ":app" 19 | 20 | apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle" 21 | -------------------------------------------------------------------------------- /android_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/android_icon.png -------------------------------------------------------------------------------- /assets/images/auto_run_instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/auto_run_instruction.png -------------------------------------------------------------------------------- /assets/images/avoid_bugs_instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/avoid_bugs_instruction.png -------------------------------------------------------------------------------- /assets/images/collect_eggs_acorns_instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/collect_eggs_acorns_instruction.png -------------------------------------------------------------------------------- /assets/images/dash_wins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/dash_wins.png -------------------------------------------------------------------------------- /assets/images/game_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/game_background.png -------------------------------------------------------------------------------- /assets/images/game_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/game_logo.png -------------------------------------------------------------------------------- /assets/images/game_over_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/game_over_bg.png -------------------------------------------------------------------------------- /assets/images/gate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/gate.png -------------------------------------------------------------------------------- /assets/images/instructions_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/instructions_background.png -------------------------------------------------------------------------------- /assets/images/intro_background_desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/intro_background_desktop.png -------------------------------------------------------------------------------- /assets/images/intro_background_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/intro_background_mobile.png -------------------------------------------------------------------------------- /assets/images/leaderboard_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/leaderboard_bg.png -------------------------------------------------------------------------------- /assets/images/portalInstruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/portalInstruction.png -------------------------------------------------------------------------------- /assets/images/powerful_wings_instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/powerful_wings_instruction.png -------------------------------------------------------------------------------- /assets/images/tap_to_jump_instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/tap_to_jump_instruction.png -------------------------------------------------------------------------------- /assets/images/tap_to_jump_spacebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/tap_to_jump_spacebar.png -------------------------------------------------------------------------------- /assets/images/trophy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/images/trophy.png -------------------------------------------------------------------------------- /assets/map/.gitignore: -------------------------------------------------------------------------------- 1 | *.tiled-project 2 | *.tiled-session 3 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_deathDrown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_deathDrown.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_deathFaint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_deathFaint.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_deathFaint.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_deathPit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_deathPit.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_deathPit.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_edgeGrab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_edgeGrab.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_edgeGrab.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_flap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_flap.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_flap.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_idle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_idle.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_idle.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_jump.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_jump.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_run.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_run.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_slide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_dash_slide.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_dash_slide.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_ant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_ant.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_ant.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_bee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_bee.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_bee.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_beetle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_beetle.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_beetle.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_butterfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_butterfly.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_butterfly.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_dragonfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_dragonfly.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_grasshopper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_enemy_grasshopper.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_enemy_grasshopper.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_fx_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_fx_large.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_fx_large.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_fx_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_fx_small.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_fx_small.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_item_egg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_item_egg.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_item_feather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_item_feather.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_item_feather.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_doublejump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_phoenixDash_doublejump.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_doublejump.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_idle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_phoenixDash_idle.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_idle.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_phoenixDash_jump.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_jump.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_phoenixDash_run.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_phoenixDash_run.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_poof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_poof.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_poof.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_poof_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/anim/spritesheet_poof_orange.png -------------------------------------------------------------------------------- /assets/map/anim/spritesheet_poof_orange.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /assets/map/objects/tile_enemies_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_enemies_v2.png -------------------------------------------------------------------------------- /assets/map/objects/tile_enemies_v2.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_forest_trees_back_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_forest_trees_back_v02.png -------------------------------------------------------------------------------- /assets/map/objects/tile_forest_trees_back_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_forest_trees_front_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_forest_trees_front_v02.png -------------------------------------------------------------------------------- /assets/map/objects/tile_forest_trees_front_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_gate_lvl5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_gate_lvl5.png -------------------------------------------------------------------------------- /assets/map/objects/tile_gate_lvl5.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_gate_lvl7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_gate_lvl7.png -------------------------------------------------------------------------------- /assets/map/objects/tile_gate_lvl7.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_items_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_items_v2.png -------------------------------------------------------------------------------- /assets/map/objects/tile_items_v2.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_mountain_tree_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_mountain_tree_v01.png -------------------------------------------------------------------------------- /assets/map/objects/tile_mountain_tree_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_plains_mountains_B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_plains_mountains_B.png -------------------------------------------------------------------------------- /assets/map/objects/tile_plains_mountains_B.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/objects/tile_plains_mountains_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/objects/tile_plains_mountains_v01.png -------------------------------------------------------------------------------- /assets/map/objects/tile_plains_mountains_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_atmos_forest_1.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_1.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_atmos_forest_2.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_2.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_atmos_forest_3.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_atmos_forest_3.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_clouds_BG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_clouds_BG.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_clouds_BG.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_clouds_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_clouds_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_decorations_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_decorations_v01.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_decorations_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_bushes_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_forest_bushes_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_bushes_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_bushes_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_forest_bushes_v03.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_bushes_v03.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_forest_ground_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_forest_ground_v03.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_ground_v03.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_forest_ground_v04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_forest_ground_v04.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_gate_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_gate_v2.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_gate_v2.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_ground_transition_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_ground_transition_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_ground_transition_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_mountain_ground_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_mountain_ground_v03.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_mountains_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_mountain_mountains_v01.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_mountains_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_stars_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_mountain_stars_v01.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_mountain_stars_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_plains_ground_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_plains_ground_v03.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_hills_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_plains_hills_v01.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_hills_v01.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_hills_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_plains_hills_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_plains_hills_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_sky_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_sky_v02.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_sky_v02.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/map/tiles/tile_treehouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/map/tiles/tile_treehouse.png -------------------------------------------------------------------------------- /assets/map/tiles/tile_treehouse.tsx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /assets/music/FlutterGame_SunshineAndDewdrops_1_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/music/FlutterGame_SunshineAndDewdrops_1_1.mp3 -------------------------------------------------------------------------------- /assets/sfx/Dash_AcornPickup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Dash_AcornPickup.mp3 -------------------------------------------------------------------------------- /assets/sfx/Dash_EggPickup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Dash_EggPickup.mp3 -------------------------------------------------------------------------------- /assets/sfx/Dash_FeatherPowerup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Dash_FeatherPowerup.mp3 -------------------------------------------------------------------------------- /assets/sfx/Dash_Footstep_Run.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Dash_Footstep_Run.mp3 -------------------------------------------------------------------------------- /assets/sfx/Dash_Jump.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Dash_Jump.mp3 -------------------------------------------------------------------------------- /assets/sfx/Phoenix_DOUBLEJump.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Phoenix_DOUBLEJump.wav -------------------------------------------------------------------------------- /assets/sfx/Phoenix_Jump.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/assets/sfx/Phoenix_Jump.wav -------------------------------------------------------------------------------- /coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | -------------------------------------------------------------------------------- /functions/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /functions/index.js: -------------------------------------------------------------------------------- 1 | const functions = require("firebase-functions"); 2 | const admin = require("firebase-admin"); 3 | admin.initializeApp(); 4 | 5 | const db = admin.firestore(); 6 | 7 | exports.timedLeaderboardCleanup = functions.firestore 8 | .document("leaderboard/{leaderboardEntry}") 9 | .onCreate(async (_, __) => { 10 | functions.logger.info( 11 | "Document created, getting all leaderboard documents" 12 | ); 13 | const snapshot = await db 14 | .collection("leaderboard") 15 | .orderBy("score", "desc") 16 | .offset(10) 17 | .get(); 18 | 19 | functions.logger.info( 20 | `Preparing to delete ${snapshot.docs.length} documents.` 21 | ); 22 | try { 23 | await Promise.all(snapshot.docs.map((doc) => doc.ref.delete())); 24 | functions.logger.info("Success"); 25 | } catch (error) { 26 | functions.logger.error(`Failed to delete documents ${error}`); 27 | } 28 | }); -------------------------------------------------------------------------------- /functions/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "scripts": { 5 | "serve": "firebase emulators:start --only functions", 6 | "shell": "firebase functions:shell", 7 | "start": "npm run shell", 8 | "deploy": "firebase deploy --only functions", 9 | "logs": "firebase functions:log" 10 | }, 11 | "engines": { 12 | "node": "16" 13 | }, 14 | "main": "index.js", 15 | "dependencies": { 16 | "firebase-admin": "^10.0.2", 17 | "firebase-functions": "^3.18.0" 18 | }, 19 | "devDependencies": { 20 | "firebase-functions-test": "^0.2.0" 21 | }, 22 | "private": true 23 | } -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "intro_background_mobile.png", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "light" 12 | } 13 | ], 14 | "idiom" : "universal" 15 | }, 16 | { 17 | "appearances" : [ 18 | { 19 | "appearance" : "luminosity", 20 | "value" : "dark" 21 | } 22 | ], 23 | "idiom" : "universal" 24 | } 25 | ], 26 | "info" : { 27 | "author" : "xcode", 28 | "version" : 1 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/intro_background_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/LaunchImage.imageset/intro_background_mobile.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/icon_no_transparency.png.appiconset/icon_no_transparency.png-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-50x50@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-50x50@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-57x57@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-57x57@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-72x72@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-72x72@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios/Runner/Assets.xcassets/ios_icon.png.appiconset/ios_icon.png-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleDisplayName 10 | Super Dash 11 | CFBundleExecutable 12 | $(EXECUTABLE_NAME) 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | super_dash 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | $(FLUTTER_BUILD_NAME) 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | $(FLUTTER_BUILD_NUMBER) 27 | LSRequiresIPhoneOS 28 | 29 | UIApplicationSupportsIndirectInputEvents 30 | 31 | UILaunchStoryboardName 32 | LaunchScreen 33 | UIMainStoryboardFile 34 | Main 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ios_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/ios_icon.png -------------------------------------------------------------------------------- /l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n/arb 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | nullable-getter: false 5 | -------------------------------------------------------------------------------- /lib/app/app.dart: -------------------------------------------------------------------------------- 1 | export 'view/app.dart'; 2 | -------------------------------------------------------------------------------- /lib/audio/songs.dart: -------------------------------------------------------------------------------- 1 | // Copyright 2022, the Flutter project authors. Please see the AUTHORS file 2 | // for details. All rights reserved. Use of this source code is governed by a 3 | // BSD-style license that can be found in the LICENSE file. 4 | 5 | const Set songs = { 6 | // Filenames with whitespace break package:audioplayers on iOS 7 | // (as of February 2022), so we use no whitespace. 8 | Song( 9 | 'FlutterGame_SunshineAndDewdrops_1_1.mp3', 10 | 'Sunshin and Dewdrops', 11 | artist: 'Flutter Game', 12 | ), 13 | }; 14 | 15 | class Song { 16 | const Song(this.filename, this.name, {this.artist}); 17 | 18 | final String filename; 19 | 20 | final String name; 21 | 22 | final String? artist; 23 | 24 | @override 25 | String toString() => 'Song<$filename>'; 26 | } 27 | -------------------------------------------------------------------------------- /lib/bootstrap.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:developer'; 3 | 4 | import 'package:bloc/bloc.dart'; 5 | import 'package:firebase_auth/firebase_auth.dart'; 6 | import 'package:flutter/widgets.dart'; 7 | 8 | class AppBlocObserver extends BlocObserver { 9 | const AppBlocObserver(); 10 | 11 | @override 12 | void onChange(BlocBase bloc, Change change) { 13 | super.onChange(bloc, change); 14 | log('onChange(${bloc.runtimeType}, $change)'); 15 | } 16 | 17 | @override 18 | void onError(BlocBase bloc, Object error, StackTrace stackTrace) { 19 | log('onError(${bloc.runtimeType}, $error, $stackTrace)'); 20 | super.onError(bloc, error, stackTrace); 21 | } 22 | } 23 | 24 | typedef BootstrapBuilder = FutureOr Function( 25 | FirebaseAuth firebaseAuth, 26 | ); 27 | 28 | Future bootstrap(BootstrapBuilder builder) async { 29 | FlutterError.onError = (details) { 30 | log(details.exceptionAsString(), stackTrace: details.stack); 31 | }; 32 | 33 | Bloc.observer = const AppBlocObserver(); 34 | 35 | // Add cross-flavor configuration here 36 | 37 | runApp( 38 | await builder( 39 | FirebaseAuth.instance, 40 | ), 41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /lib/constants/constants.dart: -------------------------------------------------------------------------------- 1 | export 'urls.dart'; 2 | -------------------------------------------------------------------------------- /lib/constants/urls.dart: -------------------------------------------------------------------------------- 1 | class Urls { 2 | static const String githubRepo = 'https://github.com/flutter/super_dash'; 3 | 4 | static const String flutterGames = 'https://flutter.dev/games'; 5 | 6 | static const String privacyPolicy = 'https://policies.google.com/privacy'; 7 | 8 | static const String termsOfService = 'https://policies.google.com/terms'; 9 | 10 | static const String howWeBuilt = 11 | 'https://medium.com/flutter/how-we-built-the-new-super-dash-demo-in-flutter-and-flame-in-just-six-weeks-9c7aa2a5ad31'; 12 | 13 | static const appStoreLink = 14 | 'https://apps.apple.com/app/super-dash-flutter-game/id6473050393'; 15 | 16 | static const playStoreLink = 17 | 'https://play.google.com/store/apps/details?id=com.verygoodventures.super_dash'; 18 | } 19 | -------------------------------------------------------------------------------- /lib/filesytem_asset_bundle/filesystem_asset_bundle.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'dart:typed_data'; 3 | 4 | import 'package:flutter/material.dart'; 5 | import 'package:path/path.dart' as path; 6 | 7 | class FileSystemAssetBundle extends AssetBundle { 8 | FileSystemAssetBundle(this.rootPath); 9 | 10 | final String rootPath; 11 | 12 | @override 13 | Future load(String key) async { 14 | final filePath = path.join(rootPath, key); 15 | 16 | final file = File(filePath); 17 | 18 | return file.readAsBytesSync().buffer.asByteData(); 19 | } 20 | 21 | @override 22 | Future loadStructuredData( 23 | String key, 24 | Future Function(String value) parser, 25 | ) { 26 | return loadString(key).then(parser); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/game/behaviors/behaviors.dart: -------------------------------------------------------------------------------- 1 | export 'follow_path_behavior.dart'; 2 | export 'player_controller_behavior.dart'; 3 | export 'player_state_behavior.dart'; 4 | -------------------------------------------------------------------------------- /lib/game/bloc/game_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part 'game_event.dart'; 5 | part 'game_state.dart'; 6 | 7 | class GameBloc extends Bloc { 8 | GameBloc() : super(const GameState.initial()) { 9 | on(_onGameScoreIncreased); 10 | on(_onGameScoreDecreased); 11 | on(_onGameOver); 12 | on(_onGameSectionCompleted); 13 | } 14 | 15 | void _onGameScoreIncreased( 16 | GameScoreIncreased event, 17 | Emitter emit, 18 | ) { 19 | emit( 20 | state.copyWith( 21 | score: state.score + event.by, 22 | ), 23 | ); 24 | } 25 | 26 | void _onGameScoreDecreased( 27 | GameScoreDecreased event, 28 | Emitter emit, 29 | ) { 30 | emit( 31 | state.copyWith( 32 | score: state.score - event.by, 33 | ), 34 | ); 35 | } 36 | 37 | void _onGameOver( 38 | GameOver event, 39 | Emitter emit, 40 | ) { 41 | emit(const GameState.initial()); 42 | } 43 | 44 | void _onGameSectionCompleted( 45 | GameSectionCompleted event, 46 | Emitter emit, 47 | ) { 48 | if (state.currentSection < event.sectionCount - 1) { 49 | emit( 50 | state.copyWith( 51 | currentSection: state.currentSection + 1, 52 | ), 53 | ); 54 | } else { 55 | emit( 56 | state.copyWith( 57 | currentSection: 0, 58 | currentLevel: state.currentLevel + 1, 59 | ), 60 | ); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/game/bloc/game_event.dart: -------------------------------------------------------------------------------- 1 | part of 'game_bloc.dart'; 2 | 3 | abstract class GameEvent extends Equatable { 4 | const GameEvent(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class GameScoreIncreased extends GameEvent { 11 | const GameScoreIncreased({this.by = 1}); 12 | 13 | final int by; 14 | 15 | @override 16 | List get props => [by]; 17 | } 18 | 19 | final class GameScoreDecreased extends GameEvent { 20 | const GameScoreDecreased({this.by = 1}); 21 | 22 | final int by; 23 | 24 | @override 25 | List get props => [by]; 26 | } 27 | 28 | final class GameOver extends GameEvent { 29 | const GameOver(); 30 | } 31 | 32 | final class GameSectionCompleted extends GameEvent { 33 | const GameSectionCompleted({required this.sectionCount}); 34 | 35 | final int sectionCount; 36 | 37 | @override 38 | List get props => [sectionCount]; 39 | } 40 | -------------------------------------------------------------------------------- /lib/game/bloc/game_state.dart: -------------------------------------------------------------------------------- 1 | part of 'game_bloc.dart'; 2 | 3 | class GameState extends Equatable { 4 | const GameState({ 5 | required this.score, 6 | required this.currentLevel, 7 | required this.currentSection, 8 | }); 9 | 10 | const GameState.initial() 11 | : score = 0, 12 | currentLevel = 1, 13 | currentSection = 0; 14 | 15 | final int score; 16 | final int currentLevel; 17 | final int currentSection; 18 | 19 | GameState copyWith({ 20 | int? score, 21 | int? currentLevel, 22 | int? currentSection, 23 | }) { 24 | return GameState( 25 | score: score ?? this.score, 26 | currentLevel: currentLevel ?? this.currentLevel, 27 | currentSection: currentSection ?? this.currentSection, 28 | ); 29 | } 30 | 31 | @override 32 | List get props => [score, currentLevel, currentSection]; 33 | } 34 | -------------------------------------------------------------------------------- /lib/game/components/components.dart: -------------------------------------------------------------------------------- 1 | export 'camera_debugger.dart'; 2 | export 'item_effect.dart'; 3 | export 'object_group_proximity_spawner.dart'; 4 | export 'player_camera_anchor.dart'; 5 | export 'tree_sign.dart'; 6 | export 'treehouse_front.dart'; 7 | -------------------------------------------------------------------------------- /lib/game/components/tree_sign.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:ui'; 3 | 4 | import 'package:flame/components.dart'; 5 | import 'package:flame/text.dart'; 6 | import 'package:super_dash/game/super_dash_game.dart'; 7 | 8 | class TreeSign extends TextComponent with HasGameRef { 9 | TreeSign({ 10 | super.position, 11 | }) : super( 12 | textRenderer: TextPaint( 13 | style: const TextStyle( 14 | color: Color(0xffffffff), 15 | fontSize: 24, 16 | fontFamily: 'Google Sans', 17 | ), 18 | ), 19 | ); 20 | 21 | @override 22 | FutureOr onLoad() async { 23 | await super.onLoad(); 24 | 25 | final currentLevel = gameRef.state.currentLevel; 26 | text = 'DAY $currentLevel'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /lib/game/components/treehouse_front.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flame/components.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:super_dash/game/super_dash_game.dart'; 6 | 7 | typedef TreeHouseFrontRender = void Function( 8 | Canvas canvas, 9 | CameraComponent camera, 10 | ); 11 | 12 | class TreeHouseFront extends PositionComponent with HasGameRef { 13 | TreeHouseFront({ 14 | required this.renderFront, 15 | }) : super(priority: 1000, position: Vector2(0, 0)); 16 | 17 | final TreeHouseFrontRender renderFront; 18 | 19 | @override 20 | void render(Canvas canvas) { 21 | super.render(canvas); 22 | 23 | renderFront(canvas, gameRef.camera); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /lib/game/entities/entities.dart: -------------------------------------------------------------------------------- 1 | export 'enemy.dart'; 2 | export 'item.dart'; 3 | export 'player.dart'; 4 | -------------------------------------------------------------------------------- /lib/game/game.dart: -------------------------------------------------------------------------------- 1 | export 'behaviors/behaviors.dart'; 2 | export 'bloc/game_bloc.dart'; 3 | export 'components/components.dart'; 4 | export 'entities/entities.dart'; 5 | export 'super_dash_game.dart'; 6 | export 'view/view.dart'; 7 | export 'widgets/widgets.dart'; 8 | -------------------------------------------------------------------------------- /lib/game/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'game_view.dart'; 2 | -------------------------------------------------------------------------------- /lib/game/widgets/game_background.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:super_dash/gen/assets.gen.dart'; 3 | 4 | class GameBackground extends StatelessWidget { 5 | const GameBackground({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return SizedBox.expand( 10 | child: Assets.images.gameBackground.image( 11 | fit: BoxFit.cover, 12 | ), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/game/widgets/score_label.dart: -------------------------------------------------------------------------------- 1 | import 'package:app_ui/app_ui.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_bloc/flutter_bloc.dart'; 4 | import 'package:super_dash/game/bloc/game_bloc.dart'; 5 | import 'package:super_dash/gen/assets.gen.dart'; 6 | import 'package:super_dash/l10n/l10n.dart'; 7 | 8 | class ScoreLabel extends StatelessWidget { 9 | const ScoreLabel({super.key}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | final l10n = context.l10n; 14 | final textTheme = Theme.of(context).textTheme; 15 | final score = context.select( 16 | (GameBloc bloc) => bloc.state.score, 17 | ); 18 | 19 | return SafeArea( 20 | child: TraslucentBackground( 21 | shape: BoxShape.rectangle, 22 | borderRadius: BorderRadius.circular(30), 23 | border: Border.all( 24 | color: Colors.white, 25 | ), 26 | gradient: const [ 27 | Color(0xFFEAFFFE), 28 | Color(0xFFC9D9F1), 29 | ], 30 | child: Padding( 31 | padding: const EdgeInsets.all(10), 32 | child: Row( 33 | children: [ 34 | Assets.images.trophy.image( 35 | width: 40, 36 | height: 40, 37 | ), 38 | const SizedBox(width: 10), 39 | Text( 40 | l10n.gameScoreLabel(score), 41 | style: textTheme.titleLarge?.copyWith( 42 | color: const Color(0xFF4D5B92), 43 | ), 44 | ), 45 | ], 46 | ), 47 | ), 48 | ), 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /lib/game/widgets/tap_to_jump_overlay.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:super_dash/l10n/l10n.dart'; 3 | 4 | class TapToJumpOverlay extends StatelessWidget { 5 | const TapToJumpOverlay({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | final l10n = context.l10n; 10 | final textTheme = Theme.of(context).textTheme; 11 | 12 | return SafeArea( 13 | child: Center( 14 | child: Container( 15 | decoration: BoxDecoration( 16 | borderRadius: BorderRadius.circular(30), 17 | border: Border.all( 18 | color: const Color.fromARGB(81, 177, 177, 177), 19 | ), 20 | color: const Color(0xE51B1B36), 21 | ), 22 | child: Padding( 23 | padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), 24 | child: Text( 25 | l10n.tapToStart, 26 | style: textTheme.titleLarge?.copyWith( 27 | color: Colors.white, 28 | ), 29 | ), 30 | ), 31 | ), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/game/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'game_background.dart'; 2 | export 'score_label.dart'; 3 | export 'tap_to_jump_overlay.dart'; 4 | -------------------------------------------------------------------------------- /lib/game_intro/game_instructions/cubit/game_instructions_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part 'game_instructions_state.dart'; 5 | 6 | class GameInstructionsCubit extends Cubit { 7 | GameInstructionsCubit() 8 | : super( 9 | const GameInstructionsState( 10 | GameInstructionsStep.autoRun, 11 | ), 12 | ); 13 | 14 | void updateStep(int index) { 15 | final step = GameInstructionsStep.values.elementAt(index); 16 | emit(GameInstructionsState(step)); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/game_intro/game_instructions/cubit/game_instructions_state.dart: -------------------------------------------------------------------------------- 1 | part of 'game_instructions_cubit.dart'; 2 | 3 | enum GameInstructionsStep { 4 | autoRun, 5 | tapToJump, 6 | collectEggsAndAcorns, 7 | powerfulWings, 8 | levelGates, 9 | avoidBugs, 10 | } 11 | 12 | class GameInstructionsState extends Equatable { 13 | const GameInstructionsState(this.currentStep); 14 | 15 | final GameInstructionsStep currentStep; 16 | 17 | @override 18 | List get props => [currentStep]; 19 | } 20 | -------------------------------------------------------------------------------- /lib/game_intro/game_instructions/game_instructions.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/game_instructions_cubit.dart'; 2 | export 'view/view.dart'; 3 | export 'widgets/widgets.dart'; 4 | -------------------------------------------------------------------------------- /lib/game_intro/game_instructions/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'game_instructions_overlay.dart'; 2 | -------------------------------------------------------------------------------- /lib/game_intro/game_instructions/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'game_instructions_navigation_controls.dart'; 2 | -------------------------------------------------------------------------------- /lib/game_intro/game_intro.dart: -------------------------------------------------------------------------------- 1 | export 'game_instructions/game_instructions.dart'; 2 | export 'view/view.dart'; 3 | export 'widgets/widgets.dart'; 4 | -------------------------------------------------------------------------------- /lib/game_intro/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'game_info_dialog.dart'; 2 | export 'game_intro_page.dart'; 3 | -------------------------------------------------------------------------------- /lib/game_intro/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'bottom_bar.dart'; 2 | export 'game_intro_buttons.dart'; 3 | -------------------------------------------------------------------------------- /lib/l10n/l10n.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter_gen/gen_l10n/app_localizations.dart'; 3 | 4 | export 'package:flutter_gen/gen_l10n/app_localizations.dart'; 5 | 6 | extension AppLocalizationsX on BuildContext { 7 | AppLocalizations get l10n => AppLocalizations.of(this); 8 | } 9 | -------------------------------------------------------------------------------- /lib/leaderboard/bloc/leaderboard_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | import 'package:leaderboard_repository/leaderboard_repository.dart'; 4 | 5 | part 'leaderboard_event.dart'; 6 | part 'leaderboard_state.dart'; 7 | 8 | class LeaderboardBloc extends Bloc { 9 | LeaderboardBloc({ 10 | required LeaderboardRepository leaderboardRepository, 11 | }) : _leaderboardRepository = leaderboardRepository, 12 | super(const LeaderboardInitial()) { 13 | on(_onLeaderboardRequested); 14 | } 15 | 16 | final LeaderboardRepository _leaderboardRepository; 17 | 18 | Future _onLeaderboardRequested( 19 | LeaderboardTop10Requested event, 20 | Emitter emit, 21 | ) async { 22 | try { 23 | emit(const LeaderboardLoading()); 24 | final leaderboard = await _leaderboardRepository.fetchTop10Leaderboard(); 25 | emit(LeaderboardLoaded(entries: leaderboard)); 26 | } catch (e) { 27 | emit(const LeaderboardError()); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/leaderboard/bloc/leaderboard_event.dart: -------------------------------------------------------------------------------- 1 | part of 'leaderboard_bloc.dart'; 2 | 3 | sealed class LeaderboardEvent extends Equatable { 4 | const LeaderboardEvent(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | class LeaderboardTop10Requested extends LeaderboardEvent { 11 | const LeaderboardTop10Requested(); 12 | } 13 | -------------------------------------------------------------------------------- /lib/leaderboard/bloc/leaderboard_state.dart: -------------------------------------------------------------------------------- 1 | part of 'leaderboard_bloc.dart'; 2 | 3 | sealed class LeaderboardState extends Equatable { 4 | const LeaderboardState(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class LeaderboardInitial extends LeaderboardState { 11 | const LeaderboardInitial(); 12 | } 13 | 14 | final class LeaderboardLoading extends LeaderboardState { 15 | const LeaderboardLoading(); 16 | } 17 | 18 | final class LeaderboardLoaded extends LeaderboardState { 19 | const LeaderboardLoaded({required this.entries}); 20 | 21 | final List entries; 22 | 23 | @override 24 | List get props => [entries]; 25 | } 26 | 27 | final class LeaderboardError extends LeaderboardState { 28 | const LeaderboardError(); 29 | } 30 | -------------------------------------------------------------------------------- /lib/leaderboard/leaderboard.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/leaderboard_bloc.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /lib/leaderboard/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'leaderboard_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/map_tester/map_tester.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /lib/map_tester/view/atlases_view.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart' hide Image; 4 | 5 | class AtlasesView extends StatelessWidget { 6 | const AtlasesView({ 7 | required this.atlases, 8 | super.key, 9 | }); 10 | 11 | final List<(String, Image)> atlases; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Dialog( 16 | child: ColoredBox( 17 | color: Colors.white, 18 | child: SingleChildScrollView( 19 | child: Column( 20 | children: [ 21 | for (final atlas in atlases) ...[ 22 | Text( 23 | atlas.$1, 24 | style: const TextStyle(color: Colors.black), 25 | ), 26 | RawImage(image: atlas.$2), 27 | const SizedBox(height: 16), 28 | ], 29 | ], 30 | ), 31 | ), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/map_tester/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'atlases_view.dart'; 2 | export 'map_tester_view.dart'; 3 | -------------------------------------------------------------------------------- /lib/score/bloc/score_event.dart: -------------------------------------------------------------------------------- 1 | part of 'score_bloc.dart'; 2 | 3 | sealed class ScoreEvent extends Equatable { 4 | const ScoreEvent(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class ScoreSubmitted extends ScoreEvent { 11 | const ScoreSubmitted(); 12 | } 13 | 14 | final class ScoreInitialsUpdated extends ScoreEvent { 15 | const ScoreInitialsUpdated({required this.character, required this.index}); 16 | 17 | final String character; 18 | 19 | final int index; 20 | } 21 | 22 | final class ScoreInitialsSubmitted extends ScoreEvent { 23 | const ScoreInitialsSubmitted(); 24 | } 25 | 26 | final class ScoreLeaderboardRequested extends ScoreEvent { 27 | const ScoreLeaderboardRequested(); 28 | } 29 | -------------------------------------------------------------------------------- /lib/score/bloc/score_state.dart: -------------------------------------------------------------------------------- 1 | part of 'score_bloc.dart'; 2 | 3 | enum ScoreStatus { 4 | gameOver, 5 | inputInitials, 6 | scoreOverview, 7 | leaderboard, 8 | } 9 | 10 | enum InitialsFormStatus { 11 | initial, 12 | loading, 13 | success, 14 | invalid, 15 | failure, 16 | blacklisted, 17 | } 18 | 19 | class ScoreState extends Equatable { 20 | const ScoreState({ 21 | this.status = ScoreStatus.gameOver, 22 | this.initials = const ['', '', ''], 23 | this.initialsStatus = InitialsFormStatus.initial, 24 | }); 25 | 26 | final ScoreStatus status; 27 | final List initials; 28 | final InitialsFormStatus initialsStatus; 29 | 30 | ScoreState copyWith({ 31 | ScoreStatus? status, 32 | List? initials, 33 | InitialsFormStatus? initialsStatus, 34 | }) { 35 | return ScoreState( 36 | status: status ?? this.status, 37 | initials: initials ?? this.initials, 38 | initialsStatus: initialsStatus ?? this.initialsStatus, 39 | ); 40 | } 41 | 42 | @override 43 | List get props => [status, initials, initialsStatus]; 44 | } 45 | -------------------------------------------------------------------------------- /lib/score/game_over/game_over.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /lib/score/game_over/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'game_over_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/score/input_initials/input_initials.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | -------------------------------------------------------------------------------- /lib/score/input_initials/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'initials_form_view.dart'; 2 | export 'input_initials_page.dart'; 3 | -------------------------------------------------------------------------------- /lib/score/routes/routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:super_dash/leaderboard/leaderboard.dart'; 3 | import 'package:super_dash/score/game_over/game_over.dart'; 4 | import 'package:super_dash/score/score.dart'; 5 | 6 | List> onGenerateScorePages( 7 | ScoreState state, 8 | List> pages, 9 | ) { 10 | return switch (state.status) { 11 | ScoreStatus.gameOver => [GameOverPage.page()], 12 | ScoreStatus.inputInitials => [InputInitialsPage.page()], 13 | ScoreStatus.scoreOverview => [ScoreOverviewPage.page()], 14 | ScoreStatus.leaderboard => [LeaderboardPage.page()], 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /lib/score/score.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/score_bloc.dart'; 2 | export 'input_initials/input_initials.dart'; 3 | export 'routes/routes.dart'; 4 | export 'score_overview/score_overview.dart'; 5 | export 'view/view.dart'; 6 | -------------------------------------------------------------------------------- /lib/score/score_overview/score_overview.dart: -------------------------------------------------------------------------------- 1 | export 'view/view.dart'; 2 | export 'widgets/widgets.dart'; 3 | -------------------------------------------------------------------------------- /lib/score/score_overview/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'score_overview_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/score/score_overview/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'buttons.dart'; 2 | -------------------------------------------------------------------------------- /lib/score/view/score_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flow_builder/flow_builder.dart'; 2 | import 'package:flutter/widgets.dart'; 3 | import 'package:flutter_bloc/flutter_bloc.dart'; 4 | import 'package:leaderboard_repository/leaderboard_repository.dart'; 5 | import 'package:super_dash/score/bloc/score_bloc.dart'; 6 | import 'package:super_dash/score/routes/routes.dart'; 7 | 8 | class ScorePage extends StatelessWidget { 9 | const ScorePage({ 10 | required this.score, 11 | super.key, 12 | }); 13 | 14 | static PageRoute route({required int score}) { 15 | return PageRouteBuilder( 16 | pageBuilder: (_, __, ___) => ScorePage(score: score), 17 | ); 18 | } 19 | 20 | final int score; 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return BlocProvider( 25 | create: (context) => ScoreBloc( 26 | score: score, 27 | leaderboardRepository: context.read(), 28 | ), 29 | child: const ScoreView(), 30 | ); 31 | } 32 | } 33 | 34 | class ScoreView extends StatelessWidget { 35 | const ScoreView({super.key}); 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | return FlowBuilder( 40 | state: context.select((ScoreBloc bloc) => bloc.state), 41 | onGeneratePages: onGenerateScorePages, 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/score/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'score_page.dart'; 2 | -------------------------------------------------------------------------------- /lib/settings/persistence/memory_settings_persistence.dart: -------------------------------------------------------------------------------- 1 | // Copyright 2022, the Flutter project authors. Please see the AUTHORS file 2 | // for details. All rights reserved. Use of this source code is governed by a 3 | // BSD-style license that can be found in the LICENSE file. 4 | 5 | import 'package:super_dash/settings/persistence/persistence.dart'; 6 | 7 | /// An in-memory implementation of [SettingsPersistence]. 8 | /// Useful for testing. 9 | class MemoryOnlySettingsPersistence implements SettingsPersistence { 10 | bool musicOn = true; 11 | 12 | bool soundsOn = true; 13 | 14 | bool muted = false; 15 | 16 | String playerName = 'Player'; 17 | 18 | @override 19 | Future getMusicOn() async => musicOn; 20 | 21 | @override 22 | Future getMuted({required bool defaultValue}) async => muted; 23 | 24 | @override 25 | Future getSoundsOn() async => soundsOn; 26 | 27 | @override 28 | Future saveMusicOn({required bool active}) async => musicOn = active; 29 | 30 | @override 31 | Future saveMuted({required bool active}) async => muted = active; 32 | 33 | @override 34 | Future saveSoundsOn({required bool active}) async => soundsOn = active; 35 | } 36 | -------------------------------------------------------------------------------- /lib/settings/persistence/persistence.dart: -------------------------------------------------------------------------------- 1 | export 'local_storage_settings_persistence.dart'; 2 | export 'memory_settings_persistence.dart'; 3 | export 'settings_persistence.dart'; 4 | -------------------------------------------------------------------------------- /lib/settings/persistence/settings_persistence.dart: -------------------------------------------------------------------------------- 1 | // Copyright 2022, the Flutter project authors. Please see the AUTHORS file 2 | // for details. All rights reserved. Use of this source code is governed by a 3 | // BSD-style license that can be found in the LICENSE file. 4 | 5 | /// An interface of persistence stores for settings. 6 | /// 7 | /// Implementations can range from simple in-memory storage through 8 | /// local preferences to cloud-based solutions. 9 | abstract class SettingsPersistence { 10 | Future getMusicOn(); 11 | 12 | Future getMuted({required bool defaultValue}); 13 | 14 | Future getSoundsOn(); 15 | 16 | Future saveMusicOn({required bool active}); 17 | 18 | Future saveMuted({required bool active}); 19 | 20 | Future saveSoundsOn({required bool active}); 21 | } 22 | -------------------------------------------------------------------------------- /lib/settings/settings.dart: -------------------------------------------------------------------------------- 1 | export 'settings_controller.dart'; 2 | -------------------------------------------------------------------------------- /lib/share/share.dart: -------------------------------------------------------------------------------- 1 | import 'package:intl/intl.dart'; 2 | import 'package:share_plus/share_plus.dart'; 3 | import 'package:url_launcher/url_launcher_string.dart'; 4 | 5 | class ShareController { 6 | ShareController({required this.gameUrl}); 7 | 8 | final String gameUrl; 9 | 10 | String _postContent(int score) { 11 | final formatter = NumberFormat('#,###'); 12 | final scoreFormatted = formatter.format(score); 13 | 14 | return 'Seen the latest #FlutterGame? I scored $scoreFormatted on ' 15 | '#SuperDash. Can you beat my score?'; 16 | } 17 | 18 | String _twitterUrl(String content) => 19 | 'https://twitter.com/intent/tweet?text=$content $gameUrl'; 20 | 21 | String facebookUrl(String content) => 22 | 'https://www.facebook.com/sharer.php?u=$gameUrl'; 23 | 24 | String _encode(String content) => 25 | content.replaceAll(' ', '%20').replaceAll('#', '%23'); 26 | 27 | Future shareOnTwitter(int score) async { 28 | final content = _postContent(score); 29 | final url = _encode(_twitterUrl(content)); 30 | return launchUrlString(url); 31 | } 32 | 33 | Future shareOnFacebook(int score) async { 34 | final content = _postContent(score); 35 | final url = _encode(facebookUrl(content)); 36 | return launchUrlString(url); 37 | } 38 | 39 | Future shareMobile(int score) async { 40 | final content = _postContent(score); 41 | await Share.share(content); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/utils/utils.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | 3 | bool get isDesktop => 4 | defaultTargetPlatform == TargetPlatform.macOS || 5 | defaultTargetPlatform == TargetPlatform.windows || 6 | defaultTargetPlatform == TargetPlatform.linux; 7 | -------------------------------------------------------------------------------- /macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Flutter/GeneratedPluginRegistrant.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | import FlutterMacOS 6 | import Foundation 7 | 8 | import audioplayers_darwin 9 | import cloud_firestore 10 | import file_selector_macos 11 | import firebase_analytics 12 | import firebase_auth 13 | import firebase_core 14 | import path_provider_foundation 15 | import share_plus 16 | import shared_preferences_foundation 17 | import url_launcher_macos 18 | 19 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { 20 | AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) 21 | FLTFirebaseFirestorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseFirestorePlugin")) 22 | FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) 23 | FLTFirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAnalyticsPlugin")) 24 | FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) 25 | FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) 26 | PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) 27 | SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) 28 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) 29 | UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) 30 | } 31 | -------------------------------------------------------------------------------- /macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = dash_run 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.dashRun 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | com.apple.security.files.user-selected.read-only 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /macos/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | $(PRODUCT_COPYRIGHT) 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /packages/app_ui/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # VSCode related 20 | .vscode/* 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | **/ios/Flutter/.last_build_id 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | pubspec.lock 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Test related 44 | coverage -------------------------------------------------------------------------------- /packages/app_ui/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml 2 | -------------------------------------------------------------------------------- /packages/app_ui/assets/fonts/GoogleSansText-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/packages/app_ui/assets/fonts/GoogleSansText-Bold.ttf -------------------------------------------------------------------------------- /packages/app_ui/assets/fonts/GoogleSansText-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/packages/app_ui/assets/fonts/GoogleSansText-Regular.ttf -------------------------------------------------------------------------------- /packages/app_ui/coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/app_ui/lib/app_ui.dart: -------------------------------------------------------------------------------- 1 | /// A library for building UI components for the game. 2 | library app_ui; 3 | 4 | export 'src/layout/layout.dart'; 5 | export 'src/routes/routes.dart'; 6 | export 'src/theme/theme.dart'; 7 | export 'src/widgets/widgets.dart'; 8 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/layout/breakpoints.dart: -------------------------------------------------------------------------------- 1 | /// Breakpoints for responsive layouts. 2 | enum AppBreakpoints { 3 | /// Max width for a small layout. 4 | small, 5 | 6 | /// Max width for a medium layout. 7 | medium, 8 | 9 | /// Max width for a large layout. 10 | large, 11 | 12 | /// Max width for an extra large layout. 13 | extraLarge; 14 | 15 | const AppBreakpoints(); 16 | 17 | /// The size of the breakpoint. 18 | double get size { 19 | return switch (this) { 20 | AppBreakpoints.small => 768, 21 | AppBreakpoints.medium => 992, 22 | AppBreakpoints.large => 1200, 23 | AppBreakpoints.extraLarge => 1400, 24 | }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/layout/context.dart: -------------------------------------------------------------------------------- 1 | import 'package:app_ui/src/layout/breakpoints.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | /// Extension on [BuildContext] to provide information about the layout. 5 | extension BuildContextLayoutX on BuildContext { 6 | /// Whether the device is small. 7 | bool get isSmall { 8 | final mediaQuery = MediaQuery.of(this); 9 | return mediaQuery.size.width < AppBreakpoints.small.size && 10 | mediaQuery.orientation == Orientation.portrait; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/layout/layout.dart: -------------------------------------------------------------------------------- 1 | export 'breakpoints.dart'; 2 | export 'context.dart'; 3 | export 'page_with_background.dart'; 4 | export 'responsive_layout.dart'; 5 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/layout/page_with_background.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /// {@template page_with_background} 4 | /// A page with a background for responsive design. 5 | /// {@endtemplate} 6 | class PageWithBackground extends StatelessWidget { 7 | /// {@macro page_with_background} 8 | const PageWithBackground({ 9 | required this.background, 10 | required this.child, 11 | super.key, 12 | }); 13 | 14 | /// The background widget. 15 | final Widget background; 16 | 17 | /// The child widget. 18 | final Widget child; 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | if (MediaQuery.sizeOf(context).aspectRatio > .56) { 23 | return Scaffold( 24 | body: Stack( 25 | alignment: Alignment.center, 26 | children: [ 27 | background, 28 | AspectRatio( 29 | aspectRatio: .56, 30 | child: child, 31 | ), 32 | ], 33 | ), 34 | ); 35 | } 36 | return Scaffold(body: child); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/layout/responsive_layout.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: avoid_print 2 | 3 | import 'package:app_ui/app_ui.dart'; 4 | import 'package:flutter/widgets.dart'; 5 | 6 | /// Signature for the individual builders (`small`, `large`). 7 | typedef ResponsiveLayoutWidgetBuilder = Widget Function(BuildContext, Widget?); 8 | 9 | /// {@template responsive_layout_builder} 10 | /// A wrapper around [LayoutBuilder] which exposes builders for 11 | /// various responsive breakpoints. 12 | /// {@endtemplate} 13 | class ResponsiveLayoutBuilder extends StatelessWidget { 14 | /// {@macro responsive_layout_builder} 15 | const ResponsiveLayoutBuilder({ 16 | required this.small, 17 | required this.large, 18 | super.key, 19 | this.child, 20 | }); 21 | 22 | /// [ResponsiveLayoutWidgetBuilder] for small layout. 23 | final ResponsiveLayoutWidgetBuilder small; 24 | 25 | /// [ResponsiveLayoutWidgetBuilder] for large layout. 26 | final ResponsiveLayoutWidgetBuilder large; 27 | 28 | /// Optional child widget which will be passed 29 | /// to the `small` and `large` 30 | /// builders as a way to share/optimize shared layout. 31 | final Widget? child; 32 | 33 | @override 34 | Widget build(BuildContext context) { 35 | if (context.isSmall) return small(context, child); 36 | return large(context, child); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/routes/hero_dialog_route.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /// {@template hero_dialog_route} 4 | /// Custom [PageRoute] that creates an overlay dialog (popup effect). 5 | /// 6 | /// Best used with a [Hero] animation. 7 | /// {@endtemplate} 8 | class HeroDialogRoute extends PageRoute { 9 | /// {@macro hero_dialog_route} 10 | HeroDialogRoute({ 11 | required WidgetBuilder builder, 12 | super.settings, 13 | super.fullscreenDialog, 14 | }) : _builder = builder; 15 | 16 | final WidgetBuilder _builder; 17 | 18 | @override 19 | bool get opaque => false; 20 | 21 | @override 22 | bool get maintainState => true; 23 | 24 | @override 25 | bool get barrierDismissible => true; 26 | 27 | @override 28 | Color get barrierColor => Colors.black26; 29 | 30 | @override 31 | Duration get transitionDuration => kThemeAnimationDuration; 32 | 33 | @override 34 | Widget buildTransitions( 35 | BuildContext context, 36 | Animation animation, 37 | Animation secondaryAnimation, 38 | Widget child, 39 | ) { 40 | return child; 41 | } 42 | 43 | @override 44 | Widget buildPage( 45 | BuildContext context, 46 | Animation animation, 47 | Animation secondaryAnimation, 48 | ) { 49 | return _builder(context); 50 | } 51 | 52 | @override 53 | String? get barrierLabel => 'HeroDialogRoute'; 54 | } 55 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/routes/routes.dart: -------------------------------------------------------------------------------- 1 | export 'hero_dialog_route.dart'; 2 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/theme/theme.dart: -------------------------------------------------------------------------------- 1 | export 'app_text_styles.dart'; 2 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/widgets/traslucent_background.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | /// {@template traslucent_background} 4 | /// A traslucent background for the widgets. 5 | /// {@endtemplate} 6 | class TraslucentBackground extends StatelessWidget { 7 | /// {@macro traslucent_background} 8 | const TraslucentBackground({ 9 | required this.child, 10 | required this.gradient, 11 | this.shape = BoxShape.circle, 12 | this.border, 13 | this.borderRadius, 14 | super.key, 15 | }); 16 | 17 | /// The child widget on top of the background. 18 | final Widget child; 19 | 20 | /// The shape of the button. 21 | final BoxShape shape; 22 | 23 | /// The border of the button. 24 | final Border? border; 25 | 26 | /// The border radius of the button. 27 | final BorderRadius? borderRadius; 28 | 29 | /// The colors gradient to use for the button. 30 | final List gradient; 31 | 32 | @override 33 | Widget build(BuildContext context) { 34 | return Stack( 35 | children: [ 36 | Positioned.fill( 37 | child: Opacity( 38 | opacity: 0.4, 39 | child: DecoratedBox( 40 | decoration: BoxDecoration( 41 | shape: shape, 42 | border: border, 43 | borderRadius: borderRadius, 44 | gradient: LinearGradient(colors: gradient), 45 | ), 46 | ), 47 | ), 48 | ), 49 | child, 50 | ], 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /packages/app_ui/lib/src/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'app_card.dart'; 2 | export 'app_dialog.dart'; 3 | export 'game_elevated_button.dart'; 4 | export 'game_icon_button.dart'; 5 | export 'traslucent_background.dart'; 6 | -------------------------------------------------------------------------------- /packages/app_ui/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: app_ui 2 | description: App UI Package of the Super Dash game. 3 | version: 0.1.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.0.0 <4.0.0" 8 | flutter: ">=3.10.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | mocktail: ^1.0.0 18 | very_good_analysis: ^5.1.0 19 | 20 | flutter: 21 | fonts: 22 | - family: Google Sans 23 | fonts: 24 | - asset: assets/fonts/GoogleSansText-Regular.ttf 25 | - asset: assets/fonts/GoogleSansText-Bold.ttf 26 | weight: 700 -------------------------------------------------------------------------------- /packages/authentication_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # VSCode related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | **/ios/Flutter/.last_build_id 24 | .dart_tool/ 25 | .flutter-plugins 26 | .flutter-plugins-dependencies 27 | .packages 28 | .pub-cache/ 29 | .pub/ 30 | /build/ 31 | pubspec.lock 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Symbolication related 37 | app.*.symbols 38 | 39 | # Obfuscation related 40 | app.*.map.json 41 | 42 | # Test related 43 | coverage -------------------------------------------------------------------------------- /packages/authentication_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml 2 | -------------------------------------------------------------------------------- /packages/authentication_repository/coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/authentication_repository/lib/authentication_repository.dart: -------------------------------------------------------------------------------- 1 | /// Repository to manage authentication. 2 | library authentication_repository; 3 | 4 | export 'src/authentication_repository.dart'; 5 | export 'src/models/models.dart'; 6 | -------------------------------------------------------------------------------- /packages/authentication_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'user.dart'; 2 | -------------------------------------------------------------------------------- /packages/authentication_repository/lib/src/models/user.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | 3 | /// {@template user} 4 | /// User model 5 | /// {@endtemplate} 6 | class User extends Equatable { 7 | /// {@macro user} 8 | const User({ 9 | required this.id, 10 | }); 11 | 12 | /// The current user's id. 13 | final String id; 14 | 15 | /// Represents an unauthenticated user. 16 | static const unauthenticated = User(id: ''); 17 | 18 | @override 19 | List get props => [id]; 20 | } 21 | -------------------------------------------------------------------------------- /packages/authentication_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: authentication_repository 2 | description: Repository to manage authentication. 3 | version: 0.1.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.0.0-134.0.dev <4.0.0" 8 | flutter: 3.10.0-1.4.pre 9 | 10 | dependencies: 11 | equatable: ^2.0.5 12 | firebase_auth: ^4.12.1 13 | firebase_core: ^2.21.0 14 | firebase_core_platform_interface: ^5.0.0 15 | flutter: 16 | sdk: flutter 17 | plugin_platform_interface: ^2.1.6 18 | 19 | dev_dependencies: 20 | flutter_test: 21 | sdk: flutter 22 | mocktail: ^1.0.1 23 | very_good_analysis: ^5.1.0 24 | -------------------------------------------------------------------------------- /packages/authentication_repository/test/src/models/user_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:authentication_repository/authentication_repository.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('User', () { 6 | test('supports value equality', () { 7 | const userA = User(id: 'A'); 8 | const secondUserA = User(id: 'A'); 9 | const userB = User(id: 'B'); 10 | 11 | expect(userA, equals(secondUserA)); 12 | expect(userA, isNot(equals(userB))); 13 | }); 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # VSCode related 20 | .vscode/* 21 | 22 | # Flutter/Dart/Pub related 23 | **/doc/api/ 24 | **/ios/Flutter/.last_build_id 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | pubspec.lock 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Test related 44 | coverage -------------------------------------------------------------------------------- /packages/leaderboard_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.5.1.0.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.g.dart -------------------------------------------------------------------------------- /packages/leaderboard_repository/coverage_badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | coverage 16 | coverage 17 | 100% 18 | 100% 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/leaderboard_repository.dart: -------------------------------------------------------------------------------- 1 | /// A repository to access leaderboard data in Firebase Cloud Firestore. 2 | library leaderboard_repository; 3 | 4 | export 'src/leaderboard_repository.dart'; 5 | export 'src/models/models.dart'; 6 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/src/models/leaderboard_entry_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'leaderboard_entry_data.g.dart'; 5 | 6 | /// {@template leaderboard_entry_data} 7 | /// A model representing a leaderboard entry containing the player's initials, 8 | /// score, and chosen character. 9 | /// 10 | /// Stored in Firestore `leaderboard` collection. 11 | /// 12 | /// Example: 13 | /// ```json 14 | /// { 15 | /// "playerInitials" : "ABC", 16 | /// "score" : 1500, 17 | /// } 18 | /// ``` 19 | /// {@endtemplate} 20 | @JsonSerializable() 21 | class LeaderboardEntryData extends Equatable { 22 | /// {@macro leaderboard_entry_data} 23 | const LeaderboardEntryData({ 24 | required this.playerInitials, 25 | required this.score, 26 | }); 27 | 28 | /// Factory which converts a [Map] into a [LeaderboardEntryData]. 29 | factory LeaderboardEntryData.fromJson(Map json) { 30 | return _$LeaderboardEntryDataFromJson(json); 31 | } 32 | 33 | /// Converts the [LeaderboardEntryData] to [Map]. 34 | Map toJson() => _$LeaderboardEntryDataToJson(this); 35 | 36 | /// Player's chosen initials for [LeaderboardEntryData]. 37 | /// 38 | /// Example: 'ABC'. 39 | @JsonKey(name: 'playerInitials') 40 | final String playerInitials; 41 | 42 | /// Score for [LeaderboardEntryData]. 43 | /// 44 | /// Example: 1500. 45 | @JsonKey(name: 'score') 46 | final int score; 47 | 48 | /// An empty [LeaderboardEntryData] object. 49 | static const empty = LeaderboardEntryData( 50 | score: 0, 51 | playerInitials: '', 52 | ); 53 | 54 | @override 55 | List get props => [playerInitials, score]; 56 | } 57 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/src/models/leaderboard_entry_data.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'leaderboard_entry_data.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | LeaderboardEntryData _$LeaderboardEntryDataFromJson( 10 | Map json) => 11 | LeaderboardEntryData( 12 | playerInitials: json['playerInitials'] as String, 13 | score: json['score'] as int, 14 | ); 15 | 16 | Map _$LeaderboardEntryDataToJson( 17 | LeaderboardEntryData instance) => 18 | { 19 | 'playerInitials': instance.playerInitials, 20 | 'score': instance.score, 21 | }; 22 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'exceptions.dart'; 2 | export 'leaderboard_entry_data.dart'; 3 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: leaderboard_repository 2 | description: A repository to access leaderboard data in Firebase Cloud Firestore. 3 | version: 0.1.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.0.0 <4.0.0" 8 | flutter: ">=3.10.0" 9 | 10 | dependencies: 11 | cloud_firestore: ^4.12.1 12 | equatable: ^2.0.5 13 | flutter: 14 | sdk: flutter 15 | json_annotation: ^4.8.1 16 | 17 | dev_dependencies: 18 | build_runner: ^2.4.6 19 | flutter_test: 20 | sdk: flutter 21 | json_serializable: ^6.7.1 22 | mocktail: ^1.0.0 23 | very_good_analysis: ^5.1.0 24 | -------------------------------------------------------------------------------- /packages/leaderboard_repository/test/src/models/leaderboard_entry_data_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:leaderboard_repository/leaderboard_repository.dart'; 3 | 4 | void main() { 5 | group('LeaderboardEntry', () { 6 | const data = { 7 | 'score': 1500, 8 | 'playerInitials': 'ABC', 9 | }; 10 | 11 | const leaderboardEntry = LeaderboardEntryData( 12 | score: 1500, 13 | playerInitials: 'ABC', 14 | ); 15 | 16 | test('can be instantiated', () { 17 | const leaderboardEntry = LeaderboardEntryData.empty; 18 | 19 | expect(leaderboardEntry, isNotNull); 20 | }); 21 | 22 | test('supports value equality.', () { 23 | const leaderboardEntry = LeaderboardEntryData.empty; 24 | const leaderboardEntry2 = LeaderboardEntryData.empty; 25 | 26 | expect(leaderboardEntry, equals(leaderboardEntry2)); 27 | }); 28 | 29 | test('can be converted to json', () { 30 | expect(leaderboardEntry.toJson(), equals(data)); 31 | }); 32 | 33 | test('can be obtained from json', () { 34 | final leaderboardEntryFrom = LeaderboardEntryData.fromJson(data); 35 | 36 | expect(leaderboardEntry, equals(leaderboardEntryFrom)); 37 | }); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /test/audio/songs_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:super_dash/audio/songs.dart'; 4 | 5 | void main() { 6 | group('Song', () { 7 | test('toString returns correctly', () { 8 | expect( 9 | Song('SONG.mp3', 'SONG').toString(), 10 | equals('Song'), 11 | ); 12 | }); 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /test/filesystem_asset_bundle/filesystem_asset_bundle_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:path/path.dart' as path; 6 | import 'package:super_dash/filesytem_asset_bundle/filesystem_asset_bundle.dart'; 7 | 8 | void main() { 9 | group('FileSystemAssetBundle', () { 10 | late Directory testDir; 11 | 12 | setUp(() { 13 | testDir = Directory.systemTemp.createTempSync( 14 | '_test_${DateTime.now().millisecondsSinceEpoch}', 15 | )..createSync(); 16 | }); 17 | 18 | tearDown(() { 19 | testDir.deleteSync(recursive: true); 20 | }); 21 | 22 | test('loads assets from a directory', () async { 23 | File(path.join(testDir.path, 'test.txt')).writeAsStringSync('test'); 24 | 25 | final bundle = FileSystemAssetBundle(testDir.path); 26 | final data = await bundle.loadString('test.txt'); 27 | 28 | expect(data, equals('test')); 29 | }); 30 | 31 | test('loads structured assets from a directory', () async { 32 | File(path.join(testDir.path, 'test.json')) 33 | .writeAsStringSync('{"name": "Dash"}'); 34 | 35 | final bundle = FileSystemAssetBundle(testDir.path); 36 | final data = await bundle.loadStructuredData( 37 | 'test.json', 38 | (value) async => jsonDecode(value), 39 | ); 40 | 41 | expect(data, equals({'name': 'Dash'})); 42 | }); 43 | }); 44 | } 45 | -------------------------------------------------------------------------------- /test/game/bloc/game_bloc_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:bloc_test/bloc_test.dart'; 4 | import 'package:flutter_test/flutter_test.dart'; 5 | import 'package:super_dash/game/bloc/game_bloc.dart'; 6 | 7 | void main() { 8 | group('GameBloc', () { 9 | blocTest( 10 | 'emits GameState initial when GameOver is added', 11 | build: GameBloc.new, 12 | seed: () => const GameState( 13 | score: 100, 14 | currentLevel: 2, 15 | currentSection: 2, 16 | ), 17 | act: (bloc) => bloc.add(GameOver()), 18 | expect: () => const [GameState.initial()], 19 | ); 20 | 21 | blocTest( 22 | 'emits GameState with score increased correctly ' 23 | 'when GameScoreIncreased is added', 24 | build: GameBloc.new, 25 | seed: () => const GameState.initial().copyWith(score: 100), 26 | act: (bloc) => bloc.add(GameScoreIncreased(by: 2)), 27 | expect: () => [const GameState.initial().copyWith(score: 102)], 28 | ); 29 | 30 | blocTest( 31 | 'emits GameState with score decreased correctly ' 32 | 'when GameScoreDecreased is added', 33 | build: GameBloc.new, 34 | seed: () => const GameState.initial().copyWith(score: 100), 35 | act: (bloc) => bloc.add(GameScoreDecreased(by: 2)), 36 | expect: () => [const GameState.initial().copyWith(score: 98)], 37 | ); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /test/game/bloc/game_state_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:super_dash/game/bloc/game_bloc.dart'; 5 | 6 | void main() { 7 | group('GameState', () { 8 | test( 9 | 'initial state score is 0', 10 | () => expect(GameState.initial().score, isZero), 11 | ); 12 | 13 | test('supports value comparisons', () { 14 | expect(GameState.initial(), GameState.initial()); 15 | }); 16 | 17 | test('returns same object when no properties are passed', () { 18 | expect(GameState.initial().copyWith(), GameState.initial()); 19 | }); 20 | 21 | test('returns object with updated score when score is passed', () { 22 | expect( 23 | GameState.initial().copyWith(score: 100), 24 | GameState(score: 100, currentLevel: 1, currentSection: 0), 25 | ); 26 | }); 27 | 28 | test( 29 | 'returns object with updated scocurrentLevelre when score is passed', 30 | () { 31 | expect( 32 | GameState.initial().copyWith(currentLevel: 2), 33 | GameState(score: 0, currentLevel: 2, currentSection: 0), 34 | ); 35 | }, 36 | ); 37 | 38 | test('returns object with updated currentSection when score is passed', () { 39 | expect( 40 | GameState.initial().copyWith(currentSection: 3), 41 | GameState(score: 0, currentLevel: 1, currentSection: 3), 42 | ); 43 | }); 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /test/game_intro/game_instructions/cubit/game_instructions_cubit_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc_test/bloc_test.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | import 'package:super_dash/game_intro/game_instructions/cubit/game_instructions_cubit.dart'; 4 | 5 | void main() { 6 | group('GameInstructionsCubit', () { 7 | blocTest( 8 | 'emits correct step when updateStep is called', 9 | build: GameInstructionsCubit.new, 10 | act: (cubit) => cubit.updateStep(GameInstructionsStep.tapToJump.index), 11 | expect: () => const [ 12 | GameInstructionsState(GameInstructionsStep.tapToJump), 13 | ], 14 | ); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /test/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'pump_app.dart'; 2 | export 'view_size.dart'; 3 | -------------------------------------------------------------------------------- /test/helpers/pump_app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_bloc/flutter_bloc.dart'; 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:leaderboard_repository/leaderboard_repository.dart'; 5 | import 'package:mocktail/mocktail.dart'; 6 | import 'package:super_dash/audio/audio.dart'; 7 | import 'package:super_dash/l10n/l10n.dart'; 8 | import 'package:super_dash/settings/settings.dart'; 9 | 10 | class _MockAudioController extends Mock implements AudioController {} 11 | 12 | class _MockSettingsController extends Mock implements SettingsController {} 13 | 14 | class _MockLeaderboardRepository extends Mock 15 | implements LeaderboardRepository {} 16 | 17 | extension PumpApp on WidgetTester { 18 | Future pumpApp( 19 | Widget widget, { 20 | AudioController? audioController, 21 | SettingsController? settingsController, 22 | LeaderboardRepository? leaderboardRepository, 23 | }) { 24 | return pumpWidget( 25 | MaterialApp( 26 | localizationsDelegates: AppLocalizations.localizationsDelegates, 27 | supportedLocales: AppLocalizations.supportedLocales, 28 | home: MultiRepositoryProvider( 29 | providers: [ 30 | RepositoryProvider.value( 31 | value: audioController ?? _MockAudioController(), 32 | ), 33 | RepositoryProvider.value( 34 | value: settingsController ?? _MockSettingsController(), 35 | ), 36 | RepositoryProvider.value( 37 | value: leaderboardRepository ?? _MockLeaderboardRepository(), 38 | ), 39 | ], 40 | child: widget, 41 | ), 42 | ), 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /test/helpers/view_size.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | 5 | extension ViewSize on WidgetTester { 6 | void setViewSize({ 7 | Size size = const Size(1280, 1024), 8 | }) { 9 | view 10 | ..physicalSize = size 11 | ..devicePixelRatio = 1; 12 | addTearDown(view.resetPhysicalSize); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test/leaderboard/bloc/leaderboard_event_test.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: prefer_const_constructors 2 | 3 | import 'package:flutter_test/flutter_test.dart'; 4 | import 'package:super_dash/leaderboard/bloc/leaderboard_bloc.dart'; 5 | 6 | void main() { 7 | group('LeaderboardTop10Requested', () { 8 | test( 9 | 'supports value equality', 10 | () => expect( 11 | LeaderboardTop10Requested(), 12 | LeaderboardTop10Requested(), 13 | ), 14 | ); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /tilesets_source/map/.gitignore: -------------------------------------------------------------------------------- 1 | *.tiled-project 2 | *.tiled-session 3 | -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_enemies_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_enemies_v2.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_forest_trees_back_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_forest_trees_back_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_forest_trees_front_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_forest_trees_front_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_gate_lvl5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_gate_lvl5.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_gate_lvl7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_gate_lvl7.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_items_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_items_v2.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_mountain_tree_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_mountain_tree_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_plains_mountains_B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_plains_mountains_B.png -------------------------------------------------------------------------------- /tilesets_source/map/objects/tile_plains_mountains_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/objects/tile_plains_mountains_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_atmos_forest_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_atmos_forest_1.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_atmos_forest_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_atmos_forest_2.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_atmos_forest_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_atmos_forest_3.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_clouds_BG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_clouds_BG.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_clouds_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_clouds_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_decorations_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_decorations_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_forest_bushes_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_forest_bushes_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_forest_bushes_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_forest_bushes_v03.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_forest_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_forest_ground_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_forest_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_forest_ground_v03.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_forest_ground_v04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_forest_ground_v04.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_gate_v2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_gate_v2.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_ground_transition_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_ground_transition_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_mountain_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_mountain_ground_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_mountain_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_mountain_ground_v03.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_mountain_mountains_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_mountain_mountains_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_mountain_stars_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_mountain_stars_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_plains_ground_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_plains_ground_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_plains_ground_v03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_plains_ground_v03.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_plains_hills_v01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_plains_hills_v01.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_plains_hills_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_plains_hills_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_sky_v02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_sky_v02.png -------------------------------------------------------------------------------- /tilesets_source/map/tiles/tile_treehouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/tilesets_source/map/tiles/tile_treehouse.png -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /web/icons/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flutter/super_dash/38b7a9a819d69fe8d59d4a0cea744d6ca353616f/web/icons/favicon.png -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Dash Run", 3 | "short_name": "Dash Run", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0046a3", 7 | "theme_color": "#5ec7db", 8 | "description": "A Very Good Platformer Game generated by Very Good CLI.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | }, 22 | { 23 | "src": "icons/Icon-maskable-192.png", 24 | "sizes": "192x192", 25 | "type": "image/png", 26 | "purpose": "maskable" 27 | }, 28 | { 29 | "src": "icons/Icon-maskable-512.png", 30 | "sizes": "512x512", 31 | "type": "image/png", 32 | "purpose": "maskable" 33 | } 34 | ] 35 | } --------------------------------------------------------------------------------