├── .firebase
└── hosting.YnVpbGQvd2Vi.cache
├── .firebaserc
├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── app
│ │ │ │ └── meedu
│ │ │ │ └── my_puzzle
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── animals
│ ├── cat.png
│ ├── dog.png
│ ├── fox.png
│ ├── koala.png
│ ├── lion.png
│ ├── monkey.png
│ ├── mouse.png
│ ├── panda.png
│ ├── penguin.png
│ └── tiger.png
├── icons
│ ├── PuzzleIcons.ttf
│ ├── config.json
│ └── icon.png
├── images
│ ├── dash.png
│ ├── hero-dash.png
│ ├── jungle.png
│ ├── numeric-puzzle.png
│ └── relax-dash.png
├── rive
│ └── winner.riv
└── sounds
│ ├── cat.mp3
│ ├── dog.mp3
│ ├── fox.mp3
│ ├── koala.mp3
│ ├── lion.mp3
│ ├── monkey.mp3
│ ├── mouse.mp3
│ ├── panda.mp3
│ ├── penguin.mp3
│ ├── pull-out.mp3
│ └── tiger.mp3
├── firebase.json
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── 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
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── generated
│ ├── intl
│ │ ├── messages_all.dart
│ │ ├── messages_en.dart
│ │ └── messages_es.dart
│ └── l10n.dart
├── main.dart
└── src
│ ├── data
│ └── repositories_impl
│ │ ├── audio_repository_impl.dart
│ │ ├── images_repository_impl.dart
│ │ └── settings_repository_impl.dart
│ ├── domain
│ ├── models
│ │ ├── move_to.dart
│ │ ├── position.dart
│ │ ├── puzzle.dart
│ │ ├── puzzle_image.dart
│ │ └── tile.dart
│ └── repositories
│ │ ├── audio_repository.dart
│ │ ├── images_repository.dart
│ │ └── settings_repository.dart
│ ├── inject_dependencies.dart
│ ├── l10n
│ ├── intl_en.arb
│ └── intl_es.arb
│ ├── my_app.dart
│ └── ui
│ ├── global
│ ├── controllers
│ │ └── theme_controller.dart
│ └── widgets
│ │ ├── max_text_scale_factor.dart
│ │ ├── my_icon_button.dart
│ │ ├── my_text_icon_button.dart
│ │ └── up_to_down.dart
│ ├── icons
│ └── puzzle_icons.dart
│ ├── pages
│ ├── game
│ │ ├── controller
│ │ │ ├── game_controller.dart
│ │ │ └── game_state.dart
│ │ ├── game_view.dart
│ │ └── widgets
│ │ │ ├── background.dart
│ │ │ ├── confirm_dialog.dart
│ │ │ ├── game_app_bar.dart
│ │ │ ├── game_buttons.dart
│ │ │ ├── puzzle_interactor.dart
│ │ │ ├── puzzle_options.dart
│ │ │ ├── puzzle_tile.dart
│ │ │ ├── time_and_moves.dart
│ │ │ └── winner_dialog.dart
│ ├── privacy
│ │ └── privacy_view.dart
│ └── splash
│ │ ├── circle_transition_clipper.dart
│ │ └── splash_view.dart
│ ├── routes
│ ├── app_routes.dart
│ └── routes.dart
│ └── utils
│ ├── colors.dart
│ ├── dark_mode_extension.dart
│ ├── platform.dart
│ ├── responsive.dart
│ └── time_parser.dart
├── pubspec.lock
├── pubspec.yaml
└── web
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
├── Icon-maskable-192.png
└── Icon-maskable-512.png
├── index.html
└── manifest.json
/.firebase/hosting.YnVpbGQvd2Vi.cache:
--------------------------------------------------------------------------------
1 | favicon.png,1631206088305,fcc7c4545d5b62ad01682589e6fdc7ea03d0a3b42069963c815c344b632eb5cf
2 | manifest.json,1643664647590,b9dbd2f9cc8a3c7c3c04786d9fa8f9ba356684c836ba52432a2872cde66c0182
3 | assets/assets/animals/cat.png,1643748514237,68e338cd333467886fbed2a66aa2e19cb7be16383c68a1ca4b8e79e2bb0bd403
4 | assets/assets/animals/dog.png,1643748514237,361ecc495b3d001ddcdad3d6c4f7d7af40da403bfe7eb5f2233c2812ca154263
5 | assets/assets/animals/fox.png,1643748514238,c158424176148fa50287a95e91026256fbae36c9b2eac5a5e5c8976ef5b628a6
6 | assets/assets/animals/koala.png,1643748514239,7090de1b1be675e784699f73569accbdd11466784ef0b94cd3ec1599832da138
7 | assets/assets/animals/lion.png,1643748514239,1322a5f5d56477a2d136e39354fa9c4c9eca8b70f9d5caaf4ef4b44279f5aac0
8 | assets/assets/animals/monkey.png,1643748514240,8fa484e292b77d80eca7a91326727eced975482048d0a2175e61885f085628e7
9 | assets/assets/animals/mouse.png,1643748514240,6d2e7b62175688685ff19aaa20188aca3ac7214ecfe6b45063ba1148078168e1
10 | assets/assets/animals/panda.png,1643748514241,be3f7f9dcb9e160d05a572ec379963c648f7d0ebee6661bf878d75107ed5a7ce
11 | assets/assets/animals/penguin.png,1643748514241,228736cb71fdbc93deea399b2ed16f56f1aec13a4cb7906cc4f92f93cf266caa
12 | assets/assets/animals/tiger.png,1643748514241,37c66167c0cdb045a8ed0934e415a29bbbbf4dd8fc6bb6355b8c901cac32c802
13 | assets/assets/icons/PuzzleIcons.ttf,1643748514242,3651b6d9299c3881ff6682c474f60e885b3e99898174fa738600918b60a6d95c
14 | assets/assets/images/dash.png,1643748514244,07efb6040866fba7279af050199559aeec72db31f328e986032697f067e509dd
15 | assets/assets/images/hero-dash.png,1643748514246,3b67c1048dc2be6c9606700a664be48e182ee03ab6c101017ae6eb187f338f5f
16 | assets/assets/images/jungle.png,1643748514247,c813bfc521adcdcaabdd3aa8a1f50ff18ab2394442341fede491fb58f5fe355b
17 | assets/assets/images/numeric-puzzle.png,1643923353824,05c6d5e550fcf279ccf587f64a134b89b3923be1933e7ba26b30a31ab1eedc2f
18 | assets/assets/images/relax-dash.png,1643748514250,f2d0b6d453359b61a9a8cb572402b26c051b9dd3297ee4e0845afcc5ce3138b3
19 | assets/assets/sounds/cat.mp3,1643909563458,1894f0487f23cc274582fe702b0a8b2bf81c5ab87c8d846d12f847d7d922b776
20 | assets/assets/sounds/dog.mp3,1643909620527,5bff40a41a09433b62b011fda87b717dcc3f7a8bd8417c337228749eb56f8737
21 | assets/assets/sounds/fox.mp3,1643910560818,0556dce1dff2bacbe10985db60b18197a9e4ea972deb5e54f4f81164ef5f262f
22 | assets/assets/sounds/koala.mp3,1643910984913,5054507cb0205691b0370fef45987f8fd9352c0afc485d1f060288a0932dd8cf
23 | assets/assets/sounds/lion.mp3,1643909466155,5d74d57b0fd608e218a964480bf5b9dbe592ca7ae22a416c5bb8447804e39603
24 | assets/assets/sounds/monkey.mp3,1643909745432,1e786553bbc8d44a40844a98afe9130feafe1b42858faadfd76599c9926af548
25 | assets/assets/sounds/mouse.mp3,1643910865820,0045f996170eecf03b75c93b4ab42883d0ca68d582a0b5cb931f0946ce5b5dcb
26 | assets/assets/sounds/panda.mp3,1643909987724,1bd8ba3541b3f5be5387f02a9070385918086e31499dd8ef73d2b765791cbd6f
27 | assets/assets/sounds/penguin.mp3,1643911629979,bff839482aa958207083e21bf5562e9ed62ffaa9c90afa0bfe5f6fcb8f642001
28 | assets/assets/sounds/pull-out.mp3,1643748514251,0410b36a0c5de8f8da952e68c5eaf207cc56344f3f705241cef3f71661645651
29 | assets/assets/sounds/tiger.mp3,1643911226710,6cad33b3e7cb4d79df71599e0a102cb7bbe8b65522f5b6231bb33a1c4a443950
30 | assets/fonts/MaterialIcons-Regular.otf,1615596762000,5f71a8843e4edc9656c39061c2232458a6fc77e1603305960e4efa9c77f8b7a2
31 | canvaskit/canvaskit.js,315464400000,332d67a51b86f5129fc7d929d6bb6bd0416b17fd853899efc1f5044770954ed6
32 | canvaskit/canvaskit.wasm,315464400000,8dae2a06cf716711e3578aa55ee7b03ccdc54b4bdc9be9ee50c33515d2b3a7fe
33 | canvaskit/profiling/canvaskit.js,315464400000,41ae97b4ac8a386f55b22f1962c7b564da96df256fd938d684e73a8061e70b61
34 | canvaskit/profiling/canvaskit.wasm,315464400000,cb4c2221f1c20811ac3a33666833b4458656193de55b276b3c8fc31856b2f3a0
35 | icons/Icon-192.png,1631206088305,d2e0131bb7851eb9d98f7885edb5ae4b4d6b7a6c7addf8a25b9b712b39274c0f
36 | icons/Icon-512.png,1631206088305,7a31ce91e554f1941158ca46f31c7f3f2b7c8c129229ea74a8fae1affe335033
37 | icons/Icon-maskable-192.png,1624907668000,dd96c123fdf6817cdf7e63d9693bcc246bac2e3782a41a6952fa41c0617c5573
38 | icons/Icon-maskable-512.png,1624907668000,e7983524dc70254adc61764657d7e03d19284de8da586b5818d737bc08c6d14e
39 | index.html,1643987060788,7273cf247784cafe1d985221967cb2c77de4bf923d902529c5fe27f46e4d1a7d
40 | version.json,1643987060670,5527fe959775d7233e24c641a2db3ed5b38a03a9b25644f3d498d24b6e36ebc2
41 | assets/AssetManifest.json,1643987060783,55843880abb502448fb0405d9bef6020755f55b6157b573c37c1959d0f37436f
42 | flutter_service_worker.js,1643987061170,794108aaf140df0acb9fe623270ab3470e45bdd2b24b631adefa7dab5201de0d
43 | assets/FontManifest.json,1643987060783,f5af44545a98526565c7914cf43f0d009e53427d27c704b483b105db189092e6
44 | assets/NOTICES,1643987060783,26c42f554fd9febb527f1dac3a3862ee083040a9f30c64fbb04f64aa08cf23a3
45 | main.dart.js,1643987060379,6bf464a33b02b2a4cef0d3f31fa9fe34db9379fa37c7c8008a42870cc7360e37
46 |
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "darwin-puzzle"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.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 | # The .vscode folder contains launch configuration and tasks you configure in
19 | # VS Code which you may wish to be included in version control, so this line
20 | # is commented out by default.
21 | #.vscode/
22 |
23 | # Flutter/Dart/Pub related
24 | **/doc/api/
25 | **/ios/Flutter/.last_build_id
26 | .dart_tool/
27 | .flutter-plugins
28 | .flutter-plugins-dependencies
29 | .packages
30 | .pub-cache/
31 | .pub/
32 | /build/
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 | # Android Studio will place build artifacts here
44 | /android/app/debug
45 | /android/app/profile
46 | /android/app/release
47 |
--------------------------------------------------------------------------------
/.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: 77d935af4db863f6abd0b9c31c7e6df2a13de57b
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Jungle puzzle
2 |
3 | A slide puzzle game created with flutter for the flutter hack https://flutter.dev/events/puzzle-hack
4 |
5 |
6 | | Numeric | Image | Dark Mode |
7 | |--------|----------------|----|
8 | |  |  |
9 |
10 | ## How to run?
11 |
12 | first run the next command to install all dependencies.
13 | ```shell
14 | flutter pub get
15 | ```
16 |
17 | Now for Android and iOS use
18 | ```shell
19 | flutter run
20 | ```
21 |
22 | For web use
23 | ```shell
24 | flutter run -d chrome --profile
25 | ```
26 |
27 |
28 |
29 |
30 | ---
31 | Check the next flutter puzzle tutorial (Spanish)
32 |
33 | [](https://www.youtube.com/watch?v=DEDO1yHXKHY "Flutter puzzle hack - tutorial")
34 |
35 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/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/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | def keystoreProperties = new Properties()
29 | def keystorePropertiesFile = rootProject.file('key.properties')
30 | if (keystorePropertiesFile.exists()) {
31 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
32 | }
33 |
34 | android {
35 | compileSdkVersion flutter.compileSdkVersion
36 |
37 | compileOptions {
38 | sourceCompatibility JavaVersion.VERSION_1_8
39 | targetCompatibility JavaVersion.VERSION_1_8
40 | }
41 |
42 | kotlinOptions {
43 | jvmTarget = '1.8'
44 | }
45 |
46 | sourceSets {
47 | main.java.srcDirs += 'src/main/kotlin'
48 | }
49 |
50 | defaultConfig {
51 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
52 | applicationId "app.meedu.my_puzzle"
53 | minSdkVersion 21
54 | targetSdkVersion flutter.targetSdkVersion
55 | versionCode flutterVersionCode.toInteger()
56 | versionName flutterVersionName
57 | }
58 |
59 | signingConfigs {
60 | release {
61 | keyAlias keystoreProperties['keyAlias']
62 | keyPassword keystoreProperties['keyPassword']
63 | storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
64 | storePassword keystoreProperties['storePassword']
65 | }
66 | }
67 |
68 | buildTypes {
69 | release {
70 | // TODO: Add your own signing config for the release build.
71 | // Signing with the debug keys for now, so `flutter run --release` works.
72 | signingConfig signingConfigs.release
73 | }
74 | }
75 | }
76 |
77 | flutter {
78 | source '../..'
79 | }
80 |
81 | dependencies {
82 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
83 | }
84 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
15 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/app/meedu/my_puzzle/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package app.meedu.my_puzzle
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 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Jungle Puzzle
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.3.50'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:4.1.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 | task clean(type: 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 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/assets/animals/cat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/cat.png
--------------------------------------------------------------------------------
/assets/animals/dog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/dog.png
--------------------------------------------------------------------------------
/assets/animals/fox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/fox.png
--------------------------------------------------------------------------------
/assets/animals/koala.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/koala.png
--------------------------------------------------------------------------------
/assets/animals/lion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/lion.png
--------------------------------------------------------------------------------
/assets/animals/monkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/monkey.png
--------------------------------------------------------------------------------
/assets/animals/mouse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/mouse.png
--------------------------------------------------------------------------------
/assets/animals/panda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/panda.png
--------------------------------------------------------------------------------
/assets/animals/penguin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/penguin.png
--------------------------------------------------------------------------------
/assets/animals/tiger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/animals/tiger.png
--------------------------------------------------------------------------------
/assets/icons/PuzzleIcons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/icons/PuzzleIcons.ttf
--------------------------------------------------------------------------------
/assets/icons/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "PuzzleIcons",
3 | "css_prefix_text": "",
4 | "css_use_suffix": false,
5 | "hinting": true,
6 | "units_per_em": 1000,
7 | "ascent": 850,
8 | "glyphs": [
9 | {
10 | "uid": "7007994809eee2570f2b07eeef5b45c6",
11 | "css": "watch",
12 | "code": 59392,
13 | "src": "custom_icons",
14 | "selected": true,
15 | "svg": {
16 | "path": "M461.9 42.2C423.9 51.3 377.5 81.5 367.7 103.5 347.5 149.1 403.6 188.1 439.5 153.4 473.3 120.5 521.8 119.9 557.1 151.9 590 181.7 633.9 164.9 633.7 122.5L633.6 105.4 623.9 95.5C579 49 517.6 28.9 461.9 42.2M454.1 208C317.7 230.1 221.5 298.3 161.9 415.4 69.1 597.7 146.5 828.3 331.2 919.7 416.3 961.8 525.7 969.5 615.2 939.6 914.2 839.7 968.9 441.2 707.3 268.7 634.1 220.4 530.6 195.6 454.1 208M553 298.6C742.5 337.1 843.4 541.7 756.8 712 648.9 924.5 347.1 923.5 239.9 710.3 134 499.6 322.5 251.7 553 298.6M474.5 379.8C469.4 383.7 463.6 390.4 460.9 395.9L456.1 405.3 456.1 500C456.1 614.4 449.2 595.1 512.1 657.5 559.5 704.7 559.6 704.7 570.8 707 607.6 714.5 632.6 686.7 621.9 650.3 619 640.5 615.8 636.6 580.9 601.5L543 563.4 543 486.3C542.9 399.6 542.7 398.2 527.1 383.4 513.2 370.3 489.3 368.7 474.5 379.8",
17 | "width": 1000
18 | },
19 | "search": [
20 | "watch"
21 | ]
22 | },
23 | {
24 | "uid": "68d57aa6cfd6660963fded3b5925f6db",
25 | "css": "mute",
26 | "code": 59393,
27 | "src": "custom_icons",
28 | "selected": true,
29 | "svg": {
30 | "path": "M723.9 85.1C690.6 91.7 683 97.4 595.9 180.5L523.3 249.8 387.1 250.5 251 251.1 232.4 256.2C93.6 294.3 14.6 427.6 50 563.8 72.9 652.4 139.8 718.4 232.4 743.8L251 748.9 387.1 749.5 523.3 750.2 595.9 819.5C635.9 857.7 672.4 891.5 677.1 894.8 746 942.2 841.4 912 869.5 834 873.9 821.6 874 819.5 874 756.7L874 692.1 868.4 684C853.7 662.7 820 660.1 802.4 679 791.8 690.2 791 694.8 791 747.5 791 809.1 788.1 818.6 766.6 828.4 742.5 839.4 737.6 836.3 654.8 757L584 689.3 584 500 584 310.7 654.8 243C737.6 163.7 742.5 160.6 766.6 171.6 788.1 181.4 791 190.8 791 252.9 791.1 306.7 792 311.4 804 322.6 822.4 339.9 854.1 336.6 868.4 316L874 307.9 874 243.3C874 180.5 873.9 178.4 869.5 166 848.2 106.9 786.6 72.6 723.9 85.1M500 500.1L500 666.2 383.3 665.6C251.5 664.8 253.1 665 219.7 648.6 96.7 588.2 95.6 412.7 217.8 352.1 251.8 335.2 259.5 334.4 389.2 334.2L500 334 500 500.1M736.3 376C720.4 380.9 707.2 398.5 707.1 414.8 707 432 710 436.7 741.9 469.2L772.2 500 741.9 530.8C710 563.3 707 568 707.1 585.2 707.2 611 733.4 630.8 759.6 625 770 622.7 771.9 621.2 801.8 591.6L833.2 560.6 861.4 589.1C893.6 621.5 900 625.6 917.2 625.7 939.9 625.8 957 610.2 958.6 587.9 960 568.5 957.7 564.6 924.1 530.8L893.7 500 924.1 469.2C957.7 435.3 960 431.5 958.6 411.9 957 389.7 939.9 374.2 917.1 374.3 900 374.4 893.6 378.6 861.4 410.9L833.2 439.4 801.8 408.5C764.7 371.8 759 369 736.3 376",
31 | "width": 1000
32 | },
33 | "search": [
34 | "mute"
35 | ]
36 | },
37 | {
38 | "uid": "c7ee00388f90ecc171c19efc5648bf4f",
39 | "css": "sound",
40 | "code": 59394,
41 | "src": "custom_icons",
42 | "selected": true,
43 | "svg": {
44 | "path": "M561.6 84C525.9 90.4 515.1 98.3 428.9 180.7L357.3 249 304.2 250.2C235.7 251.7 207.5 258.5 165.1 283.7 1.1 381.5 1.1 618.5 165.1 716.3 207.5 741.5 235.7 748.3 304.1 749.8L357.3 751 407.5 798.8C496.3 883.6 505.8 892.3 517.2 899.2 589.7 943.2 686.8 903.6 705.9 822.2 711.2 800 710.4 195.7 705.1 175 689.5 113.9 624.4 72.6 561.6 84M606 175C610.5 178.2 616.5 184.8 619.1 189.5L624 198.2 624 500 624 801.8 619.1 810.5C608.7 829.1 586.7 836.9 567.8 828.5 561.4 825.7 539.4 805.9 488.5 757.5L418.1 690.4 418.1 500 418.1 309.6 487.8 243.2C573.3 161.7 580.8 157.3 606 175M843 299.7C816.4 309.2 807.9 342.2 825.7 366.6 885.2 448.5 889.9 539.2 838.5 614.5 818.8 643.4 817.4 646.2 817.4 659.2 817.4 699.1 865.9 716.3 892.7 685.9 963.4 605.7 978.9 474.2 929.6 372.1 900.2 310.9 873.7 288.8 843 299.7M332 500.3L332 666.5 299.3 665.5C195.2 662.3 127.9 597.3 127.9 500 127.9 400.9 198.5 334.9 305.2 334.2L332 334 332 500.3M745.1 380.5C716.5 394.1 712 423 733.6 453.1 743.3 466.6 748 482.1 748 500 748 517.9 743.3 533.4 733.6 546.9 715.6 571.8 715.3 594 732.5 610.8 774.6 651.9 833 587.5 833 500 833 422.9 787.2 360.6 745.1 380.5",
45 | "width": 1000
46 | },
47 | "search": [
48 | "sound"
49 | ]
50 | },
51 | {
52 | "uid": "8d7048685cfa9c42e1dd8d12a1fde003",
53 | "css": "vibration",
54 | "code": 59395,
55 | "src": "custom_icons",
56 | "selected": true,
57 | "svg": {
58 | "path": "M367.2 66.5C312.1 80.7 267.8 125.3 253.9 180.5 247.8 204.6 247.8 795.3 253.9 819.5 267.6 874.4 313.1 919.9 368 933.6 391.8 939.6 608.3 939.6 632 933.6 686.9 919.9 732.4 874.4 746.1 819.5 752.2 795.3 752.2 204.7 746.1 180.5 732.4 125.6 686.9 80.1 632 66.4 608.6 60.5 390 60.6 367.2 66.5M621.9 130.5C651.9 141.6 673.9 164.6 683 194.3 688.5 212.5 688.5 787.5 683 805.7 673.9 835.4 652.1 858.2 621.9 869.6 605.5 875.8 401.8 876.5 381.8 870.5 350.5 860.9 325.5 835.7 317.1 805.2 311.5 784.9 311.4 212.7 317 194.3 328.2 157.8 357.9 132.3 395.5 127 423.9 123 609.4 125.9 621.9 130.5M420.4 160.1C410.9 166 406.3 174.9 406.3 187.5 406.3 217.2 410.8 218.7 500 218.7 581.8 218.7 581.2 218.8 589.9 204.6 598.5 190.4 593.5 168.6 579.6 160.1 569.8 154.1 430.2 154.1 420.4 160.1M76.6 347.6C61.7 356.8 62.5 347.9 62.5 500 62.5 632 62.6 635.9 66.4 642.1 78.1 661.4 109.4 661.4 121.1 642.1 127.2 632.2 127.2 367.8 121.1 357.9 112.7 344 90.8 339 76.6 347.6M889.1 347.6C874.2 356.8 875 347.9 875 500 875 632 875.1 635.9 878.9 642.1 890.6 661.4 921.9 661.4 933.6 642.1 939.7 632.2 939.7 367.8 933.6 357.9 925.2 344 903.3 339 889.1 347.6M170.4 378.9C155.7 387.8 156.3 383.1 156.3 500 156.3 616.9 155.7 612.2 170.4 621.1 184.6 629.7 206.4 624.7 214.9 610.9 220.9 600.9 220.9 399.1 214.9 389.1 206.4 375.3 184.6 370.3 170.4 378.9M795.4 378.9C780.7 387.8 781.3 383.1 781.3 500 781.3 616.9 780.7 612.2 795.4 621.1 809.6 629.7 831.4 624.7 839.9 610.9 845.9 600.9 845.9 399.1 839.9 389.1 831.4 375.3 809.6 370.3 795.4 378.9M475 722.9C424.8 742.2 425.2 820.8 475.6 839.7 519.3 856 562.5 827 562.5 781.3 562.5 735.4 518.6 706.2 475 722.9",
59 | "width": 1000
60 | },
61 | "search": [
62 | "vibration"
63 | ]
64 | },
65 | {
66 | "uid": "d66b4f3bf8427f7d6eca39c5f276234d",
67 | "css": "vibration_off",
68 | "code": 59396,
69 | "src": "custom_icons",
70 | "selected": true,
71 | "svg": {
72 | "path": "M405 62.3C336.7 65.6 292.5 92.7 265 148.1 250 178.4 250 178.4 248.7 445L247.5 686.3 157.5 773.6 67.6 860.9 80.7 875.2C87.9 883 94.5 889.3 95.3 889.1 96.2 888.9 131.1 855.8 172.8 815.5L248.8 742.3 250.2 780.6C252.4 835.5 261.9 859.5 295 892.7 337.3 935.2 351.7 938.4 500 938.4 648.3 938.4 662.5 935.3 705.2 892.7 751.8 846 750.3 858.3 751.2 527.6L752.1 256.5 780.4 228.8C796 213.5 830.5 180.1 857 154.6L905.3 108.1 891.6 93.4 877.8 78.8 862 94C853.4 102.3 825 129.6 799 154.7 773.1 179.7 751.2 199.6 750.5 198.8 749.8 198.1 748.3 191.1 747.2 183.2 740.3 132.3 683.4 74.8 630.1 65 612.6 61.7 455.5 59.9 405 62.3M629 135.9C665.8 152.7 681.2 179.2 683.7 230.2L685.4 264.2 509.4 434.2C412.7 527.7 329.3 608 324.1 612.6L314.6 620.9 315.4 409.8 316.3 198.8 324 182.5C336.1 157 355.6 140.2 383.8 130.9 391.6 128.3 417.7 127.7 503.8 128.2L613.8 128.9 629 135.9M431.3 156.5C428.5 157.2 423.7 158.2 420.5 158.9 402.4 162.8 398.8 205.2 415.9 214.4 425.8 219.8 556.7 222.4 574.6 217.6 597.9 211.3 602.6 171.4 581.5 159.3 576.3 156.3 442.9 153.8 431.3 156.5M684.5 577.5L683.8 801.3 676.8 816.3C667.9 835.2 650.6 853.1 631.3 863.3L616.3 871.3 501.3 871.3 386.3 871.3 371.9 864.5C327.2 843.6 317.9 823.1 315.8 740.9L314.3 678.8 499 500.4 683.8 322.1 684.5 337.9C685 346.6 685 454.4 684.5 577.5M73.8 347.4C62.6 354.8 62.9 351.5 62.7 500.6L62.5 639.9 69.8 648.1C76.6 655.7 78.1 656.3 93.5 656.3 121.4 656.3 122.9 653.6 125.7 595.8 128.2 543.8 126.2 373.1 123 361.3 118.4 344.5 90.3 336.6 73.8 347.4M886.3 347.4C875.1 354.8 875.4 351.5 875.2 500.6L875 639.9 882.3 648.1C889.1 655.7 890.6 656.3 906 656.3 933.9 656.3 935.4 653.6 938.2 595.8 940.7 543.8 938.7 373.1 935.5 361.3 930.9 344.5 902.8 336.6 886.3 347.4M170.7 377.4C163.3 380.8 159.6 384.2 158.2 389.2 155.7 398.4 155.7 601.6 158.2 610.8 162.9 627.7 194.9 631.7 210.9 617.4L218.8 610.4 218.8 500.4 218.8 390.4 212.7 383.9C202 372.5 186.7 370.1 170.7 377.4M795.7 377.4C788.3 380.8 784.6 384.2 783.2 389.2 780.6 398.4 780.7 601.6 783.2 610.8 787.9 627.7 819.9 631.7 835.9 617.4L843.8 610.4 843.8 500.4 843.8 390.4 837.7 383.9C827 372.5 811.7 370.1 795.7 377.4M471.1 723.3C422.8 746.3 426 822.2 476 841.3 533.1 863.1 586 798.4 553.7 746.1 537.3 719.7 500.3 709.4 471.1 723.3",
73 | "width": 1000
74 | },
75 | "search": [
76 | "vibration_off"
77 | ]
78 | },
79 | {
80 | "uid": "f31858df2cbafba6481862c42dc00915",
81 | "css": "grid",
82 | "code": 59398,
83 | "src": "custom_icons",
84 | "selected": true,
85 | "svg": {
86 | "path": "M126.5 66.3C98.2 75.3 73.9 100.2 65.6 128.8 60.9 144.7 60.9 386.5 65.6 402.5 74 431.4 98.3 456.1 127.1 465.1 145.4 470.8 385.8 470.8 404.1 465.1 432.9 456.1 457.2 431.4 465.7 402.5 470.3 386.5 470.3 144.7 465.7 128.8 457.2 99.9 432.9 75.2 404.1 66.2 386.1 60.6 144 60.7 126.5 66.3M595.2 66.3C566.9 75.3 542.7 100.2 534.3 128.8 529.7 144.7 529.7 386.5 534.3 402.5 542.8 431.4 567.1 456.1 595.9 465.1 614.2 470.8 854.5 470.8 872.9 465.1 901.7 456.1 926 431.4 934.4 402.5 939.1 386.5 939.1 144.7 934.4 128.8 926 99.9 901.7 75.2 872.9 66.2 854.9 60.6 612.8 60.7 595.2 66.3M379.7 126.9C405.9 132.9 405.3 129.7 405.3 265.6 405.3 401.5 405.9 398.3 379.7 404.4 369.7 406.7 161.5 406.7 151.5 404.4 125.4 398.3 126 401.5 126 265.6 126 130.5 125.5 132.9 150.6 127 159.9 124.8 370.4 124.7 379.7 126.9M848.5 126.9C874.6 132.9 874 129.7 874 265.6 874 401.5 874.6 398.3 848.5 404.4 838.5 406.7 630.3 406.7 620.3 404.4 594.1 398.3 594.7 401.5 594.7 265.6 594.7 130.5 594.3 132.9 619.4 127 628.6 124.8 839.1 124.7 848.5 126.9M126.5 535C98.2 544.1 73.9 569 65.6 597.5 60.9 613.5 60.9 855.3 65.6 871.2 74 900.1 98.3 924.8 127.1 933.8 145.4 939.5 385.8 939.5 404.1 933.8 432.9 924.8 457.2 900.1 465.7 871.2 470.3 855.3 470.3 613.5 465.7 597.5 457.2 568.6 432.9 543.9 404.1 534.9 386.1 529.4 144 529.4 126.5 535M547.3 534.5C534.9 540.6 529.1 554.9 532.1 571.7 533.3 578.2 542.7 588.3 611 656.8L688.4 734.4 611.9 811C569.8 853.2 534.4 890.2 533.3 893.2 525.9 913.1 537.2 934.4 556.6 937 575.5 939.5 572.6 941.7 656.7 857.8L734.4 780.3 812 857.8C896.1 941.7 893.3 939.5 912.1 937 931.5 934.4 942.9 913.1 935.5 893.2 934.3 890.2 899 853.2 856.9 811L780.3 734.4 856.7 657.7C939 575.2 937.5 577 937.5 563.4 937.5 540.8 920.8 527.8 897.1 532.1 890.5 533.3 880.4 542.7 812 611L734.4 688.4 657.7 611.9C615.5 569.8 578.6 534.4 575.6 533.3 567.6 530.3 554.7 530.9 547.3 534.5M379.7 595.6C405.9 601.7 405.3 598.5 405.3 734.4 405.3 870.3 405.9 867.1 379.7 873.1 369.7 875.4 161.5 875.4 151.5 873.1 125.4 867.1 126 870.3 126 734.4 126 599.2 125.5 601.6 150.6 595.7 159.9 593.5 370.4 593.4 379.7 595.6",
87 | "width": 1000
88 | },
89 | "search": [
90 | "grid"
91 | ]
92 | },
93 | {
94 | "uid": "ba216ae4682f58bee75b880dafdae983",
95 | "css": "brightness",
96 | "code": 59399,
97 | "src": "custom_icons",
98 | "selected": true,
99 | "svg": {
100 | "path": "M480.5 3.8C460 14.7 457 24.1 457 76.9 457.1 124 458.1 129.9 469.2 141.8 490.8 165.3 532.5 156.1 540.8 126 544.3 113.4 543.6 37.6 540 27.1 531.9 4.2 501.9-7.6 480.5 3.8M460 188.7C223.5 223 108 489.7 245.7 683.5 334.2 808 507.7 849.2 644.5 778.1 868.6 661.7 868.6 338.2 644.5 221.9 592.2 194.8 514.4 180.8 460 188.7M95.7 234.3C63.3 240.8 50.2 283.3 73.7 305.5 82.4 313.7 148.1 347.1 158.6 348.6 191.5 353.6 217.7 318.1 203.2 288.2 197 275.5 190.6 270.9 151.4 251.8 115.5 234.3 107.8 231.8 95.7 234.3M886.3 234.6C872.5 237.8 812 269.5 804.3 277.6 779 304.1 798.5 348.6 835.5 348.6 849.2 348.6 913.7 318.2 926.3 305.7 956 276.4 927.1 225.1 886.3 234.6M151.4 653C138.5 657.3 78.9 689.2 73.2 694.9 53.2 714.7 60.5 749.6 87.6 763.6 107.9 774.1 190.9 737.1 203 712.2 219.1 678.8 186.5 641.4 151.4 653M822 653.1C792 663.8 783.1 701.3 805.4 723.3 818.7 736.5 880.5 765.9 894.8 765.9 922.6 765.9 939 748.2 937.2 720 935.8 699.1 931.7 695 891.4 673.8 846.6 650.2 837.6 647.5 822 653.1M486.1 846.8C475.1 850.2 462.2 863.4 459.1 874.3 456.3 884.6 456.4 961.3 459.3 970.9 470.6 1008.9 526.8 1010.3 540 972.9 543.6 962.6 544.3 886.6 540.9 874.3 534.7 852.3 509.5 839.6 486.1 846.8",
101 | "width": 1000
102 | },
103 | "search": [
104 | "brightness"
105 | ]
106 | },
107 | {
108 | "uid": "6ae07062287078d1b411bab00d3ae34e",
109 | "css": "movements",
110 | "code": 59400,
111 | "src": "custom_icons",
112 | "selected": true,
113 | "svg": {
114 | "path": "M230.2 212.5C211 222.5 202.4 244.9 210 265.2 212.9 273.1 229.3 290.3 325.9 387.2L438.4 500 325.9 612.8C202.7 736.3 205.5 733 207.5 753.7 210.3 783.1 243.7 801.7 269.5 788.3 278.5 783.7 533.7 528.5 538.3 519.5 544 508.6 543.3 489.5 536.8 478.5 528.2 464.2 278.3 215.9 267.6 211.1 255 205.4 242.9 205.9 230.2 212.5M494.1 210.8C466.1 216.4 451.4 246.8 464.2 272.4 465.9 275.7 517 328.2 577.8 389.2L688.4 500 575.9 612.8C452.7 736.3 455.5 733 457.4 753.7 460.3 783.1 493.7 801.7 519.5 788.3 523.3 786.4 585 726.2 656.6 654.6 804.2 507 796.2 516.7 791 490.7L788.7 479.5 657.6 348.2C585.5 275.9 523.8 215.6 520.6 214.1 512.5 210.4 502.4 209.2 494.1 210.8",
115 | "width": 1000
116 | },
117 | "search": [
118 | "movements"
119 | ]
120 | },
121 | {
122 | "uid": "faecfb3c03f0cafc14950f89ea97532b",
123 | "css": "dark_mode",
124 | "code": 59401,
125 | "src": "custom_icons",
126 | "selected": true,
127 | "svg": {
128 | "path": "M454.1 2.2C83.5 46.5-110.5 467.4 96.3 778.3 320.4 1115.2 839.9 1055.9 981.2 677.3 998.1 632.1 975.3 609.9 933.6 630.9 817.4 689.3 684.2 666.8 596.7 573.8 455.4 423.7 516.6 179.1 712.2 112 748.4 99.6 758.4 84.7 745.6 62.1 736.1 45.1 661 17.3 593.8 5.7 565.9 0.9 482.5-1.2 454.1 2.2",
129 | "width": 1000
130 | },
131 | "search": [
132 | "dark_mode"
133 | ]
134 | },
135 | {
136 | "uid": "b620bb1a08b74ab3e1db89031e4c31ba",
137 | "css": "heart",
138 | "code": 59397,
139 | "src": "custom_icons",
140 | "selected": true,
141 | "svg": {
142 | "path": "M232.4 57.7C94.6 81.6 0.1 202.4 0.1 354.5 0.1 482.6 60 580.1 234.1 735.4 316.4 808.7 464.8 934.4 474.6 939.2 489.8 946.5 510.2 946.5 525.4 939.2 540.4 932 749.6 752 819.5 686.1 972.1 542.5 1024.9 416.4 991.5 275.4 937.5 47.4 664.1-23.2 516.4 152.8 498.1 174.6 501.9 174.6 483.6 152.8 420 77 326 41.5 232.4 57.7",
143 | "width": 1000
144 | },
145 | "search": [
146 | "heart"
147 | ]
148 | }
149 | ]
150 | }
--------------------------------------------------------------------------------
/assets/icons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/icons/icon.png
--------------------------------------------------------------------------------
/assets/images/dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/images/dash.png
--------------------------------------------------------------------------------
/assets/images/hero-dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/images/hero-dash.png
--------------------------------------------------------------------------------
/assets/images/jungle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/images/jungle.png
--------------------------------------------------------------------------------
/assets/images/numeric-puzzle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/images/numeric-puzzle.png
--------------------------------------------------------------------------------
/assets/images/relax-dash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/images/relax-dash.png
--------------------------------------------------------------------------------
/assets/rive/winner.riv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/rive/winner.riv
--------------------------------------------------------------------------------
/assets/sounds/cat.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/cat.mp3
--------------------------------------------------------------------------------
/assets/sounds/dog.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/dog.mp3
--------------------------------------------------------------------------------
/assets/sounds/fox.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/fox.mp3
--------------------------------------------------------------------------------
/assets/sounds/koala.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/koala.mp3
--------------------------------------------------------------------------------
/assets/sounds/lion.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/lion.mp3
--------------------------------------------------------------------------------
/assets/sounds/monkey.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/monkey.mp3
--------------------------------------------------------------------------------
/assets/sounds/mouse.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/mouse.mp3
--------------------------------------------------------------------------------
/assets/sounds/panda.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/panda.mp3
--------------------------------------------------------------------------------
/assets/sounds/penguin.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/penguin.mp3
--------------------------------------------------------------------------------
/assets/sounds/pull-out.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/pull-out.mp3
--------------------------------------------------------------------------------
/assets/sounds/tiger.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/assets/sounds/tiger.mp3
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "build/web",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/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 | 9.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/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | #platform :ios, '12.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | end
36 |
37 | post_install do |installer|
38 | installer.pods_project.targets.each do |target|
39 | flutter_additional_ios_build_settings(target)
40 |
41 | # ADD THE NEXT SECTION
42 | target.build_configurations.each do |config|
43 | config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
44 | '$(inherited)',
45 | 'AUDIO_SESSION_MICROPHONE=0'
46 | ]
47 | end
48 | end
49 | end
50 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - audio_session (0.0.1):
3 | - Flutter
4 | - Flutter (1.0.0)
5 | - just_audio (0.0.1):
6 | - Flutter
7 | - path_provider_ios (0.0.1):
8 | - Flutter
9 | - shared_preferences_ios (0.0.1):
10 | - Flutter
11 |
12 | DEPENDENCIES:
13 | - audio_session (from `.symlinks/plugins/audio_session/ios`)
14 | - Flutter (from `Flutter`)
15 | - just_audio (from `.symlinks/plugins/just_audio/ios`)
16 | - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
17 | - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`)
18 |
19 | EXTERNAL SOURCES:
20 | audio_session:
21 | :path: ".symlinks/plugins/audio_session/ios"
22 | Flutter:
23 | :path: Flutter
24 | just_audio:
25 | :path: ".symlinks/plugins/just_audio/ios"
26 | path_provider_ios:
27 | :path: ".symlinks/plugins/path_provider_ios/ios"
28 | shared_preferences_ios:
29 | :path: ".symlinks/plugins/shared_preferences_ios/ios"
30 |
31 | SPEC CHECKSUMS:
32 | audio_session: 4f3e461722055d21515cf3261b64c973c062f345
33 | Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a
34 | just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
35 | path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5
36 | shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32
37 |
38 | PODFILE CHECKSUM: 66bbd5299d7b1f708996813bfb657e12403bc5e0
39 |
40 | COCOAPODS: 1.11.2
41 |
--------------------------------------------------------------------------------
/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.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/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/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/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/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/darwin-morocho/flutter-puzzle-hack/7b9635ce08f4e3982d8eebdbc664c62de6f538b9/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/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/Base.lproj/LaunchScreen.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 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/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 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Slide Puzzle
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleLocalizations
16 |
17 | en
18 | es
19 |
20 | CFBundleName
21 | my_puzzle
22 | CFBundlePackageType
23 | APPL
24 | CFBundleShortVersionString
25 | $(FLUTTER_BUILD_NAME)
26 | CFBundleSignature
27 | ????
28 | CFBundleVersion
29 | $(CURRENT_PROJECT_VERSION)
30 | LSRequiresIPhoneOS
31 |
32 | UILaunchStoryboardName
33 | LaunchScreen
34 | UIMainStoryboardFile
35 | Main
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UISupportedInterfaceOrientations~ipad
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationPortraitUpsideDown
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 | UIViewControllerBasedStatusBarAppearance
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/generated/intl/messages_all.dart:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
2 | // This is a library that looks up messages for specific locales by
3 | // delegating to the appropriate library.
4 |
5 | // Ignore issues from commonly used lints in this file.
6 | // ignore_for_file:implementation_imports, file_names, unnecessary_new
7 | // ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering
8 | // ignore_for_file:argument_type_not_assignable, invalid_assignment
9 | // ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases
10 | // ignore_for_file:comment_references
11 |
12 | import 'dart:async';
13 |
14 | import 'package:intl/intl.dart';
15 | import 'package:intl/message_lookup_by_library.dart';
16 | import 'package:intl/src/intl_helpers.dart';
17 |
18 | import 'messages_en.dart' as messages_en;
19 | import 'messages_es.dart' as messages_es;
20 |
21 | typedef Future LibraryLoader();
22 | Map _deferredLibraries = {
23 | 'en': () => new Future.value(null),
24 | 'es': () => new Future.value(null),
25 | };
26 |
27 | MessageLookupByLibrary? _findExact(String localeName) {
28 | switch (localeName) {
29 | case 'en':
30 | return messages_en.messages;
31 | case 'es':
32 | return messages_es.messages;
33 | default:
34 | return null;
35 | }
36 | }
37 |
38 | /// User programs should call this before using [localeName] for messages.
39 | Future initializeMessages(String localeName) async {
40 | var availableLocale = Intl.verifiedLocale(
41 | localeName, (locale) => _deferredLibraries[locale] != null,
42 | onFailure: (_) => null);
43 | if (availableLocale == null) {
44 | return new Future.value(false);
45 | }
46 | var lib = _deferredLibraries[availableLocale];
47 | await (lib == null ? new Future.value(false) : lib());
48 | initializeInternalMessageLookup(() => new CompositeMessageLookup());
49 | messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor);
50 | return new Future.value(true);
51 | }
52 |
53 | bool _messagesExistFor(String locale) {
54 | try {
55 | return _findExact(locale) != null;
56 | } catch (e) {
57 | return false;
58 | }
59 | }
60 |
61 | MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) {
62 | var actualLocale =
63 | Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null);
64 | if (actualLocale == null) return null;
65 | return _findExact(actualLocale);
66 | }
67 |
--------------------------------------------------------------------------------
/lib/generated/intl/messages_en.dart:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
2 | // This is a library that provides messages for a en locale. All the
3 | // messages from the main program should be duplicated here with the same
4 | // function name.
5 |
6 | // Ignore issues from commonly used lints in this file.
7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
12 |
13 | import 'package:intl/intl.dart';
14 | import 'package:intl/message_lookup_by_library.dart';
15 |
16 | final messages = new MessageLookup();
17 |
18 | typedef String MessageIfAbsent(String messageStr, List args);
19 |
20 | class MessageLookup extends MessageLookupByLibrary {
21 | String get localeName => 'en';
22 |
23 | final messages = _notInlinedMessages(_notInlinedMessages);
24 | static Map _notInlinedMessages(_) => {
25 | "are_you_sure": MessageLookupByLibrary.simpleMessage("Are you sure?"),
26 | "back_to_game":
27 | MessageLookupByLibrary.simpleMessage("back to the game"),
28 | "completed": MessageLookupByLibrary.simpleMessage(
29 | "You have completed the puzzle"),
30 | "dou_you_really": MessageLookupByLibrary.simpleMessage(
31 | "Do you really want to restart the current puzzle"),
32 | "great_job": MessageLookupByLibrary.simpleMessage("GREAT JOB!"),
33 | "movements": MessageLookupByLibrary.simpleMessage("moves"),
34 | "no": MessageLookupByLibrary.simpleMessage("NO"),
35 | "ok": MessageLookupByLibrary.simpleMessage("OK"),
36 | "privacy": MessageLookupByLibrary.simpleMessage(
37 | "This is a free non-profit game, the game does not collect information of any kind from users or their traffic, it does not need internet."),
38 | "restart": MessageLookupByLibrary.simpleMessage("Restart"),
39 | "start": MessageLookupByLibrary.simpleMessage("START"),
40 | "time": MessageLookupByLibrary.simpleMessage("Time"),
41 | "yes": MessageLookupByLibrary.simpleMessage("YES")
42 | };
43 | }
44 |
--------------------------------------------------------------------------------
/lib/generated/intl/messages_es.dart:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
2 | // This is a library that provides messages for a es locale. All the
3 | // messages from the main program should be duplicated here with the same
4 | // function name.
5 |
6 | // Ignore issues from commonly used lints in this file.
7 | // ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
8 | // ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
9 | // ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
10 | // ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes
11 | // ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes
12 |
13 | import 'package:intl/intl.dart';
14 | import 'package:intl/message_lookup_by_library.dart';
15 |
16 | final messages = new MessageLookup();
17 |
18 | typedef String MessageIfAbsent(String messageStr, List args);
19 |
20 | class MessageLookup extends MessageLookupByLibrary {
21 | String get localeName => 'es';
22 |
23 | final messages = _notInlinedMessages(_notInlinedMessages);
24 | static Map _notInlinedMessages(_) => {
25 | "are_you_sure": MessageLookupByLibrary.simpleMessage("¿Estás seguro?"),
26 | "back_to_game":
27 | MessageLookupByLibrary.simpleMessage("Regresar al juego"),
28 | "completed": MessageLookupByLibrary.simpleMessage(
29 | "Has completado el rompecabezas"),
30 | "dou_you_really": MessageLookupByLibrary.simpleMessage(
31 | "Realmente quieres reiniciar el rompecabezas actual"),
32 | "great_job": MessageLookupByLibrary.simpleMessage("¡GRAN TRABAJO!"),
33 | "movements": MessageLookupByLibrary.simpleMessage("movimientos"),
34 | "no": MessageLookupByLibrary.simpleMessage("NO"),
35 | "ok": MessageLookupByLibrary.simpleMessage("ACEPTAR"),
36 | "privacy": MessageLookupByLibrary.simpleMessage(
37 | "Este es un juego gratuito sin fines de lucro, el juego no recolecta información de ningun tipo de los usuarios ni tampoco de su trafico, no necesita internet."),
38 | "restart": MessageLookupByLibrary.simpleMessage("Reiniciar"),
39 | "start": MessageLookupByLibrary.simpleMessage("INICIAR"),
40 | "time": MessageLookupByLibrary.simpleMessage("Tiempo"),
41 | "yes": MessageLookupByLibrary.simpleMessage("SI")
42 | };
43 | }
44 |
--------------------------------------------------------------------------------
/lib/generated/l10n.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 | import 'package:flutter/material.dart';
3 | import 'package:intl/intl.dart';
4 | import 'intl/messages_all.dart';
5 |
6 | // **************************************************************************
7 | // Generator: Flutter Intl IDE plugin
8 | // Made by Localizely
9 | // **************************************************************************
10 |
11 | // ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars
12 | // ignore_for_file: join_return_with_assignment, prefer_final_in_for_each
13 | // ignore_for_file: avoid_redundant_argument_values, avoid_escaping_inner_quotes
14 |
15 | class S {
16 | S();
17 |
18 | static S? _current;
19 |
20 | static S get current {
21 | assert(_current != null,
22 | 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.');
23 | return _current!;
24 | }
25 |
26 | static const AppLocalizationDelegate delegate = AppLocalizationDelegate();
27 |
28 | static Future load(Locale locale) {
29 | final name = (locale.countryCode?.isEmpty ?? false)
30 | ? locale.languageCode
31 | : locale.toString();
32 | final localeName = Intl.canonicalizedLocale(name);
33 | return initializeMessages(localeName).then((_) {
34 | Intl.defaultLocale = localeName;
35 | final instance = S();
36 | S._current = instance;
37 |
38 | return instance;
39 | });
40 | }
41 |
42 | static S of(BuildContext context) {
43 | final instance = S.maybeOf(context);
44 | assert(instance != null,
45 | 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?');
46 | return instance!;
47 | }
48 |
49 | static S? maybeOf(BuildContext context) {
50 | return Localizations.of(context, S);
51 | }
52 |
53 | /// `Are you sure?`
54 | String get are_you_sure {
55 | return Intl.message(
56 | 'Are you sure?',
57 | name: 'are_you_sure',
58 | desc: '',
59 | args: [],
60 | );
61 | }
62 |
63 | /// `YES`
64 | String get yes {
65 | return Intl.message(
66 | 'YES',
67 | name: 'yes',
68 | desc: '',
69 | args: [],
70 | );
71 | }
72 |
73 | /// `NO`
74 | String get no {
75 | return Intl.message(
76 | 'NO',
77 | name: 'no',
78 | desc: '',
79 | args: [],
80 | );
81 | }
82 |
83 | /// `Do you really want to restart the current puzzle`
84 | String get dou_you_really {
85 | return Intl.message(
86 | 'Do you really want to restart the current puzzle',
87 | name: 'dou_you_really',
88 | desc: '',
89 | args: [],
90 | );
91 | }
92 |
93 | /// `moves`
94 | String get movements {
95 | return Intl.message(
96 | 'moves',
97 | name: 'movements',
98 | desc: '',
99 | args: [],
100 | );
101 | }
102 |
103 | /// `Restart`
104 | String get restart {
105 | return Intl.message(
106 | 'Restart',
107 | name: 'restart',
108 | desc: '',
109 | args: [],
110 | );
111 | }
112 |
113 | /// `START`
114 | String get start {
115 | return Intl.message(
116 | 'START',
117 | name: 'start',
118 | desc: '',
119 | args: [],
120 | );
121 | }
122 |
123 | /// `GREAT JOB!`
124 | String get great_job {
125 | return Intl.message(
126 | 'GREAT JOB!',
127 | name: 'great_job',
128 | desc: '',
129 | args: [],
130 | );
131 | }
132 |
133 | /// `You have completed the puzzle`
134 | String get completed {
135 | return Intl.message(
136 | 'You have completed the puzzle',
137 | name: 'completed',
138 | desc: '',
139 | args: [],
140 | );
141 | }
142 |
143 | /// `Time`
144 | String get time {
145 | return Intl.message(
146 | 'Time',
147 | name: 'time',
148 | desc: '',
149 | args: [],
150 | );
151 | }
152 |
153 | /// `OK`
154 | String get ok {
155 | return Intl.message(
156 | 'OK',
157 | name: 'ok',
158 | desc: '',
159 | args: [],
160 | );
161 | }
162 |
163 | /// `This is a free non-profit game, the game does not collect information of any kind from users or their traffic, it does not need internet.`
164 | String get privacy {
165 | return Intl.message(
166 | 'This is a free non-profit game, the game does not collect information of any kind from users or their traffic, it does not need internet.',
167 | name: 'privacy',
168 | desc: '',
169 | args: [],
170 | );
171 | }
172 |
173 | /// `back to the game`
174 | String get back_to_game {
175 | return Intl.message(
176 | 'back to the game',
177 | name: 'back_to_game',
178 | desc: '',
179 | args: [],
180 | );
181 | }
182 | }
183 |
184 | class AppLocalizationDelegate extends LocalizationsDelegate {
185 | const AppLocalizationDelegate();
186 |
187 | List get supportedLocales {
188 | return const [
189 | Locale.fromSubtags(languageCode: 'en'),
190 | Locale.fromSubtags(languageCode: 'es'),
191 | ];
192 | }
193 |
194 | @override
195 | bool isSupported(Locale locale) => _isSupported(locale);
196 | @override
197 | Future load(Locale locale) => S.load(locale);
198 | @override
199 | bool shouldReload(AppLocalizationDelegate old) => false;
200 |
201 | bool _isSupported(Locale locale) {
202 | for (var supportedLocale in supportedLocales) {
203 | if (supportedLocale.languageCode == locale.languageCode) {
204 | return true;
205 | }
206 | }
207 | return false;
208 | }
209 | }
210 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:my_puzzle/src/inject_dependencies.dart';
3 | import 'package:url_strategy/url_strategy.dart';
4 | import 'src/my_app.dart';
5 |
6 | void main() async{
7 | setPathUrlStrategy();
8 | WidgetsFlutterBinding.ensureInitialized();
9 | await injectDependencies();
10 | runApp(const MyApp());
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/lib/src/data/repositories_impl/audio_repository_impl.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:just_audio/just_audio.dart';
3 | import 'package:my_puzzle/src/domain/repositories/audio_repository.dart';
4 |
5 | class AudioRepositoryImpl implements AudioRepository {
6 | bool _isPlaying = false;
7 | final AudioPlayer _player;
8 |
9 | AudioRepositoryImpl(this._player) {
10 | _player.setVolume(0.5);
11 | }
12 |
13 | @override
14 | Future playMove() async {
15 | if (_isPlaying) {
16 | return;
17 | }
18 |
19 | _isPlaying = true;
20 | final duration = await _player.setAsset(
21 | 'assets/sounds/pull-out.mp3',
22 | );
23 | if (duration != null) {
24 | unawaited(_player.play());
25 | }
26 | _isPlaying = false;
27 | }
28 |
29 | @override
30 | Future playWinner() async {}
31 |
32 | @override
33 | Future dispose() {
34 | return _player.dispose();
35 | }
36 |
37 | @override
38 | Future play(String asset) async {
39 | final duration = await _player.setAsset(
40 | asset,
41 | );
42 | if (duration != null) {
43 | unawaited(_player.play());
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/src/data/repositories_impl/images_repository_impl.dart:
--------------------------------------------------------------------------------
1 | import 'dart:typed_data';
2 | import 'dart:math' as math;
3 | import 'package:flutter/foundation.dart';
4 | import 'package:flutter/services.dart';
5 | import 'package:image/image.dart';
6 | import 'package:my_puzzle/src/domain/models/puzzle_image.dart';
7 | import 'package:my_puzzle/src/domain/repositories/images_repository.dart';
8 |
9 | const puzzleOptions = [
10 | PuzzleImage(
11 | name: 'Numeric',
12 | assetPath: 'assets/images/numeric-puzzle.png',
13 | soundPath: '',
14 | ),
15 | PuzzleImage(
16 | name: 'Lion',
17 | assetPath: 'assets/animals/lion.png',
18 | soundPath: 'assets/sounds/lion.mp3',
19 | ),
20 | PuzzleImage(
21 | name: 'Cat',
22 | assetPath: 'assets/animals/cat.png',
23 | soundPath: 'assets/sounds/cat.mp3',
24 | ),
25 | PuzzleImage(
26 | name: 'Dog',
27 | assetPath: 'assets/animals/dog.png',
28 | soundPath: 'assets/sounds/dog.mp3',
29 | ),
30 | PuzzleImage(
31 | name: 'Fox',
32 | assetPath: 'assets/animals/fox.png',
33 | soundPath: 'assets/sounds/fox.mp3',
34 | ),
35 | PuzzleImage(
36 | name: 'Koala',
37 | assetPath: 'assets/animals/koala.png',
38 | soundPath: 'assets/sounds/koala.mp3',
39 | ),
40 | PuzzleImage(
41 | name: 'Monkey',
42 | assetPath: 'assets/animals/monkey.png',
43 | soundPath: 'assets/sounds/monkey.mp3',
44 | ),
45 | PuzzleImage(
46 | name: 'Mouse',
47 | assetPath: 'assets/animals/mouse.png',
48 | soundPath: 'assets/sounds/mouse.mp3',
49 | ),
50 | PuzzleImage(
51 | name: 'Panda',
52 | assetPath: 'assets/animals/panda.png',
53 | soundPath: 'assets/sounds/panda.mp3',
54 | ),
55 | PuzzleImage(
56 | name: 'Penguin',
57 | assetPath: 'assets/animals/penguin.png',
58 | soundPath: 'assets/sounds/penguin.mp3',
59 | ),
60 | PuzzleImage(
61 | name: 'Tiger',
62 | assetPath: 'assets/animals/tiger.png',
63 | soundPath: 'assets/sounds/tiger.mp3',
64 | ),
65 | ];
66 |
67 | Future decodeAsset(ByteData bytes) async {
68 | return decodeImage(
69 | bytes.buffer.asUint8List(),
70 | )!;
71 | }
72 |
73 | class SPlitData {
74 | final Image image;
75 | final int crossAxisCount;
76 |
77 | SPlitData(this.image, this.crossAxisCount);
78 | }
79 |
80 | Future> splitImage(SPlitData data) {
81 | final image = data.image;
82 | final crossAxisCount = data.crossAxisCount;
83 | final int length = (image.width / crossAxisCount).round();
84 | List pieceList = [];
85 |
86 | for (int y = 0; y < crossAxisCount; y++) {
87 | for (int x = 0; x < crossAxisCount; x++) {
88 | pieceList.add(
89 | Uint8List.fromList(
90 | encodePng(
91 | copyCrop(
92 | image,
93 | x * length,
94 | y * length,
95 | length,
96 | length,
97 | ),
98 | ),
99 | ),
100 | );
101 | }
102 | }
103 | return Future.value(pieceList);
104 | }
105 |
106 | class ImagesRepositoryImpl implements ImagesRepository {
107 | Map cache = {};
108 |
109 | @override
110 | Future> split(String asset, int crossAxisCount) async {
111 | late Image image;
112 | if (cache.containsKey(asset)) {
113 | image = cache[asset]!;
114 | } else {
115 | final bytes = await rootBundle.load(asset);
116 |
117 | /// use compute because theimage package is a pure dart package
118 | /// so to avoid bad ui performance we do this task in a different
119 | /// isolate
120 | image = await compute(decodeAsset, bytes);
121 |
122 | final width = math.min(image.width, image.height);
123 |
124 | /// convert to square
125 | image = copyResizeCropSquare(image, width);
126 | cache[asset] = image;
127 | }
128 |
129 | final pieces = await compute(
130 | splitImage,
131 | SPlitData(image, crossAxisCount),
132 | );
133 |
134 | return pieces;
135 | }
136 | }
137 |
--------------------------------------------------------------------------------
/lib/src/data/repositories_impl/settings_repository_impl.dart:
--------------------------------------------------------------------------------
1 | import 'package:my_puzzle/src/domain/repositories/settings_repository.dart';
2 | import 'package:shared_preferences/shared_preferences.dart';
3 |
4 | const darkModeKey = 'darkModeKey';
5 |
6 | class SettingsRepositoryImpl implements SettingsRepository {
7 | final SharedPreferences _preferences;
8 |
9 | SettingsRepositoryImpl(this._preferences);
10 |
11 | @override
12 | bool get isDarkMode => _preferences.getBool(darkModeKey) ?? false;
13 |
14 | @override
15 | Future updateDarkMode(bool isDark) {
16 | return _preferences.setBool(darkModeKey, isDark);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/src/domain/models/move_to.dart:
--------------------------------------------------------------------------------
1 | enum MoveTo { up, down, left, right }
2 |
3 | extension MoveToExt on String {
4 | /// hable the keyboard events and return
5 | /// the direction for the move
6 | MoveTo? get moveTo {
7 | switch (this) {
8 | case "W":
9 | case "Arrow Up":
10 | return MoveTo.up;
11 | case "S":
12 | case "Arrow Down":
13 | return MoveTo.down;
14 | case "A":
15 | case "Arrow Left":
16 | return MoveTo.left;
17 | case "D":
18 | case "Arrow Right":
19 | return MoveTo.right;
20 | }
21 | return null;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/src/domain/models/position.dart:
--------------------------------------------------------------------------------
1 | import 'package:equatable/equatable.dart';
2 |
3 | class Position extends Equatable {
4 | final int x; // column
5 | final int y; // row
6 |
7 | const Position({
8 | required this.x,
9 | required this.y,
10 | });
11 |
12 | @override
13 | List