[
  {
    "path": ".firebase/hosting.YnVpbGQvd2Vi.cache",
    "content": "favicon.png,1627476717084,fcc7c4545d5b62ad01682589e6fdc7ea03d0a3b42069963c815c344b632eb5cf\nindex.html,1628684383634,1051083f81afd85530dc6f625a66db192802643a052eb50cea7f7d2bd20ebba0\nmanifest.json,1627476717084,d0d6379e93f986cee36758f174b4efa8979682b207c918dec2bc3740eff1040f\nversion.json,1628684383462,5dcd469bc11f713a36c92003695dd1da4b0006774f1c3b42e7ff831a3a4ceb2d\nassets/FontManifest.json,1628684383600,aa361fc98a839bc49ddc2604f202ec33abb0f0ab27e2be59b5247a1fcdb2ead0\nassets/AssetManifest.json,1628684383599,17fe0fa630c7f4f330c4c6bf8dad31e4157cea4c1dc21a07a98c035a8d2d34b0\nflutter_service_worker.js,1628684385015,1d7f5adedddd3647f2c4c901f9a0ff69d748dd8147c8adc4f3a1d7dae63f8129\nassets/assets/icons/home/inProgress.png,1627541391853,7bc0474de46c967f873d2bcabbdbdf9adc50a46fe93977e7070568f7e3bee0c2\nassets/assets/icons/home/home_icon.png,1627476717071,d5992b9449c135ebca5abbcfcc9aa93c96180c07c239734f7129fd01a08ab16a\nassets/assets/icons/home/settings_icon.png,1627476717071,2052e06624c6ba4f838811d64b0bca16387162557e669686f1b6d7a5f432061b\nassets/assets/icons/home/workouts_icon.png,1627476717071,d4e9fc9ff51b525840a61bf11af289b5524c65b348d7a318d606fa112a11ef18\nassets/assets/icons/home/2.0x/home_icon.png,1627476717071,22ddd6939a80f0d07e67121a7f71e7b570e9e5016e15e9989f0a3e027236ebcf\nassets/assets/icons/home/2.0x/inProgress.png,1627541391853,42fe3cc05ccb67299adbfccc94f67c04fd8eec223daf3f01eed673b31bdb6159\nassets/assets/icons/home/2.0x/progress.png,1627541391853,11bbe318fd9ac5dcd149b451aee42085c80bbc12ef02636fae609f85e3cbf3b4\nassets/assets/icons/home/time.png,1627541391854,05c98dec62b51ad6c4e6295e7d5ec3daa632374625d2c9842ed97c4dac4d6914\nassets/assets/icons/home/2.0x/settings_icon.png,1627476717071,405ba6b024bc84ceb1698a221f1184090af38e2452b06bed338c503bfa0f3679\nassets/assets/icons/home/3.0x/home_icon.png,1627476717071,ecd934e9678d5b0661069482aa5764c15ab8e668d9c689ed09751633503cbdbd\nassets/assets/icons/home/progress.png,1627541391853,5eeb25d8e93e1cf6f6548cafeb353835e8688ef8733b9403b7b450827966e340\nassets/assets/icons/home/2.0x/workouts_icon.png,1627476717071,94a3b56db05fa2e6b1a0567d93879ec94179cad50b14d3c5080eec87b9354c4a\nassets/assets/icons/home/3.0x/progress.png,1627541391853,51e983851d9c59a107db8f256b54986b5819ebe840885cd168adfe03fc5b1970\nassets/assets/icons/home/3.0x/inProgress.png,1627541391853,0d9bad09c7980d4873cd75ef43f62ec65dd92ba41351131d60904dbebf60d8d1\nassets/assets/icons/home/3.0x/settings_icon.png,1627476717071,1e534e7685939ae5ca88b42da8fb27a1a4ef3356d55dda33bb09c5e2798cd072\nassets/assets/icons/home/2.0x/time.png,1627541391853,c27b6fbfc2ceeb0007ccf69420f9859b67040733667d4a5cf1fddf28f272d233\nassets/assets/icons/home/3.0x/workouts_icon.png,1627476717071,6a466c0256a614273cd71747e6419dc7ff39bc3afaf69e9e6b28279b37f55ef6\nassets/assets/icons/home/3.0x/time.png,1627541391853,ca298549f348f66ee596fef39269539276ba3105980fde377d8a1861f51561e4\nassets/assets/icons/social_networks/twitter.png,1627974636761,17a2ec2ea903ef50ce037b71945d7b39515cf7c2412e4c17d6210ac841e2b695\nassets/assets/icons/social_networks/facebook.png,1627974636761,037453a4f24c6dbeed1ae71a2dd87e9cfe5e75b458a103e8605baa2d1949ed4c\nassets/assets/icons/social_networks/instagram.png,1627974636761,659f6da2518edbfc82b81d45719b6c783f402184688fd9dd7a69cc00e7b98985\nassets/assets/icons/social_networks/2.0x/facebook.png,1628600072787,da27b8dad17c284ccc2e96143cf3beb434fb071b26b6dd7ccc8052d9d59742ed\nassets/assets/icons/social_networks/2.0x/instagram.png,1628600072787,74298e13e3d208ad8ff4ad2ff170eb2c39f414cb01c4917ddf967ccb9dd254b7\nassets/assets/icons/social_networks/2.0x/twitter.png,1628600072788,6c5843fbb7b838b7824ca5e1fb10cba120f052aa335b629ec54ce4f22fc3d553\nassets/assets/icons/social_networks/3.0x/instagram.png,1628600072788,2210f89c02c9ef355e01d9998de73d9e3a6f75f7d68a0ebfb426ecd78128b502\nassets/assets/icons/social_networks/3.0x/twitter.png,1628600072788,272e5cb4dd2c6562f6d31dc571a23f0d217b2a0a022f49e071c1bedc31dd3861\nassets/assets/icons/workouts/exercise.png,1627974636767,bb33a19837c97c646aa357c533553c01fb5cbecc72c4731f0b3c535b86046f18\nassets/assets/icons/social_networks/3.0x/facebook.png,1628600072788,9332b336848b4ab7b9a668c5e8cb89dba5ea1a39f2eed7003b3e464a317ee455\nassets/assets/icons/workouts/rectangle.png,1627974636769,d553d3f50a5f8b73641a1c117f76e47ac58c3f9d3cf66c81e7f608e9265e92cb\nassets/assets/icons/workouts/back.png,1627974636767,aabf91ffe8f8776ef8475d6e6eab4c0603c4fa4a804d87a62e4ed6292d535161\nassets/assets/icons/workouts/time.png,1628600028291,d16b5cae5487b260e850385e1ee4b7c355734d2c37eba3bd4b46f75dce537c14\nassets/assets/icons/workouts/2.0x/exercise.png,1627974636762,620e82b3ccdc8f0d201e832b19258204f93e6b853cab8d7710dffc1988fb54c3\nassets/assets/icons/workouts/2.0x/back.png,1627974636762,f033d9517b2d9bde6c64be19df67892c106e612dba94c469c0328f30fb5268ec\nassets/assets/icons/workouts/pilates.png,1627974636769,23048f33edbdd08f90871a83eba430d2a7db2ccd1073295e7eb1a4406b6900a8\nassets/assets/icons/workouts/full_body.png,1627974636768,55795cff8624b69d1827d894f9153bed116865ec730f562dedf661e021866bf4\nassets/assets/icons/workouts/yoga.png,1627974636769,0afc17a3ac8a9fd54d534b454edb179611c46e70f6a3cd145f1cf4f03db3932d\nassets/assets/icons/workouts/stretching.png,1627974636769,f828a67e18874f5b0f91f08bc8db4815dc6367401bd0e404bfcd19d21c93fa1a\nassets/assets/icons/workouts/2.0x/rectangle.png,1627974636763,b8236891b6108204238c5f8bed1a41b4c4129657f57495d6564a4af11440ba07\nassets/assets/icons/workouts/3.0x/back.png,1627974636764,ff31bd2df51646df3f523bc72d80d57aec848bc4955137bab47deeb20e724012\nassets/assets/icons/workouts/3.0x/exercise.png,1627974636764,e69bf158bc27e2c7914512b89e9498c7dd1e5a4b1d9699f8ff6c7306f89e8066\nassets/assets/icons/workouts/3.0x/rectangle.png,1627974636766,710fb1a6d76696a83ef8904085346f61b2a69e43728a350f00d0e0252bff2939\nassets/assets/images/auth/eye_icon.png,1627476717071,50714d4635e94e6b72a8fbe3f818de12f4083e50e1d0dbefe141c889a2f1b0c5\nassets/assets/images/auth/2.0x/eye_icon.png,1627476717071,e67eb0e58981ea5449ebb2ecf143837573fba5eb24715c64e67dac7fb556ab53\nassets/assets/images/auth/3.0x/eye_icon.png,1627476717071,e0669e0918d978fc87a68931e374d3259752b36d19d2b33c6370dc902f885d3d\nassets/assets/images/exercises/recicling.png,1627974636770,10dae13fcb21a288a8fda5064377a9f0ba57e0aa57c586ea5f5401d767d8e7ef\nassets/assets/images/home/finished.png,1627541391857,45bf0f45d0d96704d617fecbd031c6498e299e5103bae29f5c2850b3013192dc\nassets/assets/images/home/profile.png,1627541391857,6efa0744af74087d0a19e589272f13688293091ce2669358a9c4d54a43671c7d\nassets/assets/images/home/2.0x/finished.png,1627541391855,45439308580254d9ff8a22d6beb619c558d26329f6afc829e77063e3a03e985e\nassets/assets/images/home/3.0x/finished.png,1627541391857,9a99e9ccdb8673317afbaccbd9d1dbe69e5b47f2d31d0cb1c9b93ac58f9f5596\nassets/assets/images/exercises/2.0x/recicling.png,1627974636770,b03fd6617bb63714ec8f5698a60448de3e0a9b43474706d0dedfd2c98b49ffc9\nassets/assets/images/home/cardio.png,1627541391857,83160409601703b1094dc9fa4c0d8bb3e766d747b84f1267f80c882249c90a7d\nassets/assets/images/home/2.0x/profile.png,1627541391855,9ebb583c083b5ed05a1e576eb0afeb8b1f7a84e06c1d47cbed26712ac68c89e0\nassets/assets/images/home/arms.png,1627541391857,fd4b57b3938f547a4a190659dbce510b971d206249c80858a157edc5642decd1\nassets/assets/icons/workouts/2.0x/stretching.png,1627974636764,32865e2e2991959be425679d2a9adf95bde704953f5a60ba014019676ed799cc\nassets/assets/images/exercises/3.0x/recicling.png,1627974636770,c43ec3c35dade35e999540d48efef69dd2d879afadfac7c31856af64d7c5da00\nassets/assets/images/home/2.0x/cardio.png,1627541391855,87f389c80fa1cdd7b5806ba2366f1d6d60813c9cf2b70ab9ee03585b7b975718\nassets/assets/images/home/3.0x/profile.png,1627541391857,893bd1deae6afd3501b1fb64e29e9a5bb205003370dfdb1d75d67ca3aedc17c3\nicons/Icon-192.png,1627476717084,d2e0131bb7851eb9d98f7885edb5ae4b4d6b7a6c7addf8a25b9b712b39274c0f\nicons/Icon-512.png,1627476717084,7a31ce91e554f1941158ca46f31c7f3f2b7c8c129229ea74a8fae1affe335033\nassets/packages/wakelock_web/assets/no_sleep.js,1628124038000,f21ecad86108032c97fe6d07e50f6d35bc4969aa3b2a005efae256ffe62f47e9\nassets/assets/icons/workouts/2.0x/full_body.png,1627974636762,2c4f84089eb438faf7454176d1e4a63a4fe347d1dc2653ab6e3c333eda558818\nassets/assets/icons/workouts/2.0x/pilates.png,1627974636763,f66772f601df58f2695b7bbb1270bbbc4bfaadcca97ff62ed119da8036556051\nassets/assets/icons/workouts/2.0x/yoga.png,1627974636764,bbb0d97a68dd003eef88afd51fabf753d0d58099fa6e9338770241f297e6672d\nassets/assets/images/onboarding/onboarding.png,1627476717078,f4cfaf552bbf4b0879f756e186a66fa87fb5e17fd536ad101f0e44872d5705a7\nassets/assets/images/onboarding/onboarding_2.png,1627476717078,f4cc70e7e552e4da9f4c41fb28b955f4d65bc4c7d330e1ba5d62960196fc08f0\nassets/assets/images/onboarding/onboarding_3.png,1627476717078,53343c02627acf4d378e07e471763e72736b3efd447a514e7409d5c0e8939d93\nassets/assets/images/home/3.0x/cardio.png,1627541391857,077b9cee95437bce72c44a34c1065c8b5fd99c6b91f0a79edb8a69ec35a6c091\nassets/assets/icons/workouts/3.0x/stretching.png,1627974636766,0811239b2403d6e070169d10ca808955d9b5ec2fd93d161ece285d215ae91c2e\nassets/assets/images/home/2.0x/arms.png,1627541391854,27781c5555ae28644a9e9efe958f742753b1d7cee3209b09c2d68e5b49339d8e\nassets/assets/icons/workouts/3.0x/full_body.png,1627974636765,2a3d7e98fe2e0f15decda6407b80abcc65d5e7ff095981bc3e02791541e0b71e\nassets/assets/icons/workouts/3.0x/pilates.png,1627974636766,a780d1e23eb46c7378383d169e97cada1eede86288d180da25f12ce8a1e4863d\nassets/assets/icons/workouts/3.0x/yoga.png,1627974636767,1c72a662c2b51a77e957ab072cec3498ba153c9c676c6ea539b8ca5b0bde7666\nassets/assets/images/home/4.0x/cardio.png,1628683736558,355c988a629774683f1aac71528ce43dfada71f3d6b642e704dd997d8f05ca5d\nassets/NOTICES,1628684383600,3b48445974753dfd5712fcb092bd7207f584b468408cd3e552faef4de9ae440d\nassets/packages/cupertino_icons/assets/CupertinoIcons.ttf,1620072074000,3064af137aeffc9011ba060601a01177b279963822310a778aeafa74c209732c\nassets/assets/images/home/3.0x/arms.png,1627541391856,6cc1efdf929f4d2cd59b3f049ad5d33d25026ad22baac7a23853a973ec46c71d\nassets/assets/images/onboarding/2.0x/onboarding_3.png,1627476717073,86bd038648f8ce048eaf3c48b7b3c2066ec2a43df2a3c0bcedcdf700e3532b1b\nassets/assets/images/onboarding/2.0x/onboarding.png,1627476717072,26b551a45e87a9cf8babb5addbf9ede5fad3d442b687a7e6243b4d05f8156474\nassets/assets/images/onboarding/2.0x/onboarding_2.png,1627476717072,0eda63106507ebf1a0b93a117b9fca53c0644504e843ce41a749bf4b1a5cdf43\nassets/assets/images/onboarding/3.0x/onboarding.png,1627476717074,0221495dd68432c49e07e15e205b7599fda50ac16471a7a7e7390bc498c39512\nassets/assets/images/onboarding/3.0x/onboarding_3.png,1627476717078,c6c3498775f88fdf25eb4b1812c1cbd3095812cec8a3367a97772b5fe3cc68d0\nassets/assets/images/onboarding/3.0x/onboarding_2.png,1627476717076,a3b63e486fefbfad680fc70c34074e3e9484d70f352ea3da6d7d5e306b351b4c\nassets/fonts/MaterialIcons-Regular.otf,1615596762000,5f71a8843e4edc9656c39061c2232458a6fc77e1603305960e4efa9c77f8b7a2\nmain.dart.js.map,1628674203768,531ff586ff58cbfe23a63229b5628751af705a96cb075de69bdc8ff5ff160cc2\nmain.dart.js,1628684383054,4e4b3485395a76f874b5d6f902f15227931035b4b12242f80e1361effb413c60\nassets/assets/fonts/NotoSansKR/NotoSansKR-Regular.otf,1627476717049,2c26f3d820132e71301a7ce1d1e1097d86d644452e7c80554572dba87f3a7118\nassets/assets/fonts/NotoSansKR/NotoSansKR-Medium.otf,1627476717027,d6ce5d5436052d0d766580a1a4abc0b1337af2a5313e1acf755a582a3a61f632\nassets/assets/videos/workouts/cow.mp4,1628079771714,5691a0fce029f9dd827f94234f67f6ee3525b58b9fb5de5bb0547e73ad4a45d1\nassets/assets/fonts/NotoSansKR/NotoSansKR-Bold.otf,1627476716983,e28b1a09897c998992d4843d4717b8a783e9da76b4b3e66b605443ea7593fd6a\nassets/assets/videos/workouts/warriorII.mp4,1628079771842,8a269d6317bf254963acfbc028edb9e5ed8e9973bc715bb09fb00c30bb1cf071\nassets/assets/videos/workouts/reclining.mp4,1628079771809,44f49a3ef19265ad6e0e7a7a65681e7a3a56f93dcea535b316f99508fdcaa0ac\n"
  },
  {
    "path": ".firebaserc",
    "content": "{\n  \"projects\": {\n    \"default\": \"fitness-1a139\"\n  }\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Android Studio will place build artifacts here\n/android/app/debug\n/android/app/profile\n/android/app/release\n"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 1d9032c7e1d867f071f2277eb1673e8f9b0274e3\n  channel: stable\n\nproject_type: app\n"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"fitness\",\n            \"request\": \"launch\",\n            \"type\": \"dart\",\n            \"flutterMode\": \"debug\"\n        }\n    ]\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Fitness app\n\nExample of Fitness app done using Flutter for iOS and Android platforms.\n\n![Home](https://github.com/perpetio/fitness/blob/master/examples/Home.png?raw=true) ![Workout](https://github.com/perpetio/fitness/blob/master/examples/Workout_1.png?raw=true)\n\n# See Behance UI/UX case:\nhttps://www.behance.net/gallery/132549709/Selfit-Fitness-app?tracking_source=for_you_feed_user_published\n\n## See our tutorial posts:\n\nPart 1 - [How to Make a Fitness App With Flutter: A Tutorial by Perpetio. Part I](https://perpet.io/blog/how-to-build-a-clubhouse-clone-app-with-flutter-a-tutorial-by-perpetio-part-1/)\n\nPart 2 - [How to Make a Fitness App With Flutter: A Tutorial by Perpetio. Part II](https://perpet.io/blog/how-to-make-a-fitness-app-with-flutter-a-tutorial-by-perpetio-part-ii/)\n\nPart 3 - [How to Make a Fitness App With Flutter: A Tutorial by Perpetio. Part III](https://perpet.io/blog/how-to-make-a-fitness-app-with-flutter-a-tutorial-by-perpetio-part-iii/)\n\n\n## Getting Started\n\nThis project is a starting point for a Flutter application.\n\nA few resources to get you started if this is your first Flutter project:\n\n- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)\n- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)\n\nFor help getting started with Flutter, view our\n[online documentation](https://flutter.dev/docs), which offers tutorials,\nsamples, guidance on mobile development, and a full API reference.\n"
  },
  {
    "path": "android/.gitignore",
    "content": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remember to never publicly share your keystore.\n# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app\nkey.properties\n"
  },
  {
    "path": "android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\napply plugin: 'com.google.gms.google-services'\n\nandroid {\n    compileSdkVersion 30\n\n    sourceSets {\n        main.java.srcDirs += 'src/main/kotlin'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.example.fitness_flutter\"\n        minSdkVersion 16\n        targetSdkVersion 30\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        multiDexEnabled true\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    implementation \"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version\"\n    implementation platform('com.google.firebase:firebase-bom:28.3.0')\n    implementation 'com.android.support:multidex:1.0.3'\n}\n"
  },
  {
    "path": "android/app/src/debug/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.fitness_flutter\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/app/src/google-services.json",
    "content": "{\n  \"project_info\": {\n    \"project_number\": \"422986340486\",\n    \"project_id\": \"fitness-1a139\",\n    \"storage_bucket\": \"fitness-1a139.appspot.com\"\n  },\n  \"client\": [\n    {\n      \"client_info\": {\n        \"mobilesdk_app_id\": \"1:422986340486:android:45ba422650bd65bab51907\",\n        \"android_client_info\": {\n          \"package_name\": \"com.example.fitness_flutter\"\n        }\n      },\n      \"oauth_client\": [\n        {\n          \"client_id\": \"422986340486-ctl45jld32bdhtdh4uvrid4p76sv8obr.apps.googleusercontent.com\",\n          \"client_type\": 3\n        }\n      ],\n      \"api_key\": [\n        {\n          \"current_key\": \"AIzaSyDzZoKOFTonkIBPz2oexzg9wOu0wITYa2M\"\n        }\n      ],\n      \"services\": {\n        \"appinvite_service\": {\n          \"other_platform_oauth_client\": [\n            {\n              \"client_id\": \"422986340486-ctl45jld32bdhtdh4uvrid4p76sv8obr.apps.googleusercontent.com\",\n              \"client_type\": 3\n            },\n            {\n              \"client_id\": \"422986340486-5u73b18na5os4i1mvs3pte0gn6kg6ijh.apps.googleusercontent.com\",\n              \"client_type\": 2,\n              \"ios_info\": {\n                \"bundle_id\": \"io.flutter.flutter.app\"\n              }\n            }\n          ]\n        }\n      }\n    }\n  ],\n  \"configuration_version\": \"1\"\n}"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.fitness_flutter\">\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n   <application\n        android:label=\"fitness_flutter\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:requestLegacyExternalStorage=\"true\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\"\n            android:showWhenLocked=\"true\"\n            android:turnScreenOn=\"true\">\n            <!-- Specifies an Android theme to apply to this Activity as soon as\n                 the Android process has started. This theme is visible to the user\n                 while the Flutter UI initializes. After that, this theme continues\n                 to determine the Window background behind the Flutter UI. -->\n            <meta-data\n              android:name=\"io.flutter.embedding.android.NormalTheme\"\n              android:resource=\"@style/NormalTheme\"\n              />\n            <!-- Displays an Android View that continues showing the launch screen\n                 Drawable until Flutter paints its first frame, then this splash\n                 screen fades out. A splash screen is useful to avoid any visual\n                 gap between the end of Android's launch screen and the painting of\n                 Flutter's first frame. -->\n            <meta-data\n              android:name=\"io.flutter.embedding.android.SplashScreenDrawable\"\n              android:resource=\"@drawable/launch_background\"\n              />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n        <!-- Don't delete the meta-data below.\n             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/kotlin/com/example/fitness_flutter/MainActivity.kt",
    "content": "package com.example.fitness_flutter\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: FlutterActivity() {\n}\n"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/drawable-v21/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"?android:colorBackground\" />\n\n    <!-- You can insert your own image assets here -->\n    <!-- <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@mipmap/launch_image\" />\n    </item> -->\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Light.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <!-- Theme applied to the Android Window as soon as the process has started.\n         This theme determines the color of the Android Window while your\n         Flutter UI initializes, as well as behind your Flutter UI while its\n         running.\n         \n         This Theme is only used starting with V2 of Flutter's Android embedding. -->\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Light.NoTitleBar\">\n        <item name=\"android:windowBackground\">?android:colorBackground</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/app/src/main/res/values-night/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <!-- Theme applied to the Android Window as soon as the process has started.\n         This theme determines the color of the Android Window while your\n         Flutter UI initializes, as well as behind your Flutter UI while its\n         running.\n         \n         This Theme is only used starting with V2 of Flutter's Android embedding. -->\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <item name=\"android:windowBackground\">?android:colorBackground</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/app/src/profile/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.fitness_flutter\">\n    <!-- Flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n</manifest>\n"
  },
  {
    "path": "android/build.gradle",
    "content": "buildscript {\n    ext.kotlin_version = '1.3.50'\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:4.1.0'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"\n        classpath 'com.google.gms:google-services:4.3.8'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.7-all.zip\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "include ':app'\n\ndef localPropertiesFile = new File(rootProject.projectDir, \"local.properties\")\ndef properties = new Properties()\n\nassert localPropertiesFile.exists()\nlocalPropertiesFile.withReader(\"UTF-8\") { reader -> properties.load(reader) }\n\ndef flutterSdkPath = properties.getProperty(\"flutter.sdk\")\nassert flutterSdkPath != null, \"flutter.sdk not set in local.properties\"\napply from: \"$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle\"\n"
  },
  {
    "path": "assets/fonts/NotoSansKR/OFL.txt",
    "content": "This Font Software is licensed under the SIL Open Font License, Version 1.1.\r\nThis license is copied below, and is also available with a FAQ at:\r\nhttp://scripts.sil.org/OFL\r\n\r\n\r\n-----------------------------------------------------------\r\nSIL OPEN FONT LICENSE Version 1.1 - 26 February 2007\r\n-----------------------------------------------------------\r\n\r\nPREAMBLE\r\nThe goals of the Open Font License (OFL) are to stimulate worldwide\r\ndevelopment of collaborative font projects, to support the font creation\r\nefforts of academic and linguistic communities, and to provide a free and\r\nopen framework in which fonts may be shared and improved in partnership\r\nwith others.\r\n\r\nThe OFL allows the licensed fonts to be used, studied, modified and\r\nredistributed freely as long as they are not sold by themselves. The\r\nfonts, including any derivative works, can be bundled, embedded, \r\nredistributed and/or sold with any software provided that any reserved\r\nnames are not used by derivative works. The fonts and derivatives,\r\nhowever, cannot be released under any other type of license. The\r\nrequirement for fonts to remain under this license does not apply\r\nto any document created using the fonts or their derivatives.\r\n\r\nDEFINITIONS\r\n\"Font Software\" refers to the set of files released by the Copyright\r\nHolder(s) under this license and clearly marked as such. This may\r\ninclude source files, build scripts and documentation.\r\n\r\n\"Reserved Font Name\" refers to any names specified as such after the\r\ncopyright statement(s).\r\n\r\n\"Original Version\" refers to the collection of Font Software components as\r\ndistributed by the Copyright Holder(s).\r\n\r\n\"Modified Version\" refers to any derivative made by adding to, deleting,\r\nor substituting -- in part or in whole -- any of the components of the\r\nOriginal Version, by changing formats or by porting the Font Software to a\r\nnew environment.\r\n\r\n\"Author\" refers to any designer, engineer, programmer, technical\r\nwriter or other person who contributed to the Font Software.\r\n\r\nPERMISSION & CONDITIONS\r\nPermission is hereby granted, free of charge, to any person obtaining\r\na copy of the Font Software, to use, study, copy, merge, embed, modify,\r\nredistribute, and sell modified and unmodified copies of the Font\r\nSoftware, subject to the following conditions:\r\n\r\n1) Neither the Font Software nor any of its individual components,\r\nin Original or Modified Versions, may be sold by itself.\r\n\r\n2) Original or Modified Versions of the Font Software may be bundled,\r\nredistributed and/or sold with any software, provided that each copy\r\ncontains the above copyright notice and this license. These can be\r\nincluded either as stand-alone text files, human-readable headers or\r\nin the appropriate machine-readable metadata fields within text or\r\nbinary files as long as those fields can be easily viewed by the user.\r\n\r\n3) No Modified Version of the Font Software may use the Reserved Font\r\nName(s) unless explicit written permission is granted by the corresponding\r\nCopyright Holder. This restriction only applies to the primary font name as\r\npresented to the users.\r\n\r\n4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font\r\nSoftware shall not be used to promote, endorse or advertise any\r\nModified Version, except to acknowledge the contribution(s) of the\r\nCopyright Holder(s) and the Author(s) or with their explicit written\r\npermission.\r\n\r\n5) The Font Software, modified or unmodified, in part or in whole,\r\nmust be distributed entirely under this license, and must not be\r\ndistributed under any other license. The requirement for fonts to\r\nremain under this license does not apply to any document created\r\nusing the Font Software.\r\n\r\nTERMINATION\r\nThis license becomes null and void if any of the above conditions are\r\nnot met.\r\n\r\nDISCLAIMER\r\nTHE FONT SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT\r\nOF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE\r\nCOPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nINCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL\r\nDAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM\r\nOTHER DEALINGS IN THE FONT SOFTWARE.\r\n"
  },
  {
    "path": "firebase.json",
    "content": "{\n  \"hosting\": {\n    \"public\": \"build/web\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**/.*\",\n      \"**/node_modules/**\"\n    ],\n    \"rewrites\": [\n      {\n        \"source\": \"**\",\n        \"destination\": \"/index.html\"\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "ios/.gitignore",
    "content": "*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/DerivedData/\nIcon?\n**/Pods/\n**/.symlinks/\nprofile\nxcuserdata\n**/.generated/\nFlutter/App.framework\nFlutter/Flutter.framework\nFlutter/Flutter.podspec\nFlutter/Generated.xcconfig\nFlutter/app.flx\nFlutter/app.zip\nFlutter/flutter_assets/\nFlutter/flutter_export_environment.sh\nServiceDefinitions.json\nRunner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!default.mode1v3\n!default.mode2v3\n!default.pbxuser\n!default.perspectivev3\n"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>8.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "content": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "content": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Podfile",
    "content": "# Uncomment this line to define a global platform for your project\nplatform :ios, '12.1'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\nproject 'Runner', {\n  'Debug' => :debug,\n  'Profile' => :release,\n  'Release' => :release,\n}\n\ndef flutter_root\n  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)\n  unless File.exist?(generated_xcode_build_settings_path)\n    raise \"#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first\"\n  end\n\n  File.foreach(generated_xcode_build_settings_path) do |line|\n    matches = line.match(/FLUTTER_ROOT\\=(.*)/)\n    return matches[1].strip if matches\n  end\n  raise \"FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get\"\nend\n\nrequire File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)\n\nflutter_ios_podfile_setup\n\ntarget 'Runner' do\n  use_frameworks!\n  use_modular_headers!\n\n  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    flutter_additional_ios_build_settings(target)\n  end\nend\n"
  },
  {
    "path": "ios/Runner/AppDelegate.swift",
    "content": "import UIKit\nimport Flutter\nimport Firebase\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n    override func application(\n    _ application: UIApplication,\n    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?\n    \n    ) -> Bool {\n        GeneratedPluginRegistrant.register(with: self)\n        if #available(iOS 10.0, *) {\n        UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate\n    }   \n\n//        FirebaseApp.configure()\n            \n        return super.application(application, didFinishLaunchingWithOptions: launchOptions)\n    }\n    \n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou 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."
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"18122\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <device id=\"retina6_7\" orientation=\"portrait\" appearance=\"light\"/>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"18093\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"428\" height=\"926\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"119\" y=\"-20\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ios/Runner/GoogleService-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CLIENT_ID</key>\n\t<string>422986340486-6ip6fb1b9o5ologha5r3h4i34o9djqtp.apps.googleusercontent.com</string>\n\t<key>REVERSED_CLIENT_ID</key>\n\t<string>com.googleusercontent.apps.422986340486-6ip6fb1b9o5ologha5r3h4i34o9djqtp</string>\n\t<key>API_KEY</key>\n\t<string>AIzaSyBmt3kA_NpOr5fmOj0QevpECGXHKSfUZaM</string>\n\t<key>GCM_SENDER_ID</key>\n\t<string>422986340486</string>\n\t<key>PLIST_VERSION</key>\n\t<string>1</string>\n\t<key>BUNDLE_ID</key>\n\t<string>com.example.fitnessFlutter</string>\n\t<key>PROJECT_ID</key>\n\t<string>fitness-1a139</string>\n\t<key>STORAGE_BUCKET</key>\n\t<string>fitness-1a139.appspot.com</string>\n\t<key>IS_ADS_ENABLED</key>\n\t<false/>\n\t<key>IS_ANALYTICS_ENABLED</key>\n\t<false/>\n\t<key>IS_APPINVITE_ENABLED</key>\n\t<true/>\n\t<key>IS_GCM_ENABLED</key>\n\t<true/>\n\t<key>IS_SIGNIN_ENABLED</key>\n\t<true/>\n\t<key>GOOGLE_APP_ID</key>\n\t<string>1:422986340486:ios:86a9572efdb76722b51907</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>fitness_flutter</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSApplicationQueriesSchemes</key>\n\t<array>\n\t\t<string>https</string>\n\t\t<string>http</string>\n\t</array>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSCameraUsageDescription</key>\n\t<string>App used photo for user data</string>\n\t<key>NSMicrophoneUsageDescription</key>\n\t<string>App used micro for choosing image</string>\n\t<key>NSPhotoLibraryUsageDescription</key>\n\t<string>App used photo for user data</string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner/Runner-Bridging-Header.h",
    "content": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 51;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t1EB624816E59D8EA5A00964D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 569C6E9C77C6674A97AA1A92 /* Pods_Runner.framework */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t57C0953A26C3F5A7005A4D27 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 57C0953926C3F5A7005A4D27 /* GoogleService-Info.plist */; };\n\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t184EC59B0E1035731D467CDF /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.profile.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t569C6E9C77C6674A97AA1A92 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t57C0953926C3F5A7005A4D27 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = \"GoogleService-Info.plist\"; path = \"../../../../Downloads/GoogleService-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Runner-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tA8363722806A4336D53660BD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.debug.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tECA2DBB364BC87298B753327 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-Runner.release.xcconfig\"; path = \"Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1EB624816E59D8EA5A00964D /* Pods_Runner.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t0C9026A7982AB459FCD34A31 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tA8363722806A4336D53660BD /* Pods-Runner.debug.xcconfig */,\n\t\t\t\tECA2DBB364BC87298B753327 /* Pods-Runner.release.xcconfig */,\n\t\t\t\t184EC59B0E1035731D467CDF /* Pods-Runner.profile.xcconfig */,\n\t\t\t);\n\t\t\tpath = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t140B08CC25ACDA9584F56CDD /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t569C6E9C77C6674A97AA1A92 /* Pods_Runner.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t\t0C9026A7982AB459FCD34A31 /* Pods */,\n\t\t\t\t140B08CC25ACDA9584F56CDD /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t57C0953926C3F5A7005A4D27 /* GoogleService-Info.plist */,\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t\t74858FAE1ED2DC5600515810 /* AppDelegate.swift */,\n\t\t\t\t74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB59C01CE5681BA981EDB94A6 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t\t653D0ABDFCB77C6BB1B470B4 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 1250;\n\t\t\t\tORGANIZATIONNAME = \"\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t\tLastSwiftMigration = 1100;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t57C0953A26C3F5A7005A4D27 /* GoogleService-Info.plist in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" embed_and_thin\";\n\t\t};\n\t\t653D0ABDFCB77C6BB1B470B4 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputFileListPaths = (\n\t\t\t\t\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\\n\";\n\t\t};\n\t\tB59C01CE5681BA981EDB94A6 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputFileListPaths = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputFileListPaths = (\n\t\t\t);\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t249021D3217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t249021D4217E4FDB00AE95B9 /* Profile */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = C3S69D62C5;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.fitnessFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Profile;\n\t\t};\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = arm64;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 12.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSUPPORTED_PLATFORMS = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = C3S69D62C5;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.fitnessFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tDEVELOPMENT_TEAM = C3S69D62C5;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.fitnessFlutter;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"Runner/Runner-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 5.0;\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t\t249021D3217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t\t249021D4217E4FDB00AE95B9 /* Profile */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1250\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <Testables>\n      </Testables>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Release\"\n      selectedDebuggerIdentifier = \"\"\n      selectedLauncherIdentifier = \"Xcode.IDEFoundation.Launcher.PosixSpawn\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Profile\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>PreviewsEnabled</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "lib/core/const/color_constants.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass ColorConstants {\n  static const textColor = Color(0xFF1F2022);\n  static const primaryColor = Color(0xFF6358E1);\n\n  static const textBlack = Color(0xFF1F2022);\n  static const white = Color(0xFFFFFFFF);\n  static const grey = Color(0xFFB6BDC6);\n  static const loadingBlack = Color(0x80000000);\n\n  static const textFieldBackground = Color(0xFFFBFCFF);\n  static const textFieldBorder = Color(0xFFB9BBC5);\n\n  static const disabledColor = Color(0xFFE1E1E5);\n  static const errorColor = Color(0xFFF25252);\n\n  static const homeBackgroundColor = Color.fromRGBO(252, 252, 252, 1);\n  static const textGrey = Color(0xFF8F98A3);\n\n  static const cardioColor = Color(0xFFFCB74F);\n  static const armsColor = Color(0xFF5C9BA4);\n}\n"
  },
  {
    "path": "lib/core/const/data_constants.dart",
    "content": "import 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/onboarding/widget/onboarding_tile.dart';\n\nclass DataConstants {\n  // Onboarding\n  static final onboardingTiles = [\n    OnboardingTile(\n      title: TextConstants.onboarding1Title,\n      mainText: TextConstants.onboarding1Description,\n      imagePath: PathConstants.onboarding1,\n    ),\n    OnboardingTile(\n      title: TextConstants.onboarding2Title,\n      mainText: TextConstants.onboarding2Description,\n      imagePath: PathConstants.onboarding2,\n    ),\n    OnboardingTile(\n      title: TextConstants.onboarding3Title,\n      mainText: TextConstants.onboarding3Description,\n      imagePath: PathConstants.onboarding3,\n    ),\n  ];\n\n  // Workouts\n  static final List<WorkoutData> workouts = [\n    WorkoutData(\n        title: TextConstants.yogaTitle,\n        exercices: TextConstants.yogaExercises,\n        minutes: TextConstants.yogaMinutes,\n        currentProgress: 10,\n        progress: 16,\n        image: PathConstants.yoga,\n        exerciseDataList: [\n          ExerciseData(\n            title: TextConstants.reclining,\n            minutes: TextConstants.recliningMinutes,\n            progress: 1,\n            video: PathConstants.recliningVideo,\n            description: TextConstants.warriorDescription,\n            steps: [\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n            ],\n          ),\n          ExerciseData(\n            title: TextConstants.cowPose,\n            minutes: TextConstants.cowPoseMinutes,\n            progress: 0.3,\n            video: PathConstants.cowPoseVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.warriorPose,\n            minutes: TextConstants.warriorPoseMinutes,\n            progress: 0.99,\n            video: PathConstants.warriorIIVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n        ]),\n    WorkoutData(\n        title: TextConstants.pilatesTitle,\n        exercices: TextConstants.pilatesExercises,\n        minutes: TextConstants.pilatesMinutes,\n        currentProgress: 1,\n        progress: 20,\n        image: PathConstants.pilates,\n        exerciseDataList: [\n          ExerciseData(\n            title: TextConstants.reclining,\n            minutes: TextConstants.recliningMinutes,\n            progress: 0.1,\n            video: PathConstants.recliningVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.cowPose,\n            minutes: TextConstants.cowPoseMinutes,\n            progress: 0.1,\n            video: PathConstants.cowPoseVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.warriorPose,\n            minutes: TextConstants.warriorPoseMinutes,\n            progress: 0.0,\n            video: PathConstants.warriorIIVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n        ]),\n    WorkoutData(\n        title: TextConstants.fullBodyTitle,\n        exercices: TextConstants.fullBodyExercises,\n        minutes: TextConstants.fullBodyMinutes,\n        currentProgress: 12,\n        progress: 14,\n        image: PathConstants.fullBody,\n        exerciseDataList: [\n          ExerciseData(\n            title: TextConstants.reclining,\n            minutes: TextConstants.recliningMinutes,\n            progress: 0.99,\n            video: PathConstants.recliningVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.cowPose,\n            minutes: TextConstants.cowPoseMinutes,\n            progress: 0.6,\n            video: PathConstants.cowPoseVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.warriorPose,\n            minutes: TextConstants.warriorPoseMinutes,\n            progress: 0.8,\n            video: PathConstants.warriorIIVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n        ]),\n    WorkoutData(\n      title: TextConstants.stretchingTitle,\n      exercices: TextConstants.stretchingExercises,\n      minutes: TextConstants.stretchingMinutes,\n      currentProgress: 0,\n      progress: 8,\n      image: PathConstants.stretching,\n      exerciseDataList: [\n        ExerciseData(\n          title: TextConstants.reclining,\n          minutes: TextConstants.recliningMinutes,\n          progress: 0.0,\n          video: PathConstants.recliningVideo,\n          description: TextConstants.warriorDescription,\n          steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n        ),\n        ExerciseData(\n          title: TextConstants.cowPose,\n          minutes: TextConstants.cowPoseMinutes,\n          progress: 0.0,\n          video: PathConstants.cowPoseVideo,\n          description: TextConstants.warriorDescription,\n          steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n        ),\n        ExerciseData(\n          title: TextConstants.warriorPose,\n          minutes: TextConstants.warriorPoseMinutes,\n          progress: 0.0,\n          video: PathConstants.warriorIIVideo,\n          description: TextConstants.warriorDescription,\n          steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n        ),\n      ],\n    ),\n  ];\n\n  static final List<WorkoutData> homeWorkouts = [\n    WorkoutData(\n        title: TextConstants.cardioTitle,\n        exercices: TextConstants.cardioExercises,\n        minutes: TextConstants.cardioMinutes,\n        currentProgress: 10,\n        progress: 16,\n        image: PathConstants.cardio,\n        exerciseDataList: [\n          ExerciseData(\n            title: TextConstants.reclining,\n            minutes: TextConstants.recliningMinutes,\n            progress: 1,\n            video: PathConstants.recliningVideo,\n            description: TextConstants.warriorDescription,\n            steps: [\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n              TextConstants.warriorStep1,\n              TextConstants.warriorStep2,\n            ],\n          ),\n          ExerciseData(\n            title: TextConstants.cowPose,\n            minutes: TextConstants.cowPoseMinutes,\n            progress: 0.3,\n            video: PathConstants.cowPoseVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.warriorPose,\n            minutes: TextConstants.warriorPoseMinutes,\n            progress: 0.99,\n            video: PathConstants.warriorIIVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n        ]),\n    WorkoutData(\n        title: TextConstants.armsTitle,\n        exercices: TextConstants.armsExercises,\n        minutes: TextConstants.armsMinutes,\n        currentProgress: 1,\n        progress: 20,\n        image: PathConstants.cardio,\n        exerciseDataList: [\n          ExerciseData(\n            title: TextConstants.reclining,\n            minutes: TextConstants.recliningMinutes,\n            progress: 0.1,\n            video: PathConstants.recliningVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.cowPose,\n            minutes: TextConstants.cowPoseMinutes,\n            progress: 0.1,\n            video: PathConstants.cowPoseVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n          ExerciseData(\n            title: TextConstants.warriorPose,\n            minutes: TextConstants.warriorPoseMinutes,\n            progress: 0.0,\n            video: PathConstants.warriorIIVideo,\n            description: TextConstants.warriorDescription,\n            steps: [TextConstants.warriorStep1, TextConstants.warriorStep2],\n          ),\n        ]),\n  ];\n\n  // Reminder\n  static List<String> reminderDays = [\n    TextConstants.everyday,\n    TextConstants.monday_friday,\n    TextConstants.weekends,\n    TextConstants.monday,\n    TextConstants.tuesday,\n    TextConstants.wednesday,\n    TextConstants.thursday,\n    TextConstants.friday,\n    TextConstants.saturday,\n    TextConstants.sunday,\n  ];\n}\n"
  },
  {
    "path": "lib/core/const/path_constants.dart",
    "content": "class PathConstants {\n  // Onboarding\n  static const String onboarding1 = 'assets/images/onboarding/onboarding.png';\n  static const String onboarding2 = 'assets/images/onboarding/onboarding_2.png';\n  static const String onboarding3 = 'assets/images/onboarding/onboarding_3.png';\n\n  // Auth\n  static const String eye = 'assets/images/auth/eye_icon.png';\n\n  // Tabbar\n  static const String home = 'assets/icons/home/home_icon.png';\n  static const String workouts = 'assets/icons/home/workouts_icon.png';\n  static const String settings = 'assets/icons/home/settings_icon.png';\n\n  // Home\n  static const String profile = 'assets/images/home/profile.png';\n  static const String finished = 'assets/images/home/finished.png';\n  static const String inProgress = 'assets/icons/home/inProgress.png';\n  static const String timeSent = 'assets/icons/home/time.png';\n  static const String cardio = 'assets/images/home/cardio.png';\n  static const String arms = 'assets/images/home/arms.png';\n  static const String progress = 'assets/icons/home/progress.png';\n\n  // Workout Details\n  static const String yogaWorkout = 'assets/images/workouts/yoga_workout.png';\n  static const String back = 'assets/icons/workouts/back.png';\n  static const String rectangle = 'assets/icons/workouts/rectangle.png';\n  static const String timeTracker = 'assets/icons/workouts/time.png';\n  static const String exerciseTracker = 'assets/icons/workouts/exercise.png';\n\n  static const String recicling = 'assets/images/exercises/recicling.png';\n\n  //Workouts\n  static const String yoga = 'assets/icons/workouts/yoga.png';\n  static const String pilates = 'assets/icons/workouts/pilates.png';\n  static const String fullBody = 'assets/icons/workouts/full_body.png';\n  static const String stretching = 'assets/icons/workouts/stretching.png';\n\n  //social networks\n  static const String facebook = 'assets/icons/social_networks/facebook.png';\n  static const String instagram = 'assets/icons/social_networks/instagram.png';\n  static const String twitter = 'assets/icons/social_networks/twitter.png';\n\n  // Start workout -> Yoga\n  static const String recliningVideo = 'assets/videos/workouts/reclining.mp4';\n  static const String cowPoseVideo = 'assets/videos/workouts/cow.mp4';\n  static const String warriorIIVideo = 'assets/videos/workouts/warriorII.mp4';\n}\n"
  },
  {
    "path": "lib/core/const/text_constants.dart",
    "content": "class TextConstants {\n  // Common\n  static const String start = \"Start\";\n\n  // Onboarding\n  static const String onboarding1Title = \"Workout anywhere\";\n  static const String onboarding2Title = \"Learn techniques\";\n  static const String onboarding3Title = \"Stay strong & healthy\";\n\n  static const String onboarding1Description = \"You can do your workout at home without any equipment, outside or at the gym.\";\n  static const String onboarding2Description = \"Our workout programs are made by professionals.\";\n  static const String onboarding3Description = \"We want you to fully enjoy the program and stay healthy and positive.\";\n\n  // Sign Up\n  static const String signUp = \"Sign up\";\n  static const String signIn = \"Sign In\";\n  static const String signOut = \"Sign Out\";\n\n  static const String username = \"Username\";\n  static const String userNamePlaceholder = \"Your name\";\n  static const String usernameErrorText = 'Text is required';\n\n  static const String email = \"Email\";\n  static const String emailPlaceholder = \"example@mail.com\";\n  static const String emailErrorText = 'Email is unvalid, please enter email properly';\n\n  static const String password = \"Password\";\n  static const String passwordPlaceholder = \"Must be at least 6 symbols\";\n  static const String passwordErrorText = 'Password should contain at least 6 characters';\n\n  static const String confirmPassword = \"Confirm password\";\n  static const String confirmPasswordPlaceholder = \"Re-enter password\";\n  static const String confirmPasswordErrorText = 'Password is not the same';\n\n  static const String alreadyHaveAccount = \"Already have an account?\";\n\n  // Sing In\n  static const String passwordPlaceholderSignIn = \"Enter your password\";\n  static const String forgotPassword = \"Forgot password?\";\n\n  static const String doNotHaveAnAccount = \"Do not have an account?\";\n\n  // Tab bar\n  static const String homeIcon = \"Home\";\n  static const String workoutsIcon = \"Workouts\";\n  static const String settingsIcon = \"Settings\";\n\n  // Home screen\n  static const String checkActivity = \"Let's check your activity\";\n  static const String finished = \"Finished\";\n  static const String completedWorkouts = \"Completed workouts\";\n\n  static const String inProgress = \"In progress\";\n  static const String workouts = \"Workouts\";\n\n  static const String timeSent = \"Time sent\";\n  static const String minutes = \"Minutes\";\n\n  static const String discoverWorkouts = \"Discover new workouts\";\n\n  static const String keepProgress = \"Keep the progress!\";\n  static const String profileSuccessful = \"You are more successful than 88% users.\";\n\n  // Home screen -> cardio card\n  static const String cardioTitle = \"Cardio\";\n  static const String cardioExercises = \"10\";\n  static const String cardioMinutes = \"50\";\n\n  // Home screen -> arms card\n  static const String armsTitle = \"Arms\";\n  static const String armsExercises = \"6\";\n  static const String armsMinutes = \"35\";\n\n  //Workout screen -> yoga card\n  static const String yogaTitle = \"Yoga\";\n  static const String yogaExercises = \"16\";\n  static const String yogaMinutes = \"52\";\n\n  //Workout screen -> pilates card\n  static const String pilatesTitle = \"Pilates\";\n  static const String pilatesExercises = \"20\";\n  static const String pilatesMinutes = \"60\";\n\n  //Workout screen -> fullBody card\n  static const String fullBodyTitle = \"Full body\";\n  static const String fullBodyExercises = \"14\";\n  static const String fullBodyMinutes = \"48\";\n\n  //Workout screen -> stretching card\n  static const String stretchingTitle = \"Stretching\";\n  static const String stretchingExercises = \"8\";\n  static const String stretchingMinutes = \"35\";\n\n  //Settings screen\n  static const String joinUs = 'Join us in social media';\n  static const String calendar = \"Calendar\";\n  static const String reminder = \"Reminder\";\n  static const String rateUsOn = \"Rate us on \";\n  static const String terms = \"Terms & Conditions\";\n\n  // Workout Details screen common\n  static const String workout = \"Workout\";\n  static const String exercisesLowercase = \"exercises\";\n  static const String exercisesUppercase = \"Exercises\";\n\n  // Workout Details screen -> card1\n  static const String reclining = \"Reclining to big toe\";\n  static const int recliningMinutes = 12;\n\n  // Workout Details screen -> card2\n  static const String cowPose = \"Cow Pose\";\n  static const int cowPoseMinutes = 8;\n\n  // Workout Details screen -> card3\n  static const String warriorPose = \"Warrior II Pose\";\n  static const int warriorPoseMinutes = 12;\n\n  // Start Workout screen\n  static const String back = \"Back\";\n  static const String next = \"Next\";\n  static const String nextExercise = \"Next Exercise:\";\n\n  // Start Workout screen -> Warrior II Pose\n  static const String warriorDescription = \"Named for a fierce warrior, an incarnation of Shiva, this version of Warrior Pose increases stamina.\";\n  static const String warriorStep1 =\n      \"Stand in Tadasana (Mountain Pose). Raise your arms parallel to the floor and reach them actively out to the sides, shoulder blades wide, palms down.\";\n  static const String warriorStep2 =\n      \"Turn your right foot slightly to the right and your left foot out to the left 90 degrees. Align the left heel with the right heel. Firm your thighs and turn your left thigh outward so that the center of the left knee cap is in line with the center of the left ankle.\";\n\n  // Reminder screen\n  static const String selectTime = \"Please select reminder time\";\n  static const String save = \"Save\";\n  static const String repeating = \"How often repeat\";\n\n  // Reminder day of the week\n  static const String everyday = \"Everyday\";\n  static const String monday_friday = \"Mon - Fri\";\n  static const String weekends = \"Weekends\";\n  static const String monday = \"Monday\";\n  static const String tuesday = \"Tue\";\n  static const String wednesday = \"Wed\";\n  static const String thursday = \"Thu\";\n  static const String friday = \"Fri\";\n  static const String saturday = \"Sat\";\n  static const String sunday = \"Sun\";\n  // Edit account screen\n  static const String editAccount = 'Edit account';\n  static const String editPhoto = 'Edit photo';\n  static const String fullName = 'Full name';\n  static const String nameShouldContain2Char = 'Name should contain at least 2 characters';\n  static const String changePassword = 'Change Password';\n\n  // Edit account screen -> show settings\n  static const String cameraPermission = 'Camera permisson';\n  static const String cameAccess = 'This app needs camera access to take pictures for upload user profile photo';\n  static const String deny = 'Deny';\n  static const String settings = 'Settings';\n  static const String fullNamePlaceholder = 'Enter your full name';\n\n  //Change password screen\n  static const String newPassword = 'New password';\n  static const String passwordUpdated = 'Password successfully updated!';\n\n  //Forgot password screen\n  static const passwordReset = 'Password Reset';\n  static const sendActivationBuild = 'Send Activation Link';\n  static const resetPasswordLinkWasSent = 'Reset password link was sent on your email.';\n}\n"
  },
  {
    "path": "lib/core/extensions/exceptions.dart",
    "content": "class CustomFirebaseException implements Exception {\n  final String message;\n\n  CustomFirebaseException(this.message);\n\n  @override\n  String toString() {\n    return message;\n  }\n}\n"
  },
  {
    "path": "lib/core/extensions/list_extension.dart",
    "content": "extension FirstWhereOrNullExtension<E> on Iterable<E> {\n  E? firstWhereOrNull(bool Function(E) test) {\n    for (E element in this) {\n      if (test(element)) return element;\n    }\n    return null;\n  }\n}\n"
  },
  {
    "path": "lib/core/service/auth_service.dart",
    "content": "import 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/extensions/exceptions.dart';\nimport 'package:flutter/services.dart';\n\nclass AuthService {\n  static final FirebaseAuth auth = FirebaseAuth.instance;\n\n  static Future<User> signUp(String email, String password, String name) async {\n    UserCredential result = await auth.createUserWithEmailAndPassword(email: email.trim(), password: password.trim());\n    final User user = result.user!;\n    await user.updateDisplayName(name);\n\n    return user;\n  }\n\n  static Future resetPassword(String email) async {\n    try {\n      await auth.sendPasswordResetEmail(email: email);\n      return true;\n    } on FirebaseAuthException catch (e) {\n      throw CustomFirebaseException(getExceptionMessage(e));\n    } catch (e) {\n      throw Exception(e);\n    }\n  }\n\n  static Future<User?> signIn(String email, String password) async {\n    try {\n      final UserCredential result = await auth.signInWithEmailAndPassword(\n        email: email.trim(),\n        password: password.trim(),\n      );\n      final User? user = result.user;\n\n      if (user == null) {\n        throw Exception(\"User not found\");\n      }\n\n      return user;\n    } on FirebaseAuthException catch (e) {\n      throw CustomFirebaseException(getExceptionMessage(e));\n    } catch (e) {\n      throw Exception(e);\n    }\n  }\n\n  static Future<void> signOut() async {\n    await auth.signOut();\n  }\n}\n\nString getExceptionMessage(FirebaseAuthException e) {\n  print(e.code);\n  switch (e.code) {\n    case 'user-not-found':\n      return 'User not found';\n    case 'wrong-password':\n      return 'Password is incorrect';\n    case 'requires-recent-login':\n      return 'Log in again before retrying this request';\n    default:\n      return e.message ?? 'Error';\n  }\n}\n"
  },
  {
    "path": "lib/core/service/date_service.dart",
    "content": "class MinutesSeconds {\n  final int minutes;\n  final int seconds;\n\n  MinutesSeconds({\n    required this.minutes,\n    required this.seconds,\n  });\n}\n\nclass DateService {\n  static MinutesSeconds convertIntoSeconds(int second) {\n    final int minutes = second ~/ 60;\n    final int seconds = second % 60;\n    return MinutesSeconds(minutes: minutes, seconds: seconds);\n  }\n}\n"
  },
  {
    "path": "lib/core/service/firebase_storage_service.dart",
    "content": "import 'dart:io';\n\nimport 'package:firebase_auth/firebase_auth.dart';\nimport 'package:firebase_storage/firebase_storage.dart';\nimport 'package:fitness_flutter/core/service/user_service.dart';\n\nclass FirebaseStorageService {\n  FirebaseStorage storage = FirebaseStorage.instance;\n  static Future<void> listExample() async {\n    ListResult result = await FirebaseStorage.instance.ref().listAll();\n    result.items.forEach((element) {\n      print(element.name);\n    });\n  }\n\n  static Future<bool> uploadImage({required String filePath}) async {\n    File file = File(filePath);\n    try {\n      final User? user = FirebaseAuth.instance.currentUser;\n      if (user != null) {\n        TaskSnapshot upload = await FirebaseStorage.instance.ref('user_logos/${user.uid}.png').putFile(file);\n        String downloadUrl = await upload.ref.getDownloadURL();\n        await UserService.editPhoto(downloadUrl);\n        return true;\n      }\n      return false;\n    } catch (e) {\n      print(e);\n      return false;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/core/service/notification_service.dart",
    "content": "import 'package:flutter_local_notifications/flutter_local_notifications.dart';\n\nclass NotificationService {\n  static final NotificationService notificationService =\n      NotificationService._internal();\n  static final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =\n      FlutterLocalNotificationsPlugin();\n\n  factory NotificationService() {\n    return notificationService;\n  }\n\n  NotificationService._internal();\n\n  init() {}\n}\n"
  },
  {
    "path": "lib/core/service/user_service.dart",
    "content": "import 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/extensions/exceptions.dart';\nimport 'package:fitness_flutter/core/service/auth_service.dart';\n\nclass UserService {\n  static final FirebaseAuth firebase = FirebaseAuth.instance;\n\n  static Future<bool> editPhoto(String photoUrl) async {\n    try {\n      await firebase.currentUser?.updatePhotoURL(photoUrl);\n      return true;\n    } catch (e) {\n      print(e);\n      return false;\n    }\n  }\n\n  static Future<bool> changeUserData(\n      {required String displayName, required String email}) async {\n    try {\n      await firebase.currentUser?.updateDisplayName(displayName);\n      await firebase.currentUser?.updateEmail(email);\n      return true;\n    } catch (e) {\n      print(e);\n      throw Exception(e);\n    }\n  }\n\n  static Future<bool> changePassword({required String newPass}) async {\n    try {\n      await firebase.currentUser?.updatePassword(newPass);\n      return true;\n    } on FirebaseAuthException catch (e) {\n      throw CustomFirebaseException(getExceptionMessage(e));\n    } catch (e) {\n      throw Exception(e);\n    }\n  }\n\n  static Future<void> signOut() async {\n    await firebase.signOut();\n  }\n}\n"
  },
  {
    "path": "lib/core/service/validation_service.dart",
    "content": "class ValidationService {\n  static bool username(String text) {\n    return text.length > 1;\n  }\n\n  static bool email(String text) {\n    bool emailValid = RegExp(\n            r\"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\\.[a-zA-Z]+\")\n        .hasMatch(text);\n    return emailValid;\n  }\n\n  static bool password(String text) {\n    return text.length >= 6;\n  }\n\n  static bool confirmPassword(String password, String confirmPassword) {\n    return password == confirmPassword;\n  }\n}\n"
  },
  {
    "path": "lib/data/exercise_data.dart",
    "content": "class ExerciseData {\n  final String title;\n  final int minutes;\n  final double progress;\n  final String video;\n  final String description;\n  final List<String> steps;\n\n  ExerciseData({\n    required this.title,\n    required this.minutes,\n    required this.progress,\n    required this.video,\n    required this.description,\n    required this.steps,\n  });\n\n  @override\n  String toString() {\n    return 'ExerciseData(title: $title, minutes: $minutes, progress: $progress, video: $video)';\n  }\n}\n"
  },
  {
    "path": "lib/data/workout_data.dart",
    "content": "import 'package:fitness_flutter/data/exercise_data.dart';\n\nclass WorkoutData {\n  final String title;\n  final String exercices;\n  final String minutes;\n  final int currentProgress;\n  final int progress;\n  final String image;\n  final List<ExerciseData> exerciseDataList;\n\n  WorkoutData({\n    required this.title,\n    required this.exercices,\n    required this.minutes,\n    required this.currentProgress,\n    required this.progress,\n    required this.image,\n    required this.exerciseDataList,\n  });\n\n  @override\n  String toString() {\n    return 'WorkoutData(title: $title, exercices: $exercices, minutes: $minutes, currentProgress: $currentProgress, progress: $progress, image: $image, exerciseDataList: $exerciseDataList)';\n  }\n}\n"
  },
  {
    "path": "lib/main.dart",
    "content": "import 'package:firebase_auth/firebase_auth.dart';\nimport 'package:firebase_core/firebase_core.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/service/notification_service.dart';\nimport 'package:fitness_flutter/screens/onboarding/page/onboarding_page.dart';\nimport 'package:fitness_flutter/screens/tab_bar/page/tab_bar_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:flutter_local_notifications/flutter_local_notifications.dart';\nimport 'package:timezone/data/latest.dart' as tz;\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);\n  await Firebase.initializeApp();\n  runApp(MyApp());\n}\n\nclass MyApp extends StatefulWidget {\n  @override\n  _MyAppState createState() => new _MyAppState();\n}\n\nclass _MyAppState extends State<MyApp> {\n  static late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = NotificationService.flutterLocalNotificationsPlugin;\n\n  @override\n  initState() {\n    super.initState();\n    const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('app_icon');\n    final IOSInitializationSettings initializationSettingsIOS = IOSInitializationSettings();\n    final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsIOS);\n\n    tz.initializeTimeZones();\n\n    flutterLocalNotificationsPlugin.initialize(initializationSettings, onSelectNotification: selectNotification);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    final isLoggedIn = FirebaseAuth.instance.currentUser != null;\n    return MaterialApp(\n      debugShowCheckedModeBanner: false,\n      title: 'Fitness',\n      theme: ThemeData(\n        textTheme: TextTheme(bodyText1: TextStyle(color: ColorConstants.textColor)),\n        fontFamily: 'NotoSansKR',\n        scaffoldBackgroundColor: Colors.white,\n        visualDensity: VisualDensity.adaptivePlatformDensity,\n      ),\n      home: isLoggedIn ? TabBarPage() : OnboardingPage(),\n    );\n  }\n\n  Future selectNotification(String? payload) async {\n    showDialog(\n      context: context,\n      builder: (_) {\n        return new AlertDialog(\n          title: Text(\"PayLoad\"),\n          content: Text(\"Payload : $payload\"),\n        );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/change_password/bloc/change_password_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/user_service.dart';\nimport 'package:meta/meta.dart';\n\npart 'change_password_event.dart';\npart 'change_password_state.dart';\n\nclass ChangePasswordBloc extends Bloc<ChangePasswordEvent, ChangePasswordState> {\n  ChangePasswordBloc() : super(ChangePasswordInitial());\n\n  @override\n  Stream<ChangePasswordState> mapEventToState(\n    ChangePasswordEvent event,\n  ) async* {\n    if (event is ChangePassword) {\n      yield ChangePasswordProgress();\n      try {\n        await UserService.changePassword(newPass: event.newPass);\n        yield ChangePasswordSuccess(message: TextConstants.passwordUpdated);\n        await Future.delayed(Duration(seconds: 1));\n        yield ChangePasswordInitial();\n      } catch (e) {\n        yield ChangePasswordError(e.toString());\n        await Future.delayed(Duration(seconds: 1));\n        yield ChangePasswordInitial();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/change_password/bloc/change_password_event.dart",
    "content": "part of 'change_password_bloc.dart';\n\n@immutable\nabstract class ChangePasswordEvent {}\n\nclass ChangePassword extends ChangePasswordEvent {\n  final String newPass;\n  ChangePassword({required this.newPass});\n}\n"
  },
  {
    "path": "lib/screens/change_password/bloc/change_password_state.dart",
    "content": "part of 'change_password_bloc.dart';\n\n@immutable\nabstract class ChangePasswordState {}\n\nclass ChangePasswordInitial extends ChangePasswordState {}\n\nclass ChangePasswordProgress extends ChangePasswordState {}\n\nclass ChangePasswordError extends ChangePasswordState {\n  final String error;\n  ChangePasswordError(this.error);\n}\n\nclass ChangePasswordSuccess extends ChangePasswordState {\n  final String message;\n  ChangePasswordSuccess({required this.message});\n}\n"
  },
  {
    "path": "lib/screens/change_password/change_password_page.dart",
    "content": "import 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:fitness_flutter/screens/change_password/bloc/change_password_bloc.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_loading.dart';\nimport 'package:fitness_flutter/screens/common_widgets/settings_container.dart';\nimport 'package:fitness_flutter/screens/common_widgets/settings_textfield.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass ChangePasswordScreen extends StatefulWidget {\n  ChangePasswordScreen({Key? key}) : super(key: key);\n\n  @override\n  _ChangePasswordScreenState createState() => _ChangePasswordScreenState();\n}\n\nclass _ChangePasswordScreenState extends State<ChangePasswordScreen> {\n  final TextEditingController _newPassController = TextEditingController();\n  final TextEditingController _confirmPassController = TextEditingController();\n  final User? user = FirebaseAuth.instance.currentUser;\n  bool isNewPassInvalid = false;\n  bool isConfirmPassInvalid = false;\n  late String userName;\n\n  @override\n  void initState() {\n    userName = user?.displayName ?? \"No Username\";\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n        body: _buildContext(context),\n        appBar: AppBar(\n            title: Text(TextConstants.changePassword, style: TextStyle(color: Colors.black, fontSize: 18)),\n            backgroundColor: Colors.transparent,\n            elevation: 0,\n            leading: IconButton(\n              icon: Icon(Icons.arrow_back_ios_new),\n              onPressed: () => Navigator.of(context).pop(),\n            ),\n            iconTheme: IconThemeData(\n              color: ColorConstants.primaryColor,\n            )));\n  }\n\n  BlocProvider<ChangePasswordBloc> _buildContext(BuildContext context) {\n    return BlocProvider<ChangePasswordBloc>(\n      create: (context) => ChangePasswordBloc(),\n      child: BlocConsumer<ChangePasswordBloc, ChangePasswordState>(\n        buildWhen: (_, currState) =>\n            currState is ChangePasswordInitial || currState is ChangePasswordError || currState is ChangePasswordProgress || currState is ChangePasswordSuccess,\n        builder: (context, state) {\n          if (state is ChangePasswordProgress) return Stack(children: [_editAccountContent(context), FitnessLoading()]);\n          if (state is ChangePasswordError) {\n            WidgetsBinding.instance!.addPostFrameCallback((_) {\n              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(state.error)));\n            });\n          }\n          if (state is ChangePasswordSuccess) {\n            WidgetsBinding.instance!.addPostFrameCallback((_) {\n              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(state.message)));\n            });\n          }\n          return _editAccountContent(context);\n        },\n        listenWhen: (_, currState) => true,\n        listener: (context, state) {},\n      ),\n    );\n  }\n\n  Widget _editAccountContent(BuildContext context) {\n    ChangePasswordBloc _bloc = BlocProvider.of<ChangePasswordBloc>(context);\n    double height = MediaQuery.of(context).size.height;\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: Padding(\n          padding: EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0),\n          child: SizedBox(\n            height: height - 140 - MediaQuery.of(context).padding.bottom,\n            child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [\n              SizedBox(height: 15),\n              Text(TextConstants.newPassword, style: TextStyle(fontWeight: FontWeight.w600)),\n              SettingsContainer(\n                child: SettingsTextField(\n                  controller: _newPassController,\n                  obscureText: true,\n                  placeHolder: TextConstants.passwordPlaceholder,\n                ),\n              ),\n              if (isNewPassInvalid) Text(TextConstants.passwordErrorText, style: TextStyle(color: ColorConstants.errorColor)),\n              SizedBox(height: 10),\n              Text(TextConstants.confirmPassword, style: TextStyle(fontWeight: FontWeight.w600)),\n              SettingsContainer(\n                child: SettingsTextField(\n                  controller: _confirmPassController,\n                  obscureText: true,\n                  placeHolder: TextConstants.confirmPasswordPlaceholder,\n                ),\n              ),\n              if (isConfirmPassInvalid) Text(TextConstants.confirmPasswordErrorText, style: TextStyle(color: ColorConstants.errorColor)),\n              Spacer(),\n              FitnessButton(\n                title: TextConstants.save,\n                isEnabled: true,\n                onTap: () {\n                  FocusScope.of(context).unfocus();\n                  setState(() {\n                    isNewPassInvalid = !ValidationService.password(_newPassController.text);\n                    isConfirmPassInvalid = _newPassController.text != _confirmPassController.text;\n                  });\n                  if (!(isNewPassInvalid || isConfirmPassInvalid)) {\n                    _bloc.add(ChangePassword(newPass: _newPassController.text));\n                  }\n                },\n              ),\n            ]),\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/common_widgets/fitness_button.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:flutter/material.dart';\n\nclass FitnessButton extends StatelessWidget {\n  final String title;\n  final bool isEnabled;\n  final Function() onTap;\n\n  FitnessButton({required this.title, this.isEnabled = true, required this.onTap});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.infinity,\n      height: 55,\n      decoration: BoxDecoration(\n        color: isEnabled ? ColorConstants.primaryColor : ColorConstants.disabledColor,\n        borderRadius: BorderRadius.circular(100),\n      ),\n      child: Material(\n        color: Colors.transparent,\n        child: InkWell(\n          borderRadius: BorderRadius.circular(100),\n          onTap: onTap,\n          child: Center(\n            child: Text(\n              title,\n              style: TextStyle(\n                color: ColorConstants.white,\n                fontSize: 18,\n                fontWeight: FontWeight.bold,\n              ),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/common_widgets/fitness_loading.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\n\nclass FitnessLoading extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.infinity,\n      height: double.infinity,\n      color: ColorConstants.loadingBlack,\n      child: Center(\n        child: Theme(\n          data: ThemeData(\n            cupertinoOverrideTheme:\n                CupertinoThemeData(brightness: Brightness.dark),\n          ),\n          child: CupertinoActivityIndicator(\n            radius: 17,\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/common_widgets/fitness_text_field.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\n\nclass FitnessTextField extends StatefulWidget {\n  final String title;\n  final String placeholder;\n  final String errorText;\n  final bool obscureText;\n  final bool isError;\n  final TextEditingController controller;\n  final VoidCallback onTextChanged;\n  final TextInputAction textInputAction;\n  final TextInputType? keyboardType;\n\n  const FitnessTextField({\n    required this.title,\n    required this.placeholder,\n    this.obscureText = false,\n    this.isError = false,\n    required this.controller,\n    required this.onTextChanged,\n    required this.errorText,\n    this.textInputAction = TextInputAction.done,\n    this.keyboardType,\n    Key? key,\n  }) : super(key: key);\n\n  @override\n  _FitnessTextFieldState createState() => _FitnessTextFieldState();\n}\n\nclass _FitnessTextFieldState extends State<FitnessTextField> {\n  final focusNode = FocusNode();\n  bool stateObscureText = false;\n  bool stateIsError = false;\n\n  @override\n  void initState() {\n    super.initState();\n\n    focusNode.addListener(\n      () {\n        setState(() {\n          if (focusNode.hasFocus) {\n            stateIsError = false;\n          }\n        });\n      },\n    );\n\n    stateObscureText = widget.obscureText;\n    stateIsError = widget.isError;\n  }\n\n  @override\n  void didUpdateWidget(covariant FitnessTextField oldWidget) {\n    super.didUpdateWidget(oldWidget);\n\n    stateObscureText = widget.obscureText;\n    stateIsError = focusNode.hasFocus ? false : widget.isError;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.infinity,\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          _createHeader(),\n          const SizedBox(height: 5),\n          _createTextFieldStack(),\n          if (stateIsError) ...[\n            _createError(),\n          ],\n        ],\n      ),\n    );\n  }\n\n  Widget _createHeader() {\n    return Text(\n      widget.title,\n      style: TextStyle(\n        color: _getUserNameColor(),\n        fontSize: 14,\n        fontWeight: FontWeight.w500,\n      ),\n    );\n  }\n\n  Color _getUserNameColor() {\n    if (focusNode.hasFocus) {\n      return ColorConstants.primaryColor;\n    } else if (stateIsError) {\n      return ColorConstants.errorColor;\n    } else if (widget.controller.text.isNotEmpty) {\n      return ColorConstants.textBlack;\n    }\n    return ColorConstants.grey;\n  }\n\n  Widget _createTextFieldStack() {\n    return Stack(\n      children: [\n        _createTextField(),\n        if (widget.obscureText) ...[\n          Positioned(\n            right: 0,\n            bottom: 0,\n            top: 0,\n            child: _createShowEye(),\n          ),\n        ],\n      ],\n    );\n  }\n\n  Widget _createTextField() {\n    return TextField(\n      focusNode: focusNode,\n      controller: widget.controller,\n      obscureText: stateObscureText,\n      textInputAction: widget.textInputAction,\n      keyboardType: widget.keyboardType,\n      style: TextStyle(\n        color: ColorConstants.textBlack,\n        fontSize: 16,\n      ),\n      decoration: InputDecoration(\n        enabledBorder: OutlineInputBorder(\n          borderRadius: BorderRadius.circular(10.0),\n          borderSide: BorderSide(\n            color: stateIsError ? ColorConstants.errorColor : ColorConstants.textFieldBorder.withOpacity(0.4),\n          ),\n        ),\n        focusedBorder: OutlineInputBorder(\n          borderRadius: BorderRadius.circular(10.0),\n          borderSide: BorderSide(\n            color: ColorConstants.primaryColor,\n          ),\n        ),\n        hintText: widget.placeholder,\n        hintStyle: TextStyle(\n          color: ColorConstants.grey,\n          fontSize: 16,\n        ),\n        filled: true,\n        fillColor: ColorConstants.textFieldBackground,\n      ),\n      onChanged: (text) {\n        setState(() {});\n        widget.onTextChanged();\n      },\n    );\n  }\n\n  Widget _createShowEye() {\n    return GestureDetector(\n      onTap: () {\n        setState(() {\n          stateObscureText = !stateObscureText;\n        });\n      },\n      child: Image(\n        image: AssetImage(\n          PathConstants.eye,\n        ),\n        color: widget.controller.text.isNotEmpty ? ColorConstants.primaryColor : ColorConstants.grey,\n      ),\n    );\n  }\n\n  Widget _createError() {\n    return Container(\n      padding: const EdgeInsets.only(top: 2),\n      child: Text(\n        widget.errorText,\n        style: TextStyle(\n          fontSize: 14,\n          color: ColorConstants.errorColor,\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/common_widgets/settings_container.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:flutter/material.dart';\n\nclass SettingsContainer extends StatelessWidget {\n  final bool withArrow;\n  final Widget child;\n  final Function()? onTap;\n\n  SettingsContainer({Key? key, this.withArrow = false, required this.child, this.onTap}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Padding(\n      padding: EdgeInsets.symmetric(vertical: 10.0),\n      child: Container(\n        child: Material(\n          color: Colors.transparent,\n          child: InkWell(\n            borderRadius: BorderRadius.circular(40),\n            onTap: onTap,\n            child: Padding(\n              padding: EdgeInsets.symmetric(horizontal: 20),\n              child: Row(\n                children: [Expanded(child: child), if (withArrow) Icon(Icons.arrow_forward_ios, color: ColorConstants.primaryColor, size: 20)],\n              ),\n            ),\n          ),\n        ),\n        width: double.infinity,\n        height: 50,\n        decoration: BoxDecoration(\n          borderRadius: BorderRadius.circular(40),\n          color: ColorConstants.white,\n          boxShadow: [BoxShadow(color: ColorConstants.textBlack.withOpacity(0.12), blurRadius: 5.0, spreadRadius: 1.1)],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/common_widgets/settings_textfield.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:flutter/material.dart';\n\nclass SettingsTextField extends StatefulWidget {\n  final TextEditingController controller;\n  final bool obscureText;\n  final String placeHolder;\n\n  const SettingsTextField({\n    Key? key,\n    required this.controller,\n    this.obscureText = false,\n    required this.placeHolder,\n  }) : super(key: key);\n\n  @override\n  _SettingsTextFieldState createState() => _SettingsTextFieldState();\n}\n\nclass _SettingsTextFieldState extends State<SettingsTextField> {\n  final focusNode = FocusNode();\n  bool stateObscureText = false;\n\n  @override\n  void initState() {\n    super.initState();\n\n    stateObscureText = widget.obscureText;\n  }\n\n  @override\n  void didUpdateWidget(covariant SettingsTextField oldWidget) {\n    super.didUpdateWidget(oldWidget);\n\n    stateObscureText = widget.obscureText;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.infinity,\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          Stack(\n            children: [\n              _createSettingsTextField(),\n              if (widget.obscureText) ...[\n                Positioned(\n                  right: 0,\n                  bottom: 0,\n                  top: 0,\n                  child: _createShowEye(),\n                ),\n              ],\n            ],\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createSettingsTextField() {\n    return TextField(\n      focusNode: focusNode,\n      controller: widget.controller,\n      obscureText: stateObscureText,\n      style: TextStyle(fontWeight: FontWeight.w600),\n      decoration: InputDecoration(\n        hintText: widget.placeHolder,\n        hintStyle: TextStyle(color: ColorConstants.grey, fontSize: 16),\n        border: InputBorder.none,\n        focusedBorder: InputBorder.none,\n        enabledBorder: InputBorder.none,\n        errorBorder: InputBorder.none,\n        disabledBorder: InputBorder.none,\n      ),\n    );\n  }\n\n  Widget _createShowEye() {\n    return GestureDetector(\n      onTap: () {\n        setState(() {\n          stateObscureText = !stateObscureText;\n        });\n      },\n      child: Image(\n        image: AssetImage(\n          PathConstants.eye,\n        ),\n        color: widget.controller.text.isNotEmpty\n            ? ColorConstants.primaryColor\n            : ColorConstants.grey,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/edit_account/bloc/edit_account_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/core/service/firebase_storage_service.dart';\nimport 'package:fitness_flutter/core/service/user_service.dart';\nimport 'package:image_picker/image_picker.dart';\nimport 'package:meta/meta.dart';\n\npart 'edit_account_event.dart';\npart 'edit_account_state.dart';\n\nclass EditAccountBloc extends Bloc<EditAccountEvent, EditAccountState> {\n  EditAccountBloc() : super(EditAccountInitial());\n\n  @override\n  Stream<EditAccountState> mapEventToState(\n    EditAccountEvent event,\n  ) async* {\n    if (event is UploadImage) {\n      try {\n        final XFile? image =\n            await ImagePicker().pickImage(source: ImageSource.gallery);\n        if (image != null) {\n          yield EditAccountProgress();\n          await FirebaseStorageService.uploadImage(filePath: image.path);\n          yield EditPhotoSuccess(image);\n        }\n      } catch (e) {\n        yield EditAccountError(e.toString());\n        await Future.delayed(Duration(seconds: 1));\n        yield EditAccountInitial();\n      }\n    }\n    if (event is ChangeUserData) {\n      yield EditAccountProgress();\n      try {\n        await UserService.changeUserData(\n            displayName: event.displayName, email: event.email);\n        yield EditAccountInitial();\n      } catch (e) {\n        yield EditAccountError(e.toString());\n        await Future.delayed(Duration(seconds: 1));\n        yield EditAccountInitial();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/edit_account/bloc/edit_account_event.dart",
    "content": "part of 'edit_account_bloc.dart';\n\n@immutable\nabstract class EditAccountEvent {}\n\nclass UploadImage extends EditAccountEvent {}\n\nclass ChangeUserData extends EditAccountEvent {\n  final String displayName;\n  final String email;\n  ChangeUserData({required this.displayName, required this.email});\n}\n"
  },
  {
    "path": "lib/screens/edit_account/bloc/edit_account_state.dart",
    "content": "part of 'edit_account_bloc.dart';\n\n@immutable\nabstract class EditAccountState {}\n\nclass EditAccountInitial extends EditAccountState {}\n\nclass EditAccountProgress extends EditAccountState {}\n\nclass EditAccountError extends EditAccountState {\n  final String error;\n  EditAccountError(this.error);\n}\n\nclass EditPhotoSuccess extends EditAccountState {\n  final XFile image;\n  EditPhotoSuccess(this.image);\n}\n"
  },
  {
    "path": "lib/screens/edit_account/edit_account_screen.dart",
    "content": "import 'dart:io';\n\nimport 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:fitness_flutter/screens/change_password/change_password_page.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_loading.dart';\nimport 'package:fitness_flutter/screens/common_widgets/settings_container.dart';\nimport 'package:fitness_flutter/screens/common_widgets/settings_textfield.dart';\nimport 'package:fitness_flutter/screens/edit_account/bloc/edit_account_bloc.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:permission_handler/permission_handler.dart';\n\nclass EditAccountScreen extends StatefulWidget {\n  EditAccountScreen({Key? key}) : super(key: key);\n\n  @override\n  _EditAccountScreenState createState() => _EditAccountScreenState();\n}\n\nclass _EditAccountScreenState extends State<EditAccountScreen> {\n  final TextEditingController _nameController = TextEditingController();\n  final TextEditingController _emailController = TextEditingController();\n  final User? user = FirebaseAuth.instance.currentUser;\n  String? photoUrl;\n  bool isNameInvalid = false;\n  bool isEmailInvalid = false;\n  late String userName;\n  late String userEmail;\n\n  @override\n  void initState() {\n    userName = user?.displayName ?? \"No Username\";\n    userEmail = user?.email ?? 'No email';\n    photoUrl = user?.photoURL ?? null;\n    _nameController.text = userName;\n    _emailController.text = userEmail;\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n        body: _buildContext(context),\n        appBar: AppBar(\n            title: Text(TextConstants.editAccount,\n                style: TextStyle(color: Colors.black, fontSize: 18)),\n            backgroundColor: Colors.transparent,\n            elevation: 0,\n            leading: IconButton(\n              icon: Icon(Icons.arrow_back_ios_new),\n              onPressed: () => Navigator.of(context).pop(),\n            ),\n            iconTheme: IconThemeData(\n              color: ColorConstants.primaryColor,\n            )));\n  }\n\n  BlocProvider<EditAccountBloc> _buildContext(BuildContext context) {\n    return BlocProvider<EditAccountBloc>(\n      create: (context) => EditAccountBloc(),\n      child: BlocConsumer<EditAccountBloc, EditAccountState>(\n        buildWhen: (_, currState) =>\n            currState is EditAccountInitial ||\n            currState is EditAccountProgress ||\n            currState is EditAccountError ||\n            currState is EditPhotoSuccess,\n        builder: (context, state) {\n          if (state is EditAccountProgress)\n            return Stack(\n              children: [_editAccountContent(context), FitnessLoading()],\n            );\n          if (state is EditAccountError) {\n            WidgetsBinding.instance!.addPostFrameCallback((_) async {\n              _showOpenSettingsPopUp();\n            });\n          }\n          if (state is EditPhotoSuccess) photoUrl = state.image.path;\n          return _editAccountContent(context);\n        },\n        listenWhen: (_, currState) => true,\n        listener: (context, state) {},\n      ),\n    );\n  }\n\n  Widget _editAccountContent(BuildContext context) {\n    EditAccountBloc _bloc = BlocProvider.of<EditAccountBloc>(context);\n    double height = MediaQuery.of(context).size.height;\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: Padding(\n          padding: EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0),\n          child: SizedBox(\n            height: height - 140 - MediaQuery.of(context).padding.bottom,\n            child:\n                Column(crossAxisAlignment: CrossAxisAlignment.start, children: [\n              Center(child: _getImageWidget()),\n              SizedBox(height: 15),\n              Center(\n                child: TextButton(\n                  onPressed: () {\n                    _bloc.add(UploadImage());\n                  },\n                  child: Text(\n                    TextConstants.editPhoto,\n                    style: TextStyle(\n                      fontSize: 18,\n                      fontWeight: FontWeight.bold,\n                      color: ColorConstants.primaryColor,\n                    ),\n                  ),\n                ),\n              ),\n              SizedBox(height: 15),\n              Text(\n                TextConstants.fullName,\n                style: TextStyle(fontWeight: FontWeight.w600),\n              ),\n              SettingsContainer(\n                  child: SettingsTextField(\n                controller: _nameController,\n                placeHolder: TextConstants.fullNamePlaceholder,\n              )),\n              if (isNameInvalid)\n                Text(TextConstants.nameShouldContain2Char,\n                    style: TextStyle(color: ColorConstants.errorColor)),\n              Text(TextConstants.email,\n                  style: TextStyle(fontWeight: FontWeight.w600)),\n              SettingsContainer(\n                  child: SettingsTextField(\n                controller: _emailController,\n                placeHolder: TextConstants.emailPlaceholder,\n              )),\n              if (isEmailInvalid)\n                Text(TextConstants.emailErrorText,\n                    style: TextStyle(color: ColorConstants.errorColor)),\n              SizedBox(height: 15),\n              InkWell(\n                onTap: () {\n                  Navigator.push(\n                      context,\n                      MaterialPageRoute(\n                          builder: (context) => ChangePasswordScreen()));\n                },\n                child: Row(\n                  mainAxisSize: MainAxisSize.min,\n                  children: [\n                    Text(TextConstants.changePassword,\n                        style: TextStyle(\n                            fontWeight: FontWeight.w600,\n                            color: ColorConstants.primaryColor,\n                            fontSize: 18)),\n                    SizedBox(width: 10),\n                    Icon(Icons.arrow_forward_ios,\n                        color: ColorConstants.primaryColor)\n                  ],\n                ),\n              ),\n              Spacer(),\n              FitnessButton(\n                title: TextConstants.save,\n                isEnabled: true,\n                onTap: () {\n                  FocusScope.of(context).unfocus();\n                  setState(() {\n                    isNameInvalid = !(_nameController.text.length > 1);\n                    isEmailInvalid =\n                        !ValidationService.email(_emailController.text);\n                  });\n                  if (!(isNameInvalid || isEmailInvalid)) {\n                    if (userName != _nameController.text ||\n                        userEmail != _emailController.text) {\n                      _bloc.add(ChangeUserData(\n                          displayName: _nameController.text,\n                          email: _emailController.text));\n                      userName = _nameController.text;\n                      userEmail = _emailController.text;\n                    }\n                  }\n                  Navigator.pop(context, true);\n                },\n              ),\n            ]),\n          ),\n        ),\n      ),\n    );\n  }\n\n  Widget _getImageWidget() {\n    if (photoUrl != null) {\n      if (photoUrl!.startsWith('https://')) {\n        return CircleAvatar(\n            child: ClipOval(\n                child: FadeInImage.assetNetwork(\n                    placeholder: PathConstants.profile,\n                    image: photoUrl!,\n                    fit: BoxFit.cover,\n                    width: 200,\n                    height: 120)),\n            radius: 60);\n      } else {\n        return CircleAvatar(\n            backgroundImage: FileImage(File(photoUrl!)), radius: 60);\n      }\n    } else\n      return CircleAvatar(\n          backgroundImage: AssetImage(PathConstants.profile), radius: 60);\n  }\n\n  void _showOpenSettingsPopUp() {\n    showDialog(\n      context: context,\n      builder: (BuildContext context) => CupertinoAlertDialog(\n        title: Text(TextConstants.cameraPermission),\n        content: Text(TextConstants.cameAccess),\n        actions: [\n          CupertinoDialogAction(\n            child: Text(TextConstants.deny),\n            onPressed: () => Navigator.of(context).pop(),\n          ),\n          CupertinoDialogAction(\n            child: Text(TextConstants.settings),\n            onPressed: () => openAppSettings(),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/forgot_password/bloc/forgot_password_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/core/service/auth_service.dart';\nimport 'package:flutter/material.dart';\nimport 'package:meta/meta.dart';\n\npart 'forgot_password_event.dart';\npart 'forgot_password_state.dart';\n\nclass ForgotPasswordBloc extends Bloc<ForgotPasswordEvent, ForgotPasswordState> {\n  ForgotPasswordBloc() : super(ForgotPasswordInitial());\n  final emailController = TextEditingController();\n  bool isError = false;\n\n  @override\n  Stream<ForgotPasswordState> mapEventToState(\n    ForgotPasswordEvent event,\n  ) async* {\n    if (event is ForgotPasswordTappedEvent) {\n      try {\n        yield ForgotPasswordLoading();\n        await AuthService.resetPassword(emailController.text);\n        yield ForgotPasswordSuccess();\n      } catch (e) {\n        print('Error: ' + e.toString());\n        yield ForgotPasswordError(message: e.toString());\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/forgot_password/bloc/forgot_password_event.dart",
    "content": "part of 'forgot_password_bloc.dart';\n\n@immutable\nabstract class ForgotPasswordEvent {}\n\nclass ForgotPasswordTappedEvent extends ForgotPasswordEvent {}\n"
  },
  {
    "path": "lib/screens/forgot_password/bloc/forgot_password_state.dart",
    "content": "part of 'forgot_password_bloc.dart';\n\n@immutable\nabstract class ForgotPasswordState {}\n\nclass ForgotPasswordInitial extends ForgotPasswordState {}\n\nclass ForgotPasswordError extends ForgotPasswordState {\n  final String message;\n\n  ForgotPasswordError({required this.message});\n}\n\nclass ForgotPasswordLoading extends ForgotPasswordState {}\n\nclass ForgotPasswordSuccess extends ForgotPasswordState {}\n"
  },
  {
    "path": "lib/screens/forgot_password/page/forgot_password_page.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/screens/forgot_password/bloc/forgot_password_bloc.dart';\nimport 'package:fitness_flutter/screens/forgot_password/widget/forgot_password_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass ForgotPasswordPage extends StatelessWidget {\n  const ForgotPasswordPage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n          title: Text(TextConstants.passwordReset, style: TextStyle(color: Colors.black, fontSize: 18)),\n          backgroundColor: Colors.transparent,\n          elevation: 0,\n          leading: IconButton(\n            icon: Icon(Icons.arrow_back_ios_new),\n            onPressed: () => Navigator.of(context).pop(),\n          ),\n          iconTheme: IconThemeData(\n            color: ColorConstants.primaryColor,\n          )),\n      body: _buildContext(context),\n    );\n  }\n\n  BlocProvider<ForgotPasswordBloc> _buildContext(BuildContext context) {\n    return BlocProvider<ForgotPasswordBloc>(\n      create: (BuildContext context) => ForgotPasswordBloc(),\n      child: BlocConsumer<ForgotPasswordBloc, ForgotPasswordState>(\n        buildWhen: (_, currState) => currState is ForgotPasswordInitial,\n        builder: (context, state) {\n          return ForgotPasswordContent();\n        },\n        listenWhen: (_, currState) => currState is ForgotPasswordError || currState is ForgotPasswordSuccess,\n        listener: (context, state) {\n          if (state is ForgotPasswordSuccess) {\n            forgotPasswordSuccessfullySended(context);\n          }\n          if (state is ForgotPasswordError) {\n            ScaffoldMessenger.of(context).showSnackBar(\n              SnackBar(content: Text(state.message)),\n            );\n          }\n        },\n      ),\n    );\n  }\n\n  Future<void> forgotPasswordSuccessfullySended(BuildContext context) async {\n    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(TextConstants.resetPasswordLinkWasSent), duration: Duration(seconds: 2)));\n    await Future.delayed(Duration(seconds: 2));\n    Navigator.pop(context);\n  }\n}\n"
  },
  {
    "path": "lib/screens/forgot_password/widget/forgot_password_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_loading.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_text_field.dart';\nimport 'package:fitness_flutter/screens/forgot_password/bloc/forgot_password_bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass ForgotPasswordContent extends StatefulWidget {\n  const ForgotPasswordContent({Key? key}) : super(key: key);\n\n  @override\n  _ForgotPasswordContentState createState() => _ForgotPasswordContentState();\n}\n\nclass _ForgotPasswordContentState extends State<ForgotPasswordContent> {\n  bool _isButtonEnabled = false;\n  bool _isTextFieldError = false;\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: double.infinity,\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: Stack(\n        children: [\n          _createMainData(context),\n          BlocBuilder<ForgotPasswordBloc, ForgotPasswordState>(\n            buildWhen: (_, currState) => currState is ForgotPasswordLoading || currState is ForgotPasswordError || currState is ForgotPasswordSuccess,\n            builder: (context, state) {\n              if (state is ForgotPasswordLoading) {\n                return _createLoading();\n              } else if (state is ForgotPasswordSuccess) {\n                return SizedBox();\n              } else if (state is ForgotPasswordError) {\n                return SizedBox();\n              }\n              return SizedBox();\n            },\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createLoading() {\n    return FitnessLoading();\n  }\n\n  Widget _createMainData(BuildContext context) {\n    double height = MediaQuery.of(context).size.height;\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: SizedBox(\n          height: height - 30 - MediaQuery.of(context).padding.bottom - kToolbarHeight,\n          child: Column(\n            children: [\n              Spacer(flex: 2),\n              _createForm(context),\n              Spacer(flex: 3),\n              _createResetPasswordButton(context),\n              const SizedBox(height: 30),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n\n  Widget _createForm(BuildContext context) {\n    final bloc = BlocProvider.of<ForgotPasswordBloc>(context);\n    return BlocBuilder<ForgotPasswordBloc, ForgotPasswordState>(\n      builder: (context, state) {\n        return FitnessTextField(\n          title: TextConstants.email,\n          keyboardType: TextInputType.emailAddress,\n          placeholder: TextConstants.emailPlaceholder,\n          controller: bloc.emailController,\n          errorText: TextConstants.emailErrorText,\n          isError: _isTextFieldError,\n          onTextChanged: () {\n            setState(() {\n              _isButtonEnabled = bloc.emailController.text.length > 0;\n            });\n          },\n        );\n      },\n    );\n  }\n\n  Widget _createResetPasswordButton(BuildContext context) {\n    final bloc = BlocProvider.of<ForgotPasswordBloc>(context);\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: BlocBuilder<ForgotPasswordBloc, ForgotPasswordState>(\n        builder: (context, state) {\n          return FitnessButton(\n            title: TextConstants.sendActivationBuild,\n            isEnabled: _isButtonEnabled,\n            onTap: () {\n              FocusScope.of(context).unfocus();\n              if (_isButtonEnabled) {\n                setState(() {\n                  _isTextFieldError = !ValidationService.email(bloc.emailController.text);\n                });\n                if (!_isTextFieldError) {\n                  bloc.add(ForgotPasswordTappedEvent());\n                }\n              }\n            },\n          );\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/home/bloc/home_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\n\npart 'home_event.dart';\npart 'home_state.dart';\n\nclass HomeBloc extends Bloc<HomeEvent, HomeState> {\n  HomeBloc() : super(HomeInitial());\n\n  @override\n  Stream<HomeState> mapEventToState(\n    HomeEvent event,\n  ) async* {\n    if (event is ReloadImageEvent) {\n      yield ReloadImageState();\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/home/bloc/home_event.dart",
    "content": "part of 'home_bloc.dart';\n\n@immutable\nabstract class HomeEvent {}\n\nclass ReloadImageEvent extends HomeEvent {}\n"
  },
  {
    "path": "lib/screens/home/bloc/home_state.dart",
    "content": "part of 'home_bloc.dart';\n\n@immutable\nabstract class HomeState {}\n\nclass HomeInitial extends HomeState {}\n\nclass ReloadImageState extends HomeState {}\n"
  },
  {
    "path": "lib/screens/home/page/home_page.dart",
    "content": "import 'package:fitness_flutter/screens/home/bloc/home_bloc.dart';\nimport 'package:fitness_flutter/screens/home/widget/home_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass HomePage extends StatelessWidget {\n  const HomePage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: _buildContext(context),\n    );\n  }\n\n  BlocProvider<HomeBloc> _buildContext(BuildContext context) {\n    return BlocProvider<HomeBloc>(\n      create: (BuildContext context) => HomeBloc(),\n      child: BlocConsumer<HomeBloc, HomeState>(\n        buildWhen: (_, currState) => currState is HomeInitial,\n        builder: (context, state) {\n          return HomeContent();\n        },\n        listenWhen: (_, currState) => true,\n        listener: (context, state) {},\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/home/widget/home_content.dart",
    "content": "import 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/data_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/screens/edit_account/edit_account_screen.dart';\nimport 'package:fitness_flutter/screens/home/bloc/home_bloc.dart';\nimport 'package:fitness_flutter/screens/home/widget/home_statistics.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/page/workout_details_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport 'home_exercises_card.dart';\n\nclass HomeContent extends StatelessWidget {\n  const HomeContent({\n    Key? key,\n  }) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      color: ColorConstants.homeBackgroundColor,\n      height: double.infinity,\n      width: double.infinity,\n      child: _createHomeBody(context),\n    );\n  }\n\n  Widget _createHomeBody(BuildContext context) {\n    return SafeArea(\n      child: ListView(\n        padding: const EdgeInsets.symmetric(vertical: 20),\n        children: [\n          _createProfileData(context),\n          const SizedBox(height: 35),\n          HomeStatistics(),\n          const SizedBox(height: 30),\n          _createExercisesList(context),\n          const SizedBox(height: 25),\n          _createProgress(),\n        ],\n      ),\n    );\n  }\n\n  Widget _createExercisesList(BuildContext context) {\n    return Column(\n      crossAxisAlignment: CrossAxisAlignment.start,\n      children: [\n        Padding(\n          padding: const EdgeInsets.symmetric(horizontal: 20),\n          child: Text(\n            TextConstants.discoverWorkouts,\n            style: TextStyle(\n              color: ColorConstants.textBlack,\n              fontSize: 18,\n              fontWeight: FontWeight.bold,\n            ),\n          ),\n        ),\n        const SizedBox(height: 15),\n        Container(\n          height: 160,\n          child: ListView(\n            scrollDirection: Axis.horizontal,\n            children: [\n              const SizedBox(width: 20),\n              WorkoutCard(\n                  color: ColorConstants.cardioColor,\n                  workout: DataConstants.homeWorkouts[0],\n                  onTap: () => Navigator.of(context).push(MaterialPageRoute(\n                      builder: (_) => WorkoutDetailsPage(\n                            workout: DataConstants.workouts[0],\n                          )))),\n              const SizedBox(width: 15),\n              WorkoutCard(\n                  color: ColorConstants.armsColor,\n                  workout: DataConstants.homeWorkouts[1],\n                  onTap: () => Navigator.of(context).push(MaterialPageRoute(\n                      builder: (_) => WorkoutDetailsPage(\n                            workout: DataConstants.workouts[2],\n                          )))),\n              const SizedBox(width: 20),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n\n  Widget _createProfileData(BuildContext context) {\n    final User? user = FirebaseAuth.instance.currentUser;\n    final displayName = user?.displayName ?? \"No Username\";\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: [\n          Column(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              Text(\n                'Hi, $displayName',\n                style: TextStyle(\n                  fontSize: 24,\n                  fontWeight: FontWeight.bold,\n                ),\n              ),\n              const SizedBox(height: 2),\n              Text(\n                TextConstants.checkActivity,\n                style: TextStyle(\n                  fontSize: 18,\n                  fontWeight: FontWeight.w500,\n                ),\n              ),\n            ],\n          ),\n          BlocBuilder<HomeBloc, HomeState>(\n            buildWhen: (_, currState) => currState is ReloadImageState,\n            builder: (context, state) {\n              final photoUrl =\n                  FirebaseAuth.instance.currentUser?.photoURL ?? null;\n              return GestureDetector(\n                child: photoUrl == null\n                    ? CircleAvatar(\n                        backgroundImage: AssetImage(PathConstants.profile),\n                        radius: 60)\n                    : CircleAvatar(\n                        child: ClipOval(\n                            child: FadeInImage.assetNetwork(\n                                placeholder: PathConstants.profile,\n                                image: photoUrl,\n                                fit: BoxFit.cover,\n                                width: 200,\n                                height: 120)),\n                        radius: 25),\n                onTap: () async {\n                  await Navigator.of(context).push(\n                      MaterialPageRoute(builder: (_) => EditAccountScreen()));\n                  BlocProvider.of<HomeBloc>(context).add(ReloadImageEvent());\n                },\n              );\n            },\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createProgress() {\n    return Container(\n      width: double.infinity,\n      margin: const EdgeInsets.symmetric(horizontal: 20),\n      padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 15),\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(10),\n        color: ColorConstants.white,\n        boxShadow: [\n          BoxShadow(\n            color: ColorConstants.textBlack.withOpacity(0.12),\n            blurRadius: 5.0,\n            spreadRadius: 1.1,\n          ),\n        ],\n      ),\n      child: Row(\n        children: [\n          Image(\n            image: AssetImage(\n              PathConstants.progress,\n            ),\n          ),\n          SizedBox(width: 20),\n          Flexible(\n            child: Column(\n              crossAxisAlignment: CrossAxisAlignment.start,\n              children: [\n                Text(\n                  TextConstants.keepProgress,\n                  style: TextStyle(\n                    fontSize: 18,\n                    fontWeight: FontWeight.bold,\n                  ),\n                ),\n                const SizedBox(height: 3),\n                Text(\n                  TextConstants.profileSuccessful,\n                  style: TextStyle(\n                    fontSize: 16,\n                  ),\n                  overflow: TextOverflow.ellipsis,\n                  maxLines: 2,\n                ),\n              ],\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/home/widget/home_exercises_card.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:flutter/material.dart';\n\nclass WorkoutCard extends StatelessWidget {\n  final Color color;\n  final WorkoutData workout;\n  final Function() onTap;\n\n  WorkoutCard({\n    required this.color,\n    required this.workout,\n    required this.onTap,\n  });\n  @override\n  Widget build(BuildContext context) {\n    final screenWidth = MediaQuery.of(context).size.width;\n    return GestureDetector(\n      onTap: onTap,\n      child: Container(\n        padding: const EdgeInsets.only(\n          left: 20,\n          top: 10,\n          right: 12,\n        ),\n        height: 160,\n        width: screenWidth * 0.6,\n        decoration: BoxDecoration(\n          borderRadius: BorderRadius.circular(15),\n          color: color,\n        ),\n        child: Stack(\n          children: [\n            Row(\n              mainAxisAlignment: MainAxisAlignment.spaceBetween,\n              children: [\n                Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    const SizedBox(height: 5),\n                    Text(\n                      workout.title,\n                      style: TextStyle(\n                        color: ColorConstants.white,\n                        fontSize: 24,\n                        fontWeight: FontWeight.bold,\n                      ),\n                    ),\n                    const SizedBox(height: 10),\n                    Text(\n                      \"${workout.exercices} exercises\",\n                      style: TextStyle(\n                        color: ColorConstants.white,\n                        fontSize: 16,\n                        fontWeight: FontWeight.w500,\n                      ),\n                    ),\n                    const SizedBox(height: 5),\n                    Text(\n                      \"${workout.minutes} minutes\",\n                      style: TextStyle(\n                        color: ColorConstants.white,\n                        fontSize: 16,\n                        fontWeight: FontWeight.w500,\n                      ),\n                    ),\n                  ],\n                ),\n              ],\n            ),\n            Positioned(\n              right: 0,\n              bottom: 0,\n              child: Image(\n                image: AssetImage(workout.image),\n              ),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/home/widget/home_statistics.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:flutter/material.dart';\n\nclass HomeStatistics extends StatelessWidget {\n  const HomeStatistics({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      margin: const EdgeInsets.symmetric(horizontal: 20),\n      child: Row(\n        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n        children: [\n          _createComletedWorkouts(context),\n          _createColumnStatistics(),\n        ],\n      ),\n    );\n  }\n\n  Widget _createComletedWorkouts(BuildContext context) {\n    final screenWidth = MediaQuery.of(context).size.width;\n    return Container(\n      padding: const EdgeInsets.all(15),\n      height: 200,\n      width: screenWidth * 0.35,\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(10),\n        color: ColorConstants.white,\n        boxShadow: [\n          BoxShadow(\n            color: ColorConstants.textBlack.withOpacity(0.12),\n            blurRadius: 5.0,\n            spreadRadius: 1.1,\n          ),\n        ],\n      ),\n      child: Column(\n        mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n        children: [\n          Row(\n            children: [\n              Image(\n                image: AssetImage(\n                  PathConstants.finished,\n                ),\n              ),\n              const SizedBox(width: 10),\n              Expanded(\n                child: Text(\n                  TextConstants.finished,\n                  style: TextStyle(\n                    color: ColorConstants.textBlack,\n                    fontSize: 18,\n                    fontWeight: FontWeight.w500,\n                  ),\n                  overflow: TextOverflow.fade,\n                  softWrap: false,\n                ),\n              ),\n            ],\n          ),\n          Text(\n            '12',\n            style: TextStyle(\n              fontSize: 48,\n              fontWeight: FontWeight.w700,\n              color: ColorConstants.textBlack,\n            ),\n          ),\n          Text(\n            TextConstants.completedWorkouts,\n            textAlign: TextAlign.center,\n            style: TextStyle(\n              fontSize: 16,\n              fontWeight: FontWeight.w500,\n              color: ColorConstants.textGrey,\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createColumnStatistics() {\n    return Column(\n      children: [\n        DataWorkouts(\n          icon: PathConstants.inProgress,\n          title: TextConstants.inProgress,\n          count: 2,\n          text: TextConstants.workouts,\n        ),\n        const SizedBox(height: 20),\n        DataWorkouts(\n          icon: PathConstants.timeSent,\n          title: TextConstants.timeSent,\n          count: 62,\n          text: TextConstants.minutes,\n        ),\n      ],\n    );\n  }\n}\n\nclass DataWorkouts extends StatelessWidget {\n  final String icon;\n  final String title;\n  final int count;\n  final String text;\n\n  DataWorkouts({\n    required this.icon,\n    required this.title,\n    required this.count,\n    required this.text,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    final screenWidth = MediaQuery.of(context).size.width;\n    return Container(\n      padding: const EdgeInsets.symmetric(horizontal: 15),\n      height: 90,\n      width: screenWidth * 0.5,\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(10),\n        color: ColorConstants.white,\n        boxShadow: [\n          BoxShadow(\n            color: ColorConstants.textBlack.withOpacity(0.12),\n            blurRadius: 5.0,\n            spreadRadius: 1.1,\n          ),\n        ],\n      ),\n      child: Column(\n        mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n        children: [\n          Row(\n            children: [\n              Image(image: AssetImage(icon)),\n              const SizedBox(width: 10),\n              Text(\n                title,\n                style: TextStyle(\n                  fontSize: 18,\n                  fontWeight: FontWeight.w500,\n                  color: ColorConstants.textBlack,\n                ),\n              ),\n            ],\n          ),\n          Row(\n            children: [\n              Text(\n                count.toString(),\n                style: TextStyle(\n                  fontSize: 24,\n                  fontWeight: FontWeight.w700,\n                  color: ColorConstants.textBlack,\n                ),\n              ),\n              const SizedBox(width: 10),\n              Text(\n                text,\n                style: TextStyle(\n                  fontSize: 16,\n                  fontWeight: FontWeight.w500,\n                  color: ColorConstants.grey,\n                ),\n              ),\n            ],\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/onboarding/bloc/onboarding_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:meta/meta.dart';\n\npart 'onboarding_event.dart';\npart 'onboarding_state.dart';\n\nclass OnboardingBloc extends Bloc<OnboardingEvent, OnboardingState> {\n  OnboardingBloc() : super(OnboardingInitial());\n\n  int pageIndex = 0;\n\n  final pageController = PageController(initialPage: 0);\n\n  @override\n  Stream<OnboardingState> mapEventToState(\n    OnboardingEvent event,\n  ) async* {\n    if (event is PageChangedEvent) {\n      if (pageIndex == 2) {\n        yield NextScreenState();\n        return;\n      }\n      pageIndex += 1;\n\n      pageController.animateToPage(\n        pageIndex,\n        duration: Duration(milliseconds: 500),\n        curve: Curves.ease,\n      );\n\n      yield PageChangedState(counter: pageIndex);\n    } else if (event is PageSwipedEvent) {\n      pageIndex = event.index;\n      yield PageChangedState(counter: pageIndex);\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/onboarding/bloc/onboarding_event.dart",
    "content": "part of 'onboarding_bloc.dart';\n\n@immutable\nabstract class OnboardingEvent {}\n\nclass PageChangedEvent extends OnboardingEvent {}\n\nclass PageSwipedEvent extends OnboardingEvent {\n  final int index;\n\n  PageSwipedEvent({required this.index});\n}\n"
  },
  {
    "path": "lib/screens/onboarding/bloc/onboarding_state.dart",
    "content": "part of 'onboarding_bloc.dart';\n\n@immutable\nabstract class OnboardingState {}\n\nclass OnboardingInitial extends OnboardingState {}\n\nclass PageChangedState extends OnboardingState {\n  final int counter;\n\n  PageChangedState({\n    required this.counter,\n  });\n}\n\nclass NextScreenState extends OnboardingState {}\n"
  },
  {
    "path": "lib/screens/onboarding/page/onboarding_page.dart",
    "content": "import 'package:fitness_flutter/screens/onboarding/bloc/onboarding_bloc.dart';\nimport 'package:fitness_flutter/screens/onboarding/widget/onboarding_content.dart';\nimport 'package:fitness_flutter/screens/sign_up/page/sign_up_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass OnboardingPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: _buildBody(context),\n    );\n  }\n\n  BlocProvider<OnboardingBloc> _buildBody(BuildContext context) {\n    return BlocProvider<OnboardingBloc>(\n      create: (BuildContext context) => OnboardingBloc(),\n      child: BlocConsumer<OnboardingBloc, OnboardingState>(\n        listenWhen: (_, currState) => currState is NextScreenState,\n        listener: (context, state) {\n          Navigator.of(context).pushReplacement(\n            MaterialPageRoute(\n              builder: (_) {\n                return SignUpPage();\n              },\n            ),\n          );\n        },\n        buildWhen: (_, currState) => currState is OnboardingInitial,\n        builder: (context, state) {\n          return OnboardingContent();\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/onboarding/widget/onboarding_content.dart",
    "content": "import 'package:dots_indicator/dots_indicator.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/data_constants.dart';\nimport 'package:fitness_flutter/screens/onboarding/bloc/onboarding_bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:percent_indicator/circular_percent_indicator.dart';\n\nclass OnboardingContent extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final bloc = BlocProvider.of<OnboardingBloc>(context);\n    return SafeArea(\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.center,\n        children: [\n          Expanded(\n            flex: 4,\n            child: _createPageView(bloc.pageController, bloc),\n          ),\n          Expanded(\n            flex: 2,\n            child: _createStatic(bloc),\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createPageView(PageController controller, OnboardingBloc bloc) {\n    return PageView(\n      scrollDirection: Axis.horizontal,\n      controller: controller,\n      children: DataConstants.onboardingTiles,\n      onPageChanged: (index) {\n        bloc.add(PageSwipedEvent(index: index));\n      },\n    );\n  }\n\n  Widget _createStatic(OnboardingBloc bloc) {\n    return Column(\n      children: [\n        SizedBox(\n          height: 30,\n        ),\n        BlocBuilder<OnboardingBloc, OnboardingState>(\n          buildWhen: (_, currState) => currState is PageChangedState,\n          builder: (context, state) {\n            return DotsIndicator(\n              dotsCount: 3,\n              position: bloc.pageIndex.toDouble(),\n              decorator: DotsDecorator(\n                color: Colors.grey,\n                activeColor: ColorConstants.primaryColor,\n              ),\n            );\n          },\n        ),\n        Spacer(),\n        BlocBuilder<OnboardingBloc, OnboardingState>(\n          buildWhen: (_, currState) => currState is PageChangedState,\n          builder: (context, state) {\n            final percent = _getPercent(bloc.pageIndex);\n            return TweenAnimationBuilder<double>(\n                tween: Tween<double>(begin: 0, end: percent),\n                duration: Duration(seconds: 1),\n                builder: (context, value, _) => CircularPercentIndicator(\n                      radius: 110,\n                      backgroundColor: ColorConstants.primaryColor,\n                      progressColor: Colors.white,\n                      percent: 1 - value,\n                      center: Material(\n                        shape: CircleBorder(),\n                        color: ColorConstants.primaryColor,\n                        child: RawMaterialButton(\n                          shape: CircleBorder(),\n                          onPressed: () {\n                            bloc.add(PageChangedEvent());\n                          },\n                          child: Padding(\n                            padding: const EdgeInsets.all(24.0),\n                            child: Icon(\n                              Icons.east_rounded,\n                              size: 38.0,\n                              color: Colors.white,\n                            ),\n                          ),\n                        ),\n                      ),\n                    ));\n          },\n        ),\n        SizedBox(height: 30),\n      ],\n    );\n  }\n\n  double _getPercent(int pageIndex) {\n    switch (pageIndex) {\n      case 0:\n        return 0.25;\n      case 1:\n        return 0.65;\n      case 2:\n        return 1;\n      default:\n        return 0;\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/onboarding/widget/onboarding_tile.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass OnboardingTile extends StatelessWidget {\n  final title, imagePath, mainText;\n\n  OnboardingTile({this.imagePath, this.mainText, this.title});\n\n  @override\n  Widget build(BuildContext context) {\n    final screenWidth = MediaQuery.of(context).size.width;\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 24),\n      child: Column(\n        children: [\n          const SizedBox(height: 34),\n          Expanded(\n            child: Image.asset(\n              imagePath,\n            ),\n          ),\n          const SizedBox(height: 65),\n          Text(\n            title,\n            style: TextStyle(\n              fontWeight: FontWeight.w700,\n              fontSize: 24.0,\n            ),\n          ),\n          const SizedBox(height: 15),\n          Padding(\n            padding: EdgeInsets.symmetric(\n              horizontal: screenWidth / 100,\n            ),\n            child: Text(\n              mainText,\n              style: TextStyle(\n                fontSize: 16.0,\n              ),\n              textAlign: TextAlign.center,\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/reminder/bloc/reminder_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter_local_notifications/flutter_local_notifications.dart';\nimport 'package:meta/meta.dart';\nimport 'package:timezone/timezone.dart' as tz;\n\npart 'reminder_event.dart';\npart 'reminder_state.dart';\n\nclass ReminderBloc extends Bloc<ReminderEvent, ReminderState> {\n  ReminderBloc() : super(ReminderInitial());\n\n  int? selectedRepeatDayIndex;\n  late DateTime reminderTime;\n  int? dayTime;\n\n  @override\n  Stream<ReminderState> mapEventToState(\n    ReminderEvent event,\n  ) async* {\n    if (event is RepeatDaySelectedEvent) {\n      selectedRepeatDayIndex = event.index;\n      dayTime = event.dayTime;\n      yield RepeatDaySelectedState(index: selectedRepeatDayIndex);\n    } else if (event is ReminderNotificationTimeEvent) {\n      reminderTime = event.dateTime;\n      yield ReminderNotificationState();\n    } else if (event is OnSaveTappedEvent) {\n      _scheuleAtParticularTimeAndDate(reminderTime, dayTime);\n      yield OnSaveTappedState();\n    }\n  }\n\n  Future _scheuleAtParticularTimeAndDate(\n      DateTime dateTime, int? dayTime) async {\n    final flutterNotificationsPlugin = FlutterLocalNotificationsPlugin();\n    final androidPlatformChannelSpecifics = AndroidNotificationDetails(\n        'your other channel id',\n        'your other channel name',\n        'your other channel description');\n    final iOSPlatformChannelSpecifics = IOSNotificationDetails();\n    NotificationDetails platformChannelSpecifics = NotificationDetails(\n        android: androidPlatformChannelSpecifics,\n        iOS: iOSPlatformChannelSpecifics);\n\n    await flutterNotificationsPlugin.zonedSchedule(\n      1,\n      \"Fitness\",\n      \"Hey, it's time to start your exercises!\",\n      _scheduleWeekly(dateTime, days: _createNotificationDayOfTheWeek(dayTime)),\n      platformChannelSpecifics,\n      uiLocalNotificationDateInterpretation:\n          UILocalNotificationDateInterpretation.absoluteTime,\n      androidAllowWhileIdle: true,\n      matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime,\n    );\n  }\n\n  tz.TZDateTime _scheduleDaily(DateTime dateTime) {\n    final now = tz.TZDateTime.now(tz.local);\n    var timezoneOffset = DateTime.now().timeZoneOffset;\n    final scheduleDate = tz.TZDateTime.utc(now.year, now.month, now.day)\n        .add(Duration(hours: dateTime.hour, minutes: dateTime.minute))\n        .subtract(Duration(hours: timezoneOffset.inHours));\n\n    return scheduleDate.isBefore(now)\n        ? scheduleDate.add(Duration(days: 1))\n        : scheduleDate;\n  }\n\n  tz.TZDateTime _scheduleWeekly(DateTime dateTime, {required List<int>? days}) {\n    tz.TZDateTime scheduleDate = _scheduleDaily(dateTime);\n\n    for (final int day in days ?? []) {\n      scheduleDate = scheduleDate.add(Duration(days: day));\n    }\n\n    return scheduleDate;\n  }\n\n  List<int> _createNotificationDayOfTheWeek(int? dayTime) {\n    switch (dayTime) {\n      case 0:\n        return [\n          DateTime.monday,\n          DateTime.tuesday,\n          DateTime.wednesday,\n          DateTime.thursday,\n          DateTime.friday,\n          DateTime.saturday,\n          DateTime.sunday\n        ];\n      case 1:\n        return [\n          DateTime.monday,\n          DateTime.tuesday,\n          DateTime.wednesday,\n          DateTime.thursday,\n          DateTime.friday\n        ];\n      case 2:\n        return [DateTime.saturday, DateTime.sunday];\n      case 3:\n        return [DateTime.monday];\n      case 4:\n        return [DateTime.tuesday];\n      case 5:\n        return [DateTime.wednesday];\n      case 6:\n        return [DateTime.thursday];\n      case 7:\n        return [DateTime.friday];\n      case 8:\n        return [DateTime.saturday];\n      case 9:\n        return [DateTime.sunday];\n      default:\n        return [];\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/reminder/bloc/reminder_event.dart",
    "content": "part of 'reminder_bloc.dart';\n\n@immutable\nabstract class ReminderEvent {}\n\nclass RepeatDaySelectedEvent extends ReminderEvent {\n  final int index;\n  final int dayTime;\n\n  RepeatDaySelectedEvent({required this.index, required this.dayTime});\n}\n\nclass ReminderNotificationTimeEvent extends ReminderEvent {\n  final DateTime dateTime;\n\n  ReminderNotificationTimeEvent({required this.dateTime});\n}\n\nclass OnSaveTappedEvent extends ReminderEvent {}\n"
  },
  {
    "path": "lib/screens/reminder/bloc/reminder_state.dart",
    "content": "part of 'reminder_bloc.dart';\n\n@immutable\nabstract class ReminderState {}\n\nclass ReminderInitial extends ReminderState {}\n\nclass RepeatDaySelectedState extends ReminderState {\n  final int? index;\n\n  RepeatDaySelectedState({\n    required this.index,\n  });\n}\n\nclass ReminderNotificationState extends ReminderState {}\n\nclass OnSaveTappedState extends ReminderState {}\n"
  },
  {
    "path": "lib/screens/reminder/page/reminder_page.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/reminder/bloc/reminder_bloc.dart';\nimport 'package:fitness_flutter/screens/reminder/widget/reminder_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass ReminderPage extends StatelessWidget {\n  const ReminderPage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider<ReminderBloc>(\n      create: (context) => ReminderBloc(),\n      child: BlocBuilder<ReminderBloc, ReminderState>(\n        buildWhen: (_, currState) => currState is ReminderInitial,\n        builder: (context, state) {\n          return Scaffold(\n            body: _buildContext(context),\n            appBar: AppBar(\n              centerTitle: false,\n              titleSpacing: 0,\n              title: Text(\n                TextConstants.reminder,\n                style: TextStyle(color: Colors.black, fontSize: 18),\n              ),\n              backgroundColor: Colors.transparent,\n              elevation: 0,\n              leading: IconButton(\n                icon: Icon(\n                  Icons.arrow_back_ios_new,\n                  color: ColorConstants.primaryColor,\n                ),\n                onPressed: () => Navigator.of(context).pop(),\n              ),\n            ),\n            floatingActionButtonLocation:\n                FloatingActionButtonLocation.centerFloat,\n            floatingActionButton: Padding(\n              padding: EdgeInsets.symmetric(horizontal: 20),\n              child: FitnessButton(\n                title: TextConstants.save,\n                onTap: () {\n                  final bloc = BlocProvider.of<ReminderBloc>(context);\n                  bloc.add(OnSaveTappedEvent());\n                },\n              ),\n            ),\n          );\n        },\n      ),\n    );\n  }\n\n  BlocConsumer<ReminderBloc, ReminderState> _buildContext(\n      BuildContext context) {\n    return BlocConsumer<ReminderBloc, ReminderState>(\n      buildWhen: (_, currState) => currState is ReminderInitial,\n      builder: (context, state) {\n        if (state is ReminderInitial) {\n          BlocProvider.of<ReminderBloc>(context).add(\n            ReminderNotificationTimeEvent(dateTime: DateTime.now()),\n          );\n        }\n        return ReminderContent();\n      },\n      listenWhen: (_, currState) => currState is OnSaveTappedState,\n      listener: (context, state) {\n        Navigator.of(context).pop();\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/reminder/widget/reminder_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/data_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/screens/reminder/bloc/reminder_bloc.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass ReminderContent extends StatelessWidget {\n  const ReminderContent({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: double.infinity,\n      height: double.infinity,\n      color: ColorConstants.white,\n      child: _createDetailedReminder(context),\n    );\n  }\n\n  Widget _createDetailedReminder(BuildContext context) {\n    return Container(\n      padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),\n      child: ListView(\n        children: [\n          Column(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              _createSelectTime(),\n              const SizedBox(height: 20),\n              _createTimePicker(context),\n              const SizedBox(height: 20),\n              _createRepeating(),\n              const SizedBox(height: 15),\n              _createDayRepeating(context),\n            ],\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createSelectTime() {\n    return Text(\n      TextConstants.selectTime,\n      style: TextStyle(\n        fontSize: 18,\n        fontWeight: FontWeight.w600,\n      ),\n    );\n  }\n\n  Widget _createTimePicker(BuildContext context) {\n    final bloc = BlocProvider.of<ReminderBloc>(context);\n    return Container(\n      height: 250,\n      child: CupertinoDatePicker(\n        mode: CupertinoDatePickerMode.time,\n        onDateTimeChanged: (DateTime value) {\n          bloc.add(ReminderNotificationTimeEvent(dateTime: value));\n        },\n      ),\n    );\n  }\n\n  Widget _createRepeating() {\n    return Text(TextConstants.repeating,\n        style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600));\n  }\n\n  Widget _createDayRepeating(BuildContext context) {\n    final bloc = BlocProvider.of<ReminderBloc>(context);\n    return BlocBuilder<ReminderBloc, ReminderState>(\n      buildWhen: (_, currState) => currState is RepeatDaySelectedState,\n      builder: (context, state) {\n        return Wrap(\n          spacing: 10,\n          runSpacing: 15,\n          children: [\n            for (int i = 0; i < DataConstants.reminderDays.length; i++) ...[\n              RepeatingDay(\n                title: DataConstants.reminderDays[i],\n                isSelected: bloc.selectedRepeatDayIndex == i,\n                onTap: () {\n                  bloc.add(RepeatDaySelectedEvent(\n                      index: i, dayTime: bloc.dayTime = i));\n                },\n              ),\n            ],\n          ],\n        );\n      },\n    );\n  }\n}\n\nclass RepeatingDay extends StatelessWidget {\n  final String title;\n  final bool isSelected;\n  final VoidCallback onTap;\n\n  RepeatingDay({\n    required this.title,\n    required this.isSelected,\n    required this.onTap,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    return GestureDetector(\n      onTap: () {\n        onTap();\n      },\n      child: Container(\n        padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 7),\n        decoration: BoxDecoration(\n          color: isSelected\n              ? ColorConstants.primaryColor\n              : ColorConstants.grey.withOpacity(0.18),\n          borderRadius: BorderRadius.circular(20),\n        ),\n        child: Text(\n          title,\n          style: TextStyle(\n            fontSize: 16,\n            fontWeight: FontWeight.w600,\n            color: isSelected ? ColorConstants.white : ColorConstants.grey,\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/settings/bloc/bloc/settings_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\n\npart 'settings_event.dart';\npart 'settings_state.dart';\n\nclass SettingsBloc extends Bloc<SettingsEvent, SettingsState> {\n  SettingsBloc() : super(SettingsInitial());\n\n  @override\n  Stream<SettingsState> mapEventToState(\n    SettingsEvent event,\n  ) async* {}\n}\n"
  },
  {
    "path": "lib/screens/settings/bloc/bloc/settings_event.dart",
    "content": "part of 'settings_bloc.dart';\n\n@immutable\nabstract class SettingsEvent {}\n"
  },
  {
    "path": "lib/screens/settings/bloc/bloc/settings_state.dart",
    "content": "part of 'settings_bloc.dart';\n\n@immutable\nabstract class SettingsState {}\n\nclass SettingsInitial extends SettingsState {}\n"
  },
  {
    "path": "lib/screens/settings/settings_screen.dart",
    "content": "import 'dart:io';\n\nimport 'package:firebase_auth/firebase_auth.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/auth_service.dart';\nimport 'package:fitness_flutter/screens/common_widgets/settings_container.dart';\nimport 'package:fitness_flutter/screens/edit_account/edit_account_screen.dart';\nimport 'package:fitness_flutter/screens/reminder/page/reminder_page.dart';\nimport 'package:fitness_flutter/screens/settings/bloc/bloc/settings_bloc.dart';\nimport 'package:fitness_flutter/screens/sign_in/page/sign_in_page.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:url_launcher/url_launcher.dart';\n\nclass SettingsScreen extends StatefulWidget {\n  const SettingsScreen({Key? key}) : super(key: key);\n\n  @override\n  _SettingsScreenState createState() => _SettingsScreenState();\n}\n\nclass _SettingsScreenState extends State<SettingsScreen> {\n  String? photoUrl;\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(body: _buildContext(context));\n  }\n\n  BlocProvider<SettingsBloc> _buildContext(BuildContext context) {\n    return BlocProvider<SettingsBloc>(\n      create: (context) => SettingsBloc(),\n      child: BlocConsumer<SettingsBloc, SettingsState>(\n        buildWhen: (_, currState) => currState is SettingsInitial,\n        builder: (context, state) {\n          return _settingsContent(context);\n        },\n        listenWhen: (_, currState) => true,\n        listener: (context, state) {},\n      ),\n    );\n  }\n\n  Widget _settingsContent(BuildContext context) {\n    final User? user = FirebaseAuth.instance.currentUser;\n    final displayName = user?.displayName ?? \"No Username\";\n    photoUrl = user?.photoURL ?? null;\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: Padding(\n          padding: EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0),\n          child: Column(children: [\n            Stack(alignment: Alignment.topRight, children: [\n              Center(\n                child: photoUrl == null\n                    ? CircleAvatar(backgroundImage: AssetImage(PathConstants.profile), radius: 60)\n                    : CircleAvatar(\n                        child: ClipOval(\n                            child: FadeInImage.assetNetwork(\n                          placeholder: PathConstants.profile,\n                          image: photoUrl!,\n                          fit: BoxFit.cover,\n                          width: 200,\n                          height: 120,\n                        )),\n                        radius: 60,\n                      ),\n              ),\n              TextButton(\n                  onPressed: () async {\n                    await Navigator.push(context, MaterialPageRoute(builder: (context) => EditAccountScreen()));\n                    setState(() {\n                      photoUrl = user?.photoURL ?? null;\n                    });\n                  },\n                  style: TextButton.styleFrom(shape: CircleBorder(), backgroundColor: ColorConstants.primaryColor.withOpacity(0.16)),\n                  child: Icon(Icons.edit, color: ColorConstants.primaryColor)),\n            ]),\n            SizedBox(height: 15),\n            Text(displayName, style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),\n            SizedBox(height: 15),\n            SettingsContainer(\n              child: Text(TextConstants.reminder, style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500)),\n              withArrow: true,\n              onTap: () {\n                Navigator.push(context, MaterialPageRoute(builder: (_) => ReminderPage()));\n              },\n            ),\n            if (!kIsWeb)\n              SettingsContainer(\n                child: Text(TextConstants.rateUsOn + '${Platform.isIOS ? 'App store' : 'Play market'}',\n                    style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500)),\n                onTap: () {\n                  return launch(Platform.isIOS ? 'https://www.apple.com/app-store/' : 'https://play.google.com/store');\n                },\n              ),\n            SettingsContainer(\n                onTap: () => launch('https://perpet.io/'), child: Text(TextConstants.terms, style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500))),\n            SettingsContainer(\n                child: Text(TextConstants.signOut, style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500)),\n                onTap: () {\n                  AuthService.signOut();\n                  Navigator.pushReplacement(\n                    context,\n                    MaterialPageRoute(builder: (_) => SignInPage()),\n                  );\n                }),\n            SizedBox(height: 15),\n            Text(TextConstants.joinUs, style: TextStyle(fontSize: 18, fontWeight: FontWeight.w600)),\n            SizedBox(height: 15),\n            Row(\n              mainAxisAlignment: MainAxisAlignment.center,\n              children: [\n                TextButton(\n                    onPressed: () => launch('https://www.facebook.com/perpetio/'),\n                    style: TextButton.styleFrom(shape: CircleBorder(), backgroundColor: Colors.white, elevation: 1),\n                    child: Image.asset(PathConstants.facebook)),\n                TextButton(\n                    onPressed: () => launch('https://www.instagram.com/perpetio/'),\n                    style: TextButton.styleFrom(shape: CircleBorder(), backgroundColor: Colors.white, elevation: 1),\n                    child: Image.asset(PathConstants.instagram)),\n                TextButton(\n                    onPressed: () => launch('https://twitter.com/perpetio'),\n                    style: TextButton.styleFrom(shape: CircleBorder(), backgroundColor: Colors.white, elevation: 1),\n                    child: Image.asset(PathConstants.twitter)),\n              ],\n            )\n          ]),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_in/bloc/sign_in_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/core/service/auth_service.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:flutter/material.dart';\n\npart 'sign_in_event.dart';\npart 'sign_in_state.dart';\n\nclass SignInBloc extends Bloc<SignInEvent, SignInState> {\n  SignInBloc() : super(SignInInitial());\n\n  final emailController = TextEditingController();\n  final passwordController = TextEditingController();\n\n  bool isButtonEnabled = false;\n\n  @override\n  Stream<SignInState> mapEventToState(\n    SignInEvent event,\n  ) async* {\n    if (event is OnTextChangeEvent) {\n      if (isButtonEnabled != _checkIfSignInButtonEnabled()) {\n        isButtonEnabled = _checkIfSignInButtonEnabled();\n        yield SignInButtonEnableChangedState(isEnabled: isButtonEnabled);\n      }\n    } else if (event is SignInTappedEvent) {\n      if (_checkValidatorsOfTextField()) {\n        try {\n          yield LoadingState();\n          await AuthService.signIn(emailController.text, passwordController.text);\n          yield NextTabBarPageState();\n          print(\"Go to the next page\");\n        } catch (e) {\n          print('E to tstrng: ' + e.toString());\n          yield ErrorState(message: e.toString());\n        }\n      } else {\n        yield ShowErrorState();\n      }\n    } else if (event is ForgotPasswordTappedEvent) {\n      yield NextForgotPasswordPageState();\n    } else if (event is SignUpTappedEvent) {\n      yield NextSignUpPageState();\n    }\n  }\n\n  bool _checkIfSignInButtonEnabled() {\n    return emailController.text.isNotEmpty && passwordController.text.isNotEmpty;\n  }\n\n  bool _checkValidatorsOfTextField() {\n    return ValidationService.email(emailController.text) && ValidationService.password(passwordController.text);\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_in/bloc/sign_in_event.dart",
    "content": "part of 'sign_in_bloc.dart';\n\nabstract class SignInEvent {}\n\nclass OnTextChangeEvent extends SignInEvent {}\n\nclass SignInTappedEvent extends SignInEvent {}\n\nclass SignUpTappedEvent extends SignInEvent {}\n\nclass ForgotPasswordTappedEvent extends SignInEvent {}\n"
  },
  {
    "path": "lib/screens/sign_in/bloc/sign_in_state.dart",
    "content": "part of 'sign_in_bloc.dart';\n\nabstract class SignInState {\n  const SignInState();\n}\n\nclass SignInInitial extends SignInState {}\n\nclass SignInButtonEnableChangedState extends SignInState {\n  final bool isEnabled;\n\n  SignInButtonEnableChangedState({\n    required this.isEnabled,\n  });\n}\n\nclass ShowErrorState extends SignInState {}\n\nclass NextForgotPasswordPageState extends SignInState {}\n\nclass NextSignUpPageState extends SignInState {}\n\nclass NextTabBarPageState extends SignInState {}\n\nclass ErrorState extends SignInState {\n  final String message;\n\n  ErrorState({\n    required this.message,\n  });\n}\n\nclass LoadingState extends SignInState {}\n"
  },
  {
    "path": "lib/screens/sign_in/page/sign_in_page.dart",
    "content": "import 'package:fitness_flutter/screens/forgot_password/page/forgot_password_page.dart';\nimport 'package:fitness_flutter/screens/sign_in/bloc/sign_in_bloc.dart';\nimport 'package:fitness_flutter/screens/sign_in/widget/sign_in_content.dart';\nimport 'package:fitness_flutter/screens/sign_up/page/sign_up_page.dart';\nimport 'package:fitness_flutter/screens/tab_bar/page/tab_bar_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass SignInPage extends StatelessWidget {\n  const SignInPage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: _buildContext(context),\n    );\n  }\n\n  BlocProvider<SignInBloc> _buildContext(BuildContext context) {\n    return BlocProvider<SignInBloc>(\n      create: (BuildContext context) => SignInBloc(),\n      child: BlocConsumer<SignInBloc, SignInState>(\n        buildWhen: (_, currState) => currState is SignInInitial,\n        builder: (context, state) {\n          return SignInContent();\n        },\n        listenWhen: (_, currState) =>\n            currState is NextForgotPasswordPageState || currState is NextSignUpPageState || currState is NextTabBarPageState || currState is ErrorState,\n        listener: (context, state) {\n          if (state is NextForgotPasswordPageState) {\n            Navigator.of(context).push(MaterialPageRoute(builder: (_) => ForgotPasswordPage()));\n          } else if (state is NextSignUpPageState) {\n            Navigator.pushReplacement(context, MaterialPageRoute(builder: (_) => SignUpPage()));\n          } else if (state is NextTabBarPageState) {\n            Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_) => TabBarPage()));\n          } else if (state is ErrorState) {\n            ScaffoldMessenger.of(context).showSnackBar(\n              SnackBar(content: Text(state.message)),\n            );\n          }\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_in/widget/sign_in_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_loading.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_text_field.dart';\nimport 'package:fitness_flutter/screens/sign_in/bloc/sign_in_bloc.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/gestures.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass SignInContent extends StatelessWidget {\n  const SignInContent({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: double.infinity,\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: Stack(\n        children: [\n          _createMainData(context),\n          BlocBuilder<SignInBloc, SignInState>(\n            buildWhen: (_, currState) => currState is LoadingState || currState is ErrorState || currState is NextTabBarPageState,\n            builder: (context, state) {\n              if (state is LoadingState) {\n                return _createLoading();\n              } else if (state is ErrorState || state is NextTabBarPageState) {\n                return SizedBox();\n              }\n              return SizedBox();\n            },\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createMainData(BuildContext context) {\n    double height = MediaQuery.of(context).size.height;\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: SizedBox(\n          height: height - 30 - MediaQuery.of(context).padding.bottom,\n          child: Column(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              const SizedBox(height: 20),\n              _createHeader(),\n              const SizedBox(height: 50),\n              _createForm(context),\n              const SizedBox(height: 20),\n              _createForgotPasswordButton(context),\n              const SizedBox(height: 40),\n              _createSignInButton(context),\n              Spacer(),\n              _createDoNotHaveAccountText(context),\n              const SizedBox(height: 30),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n\n  Widget _createLoading() {\n    return FitnessLoading();\n  }\n\n  Widget _createHeader() {\n    return Center(\n      child: Text(\n        TextConstants.signIn,\n        style: TextStyle(\n          color: ColorConstants.textBlack,\n          fontSize: 24,\n          fontWeight: FontWeight.bold,\n        ),\n      ),\n    );\n  }\n\n  Widget _createForm(BuildContext context) {\n    final bloc = BlocProvider.of<SignInBloc>(context);\n    return BlocBuilder<SignInBloc, SignInState>(\n      buildWhen: (_, currState) => currState is ShowErrorState,\n      builder: (context, state) {\n        return Column(\n          crossAxisAlignment: CrossAxisAlignment.start,\n          children: [\n            FitnessTextField(\n              title: TextConstants.email,\n              textInputAction: TextInputAction.next,\n              keyboardType: TextInputType.emailAddress,\n              placeholder: TextConstants.emailPlaceholder,\n              controller: bloc.emailController,\n              errorText: TextConstants.emailErrorText,\n              isError: state is ShowErrorState ? !ValidationService.email(bloc.emailController.text) : false,\n              onTextChanged: () {\n                bloc.add(OnTextChangeEvent());\n              },\n            ),\n            const SizedBox(height: 20),\n            FitnessTextField(\n              title: TextConstants.password,\n              placeholder: TextConstants.passwordPlaceholderSignIn,\n              controller: bloc.passwordController,\n              errorText: TextConstants.passwordErrorText,\n              isError: state is ShowErrorState ? !ValidationService.password(bloc.passwordController.text) : false,\n              obscureText: true,\n              onTextChanged: () {\n                bloc.add(OnTextChangeEvent());\n              },\n            ),\n          ],\n        );\n      },\n    );\n  }\n\n  Widget _createForgotPasswordButton(BuildContext context) {\n    final bloc = BlocProvider.of<SignInBloc>(context);\n    return GestureDetector(\n      child: Padding(\n        padding: const EdgeInsets.only(left: 21),\n        child: Text(\n          TextConstants.forgotPassword,\n          style: TextStyle(\n            fontSize: 16,\n            fontWeight: FontWeight.bold,\n            color: ColorConstants.primaryColor,\n          ),\n        ),\n      ),\n      onTap: () {\n        FocusScope.of(context).unfocus();\n        bloc.add(ForgotPasswordTappedEvent());\n      },\n    );\n  }\n\n  Widget _createSignInButton(BuildContext context) {\n    final bloc = BlocProvider.of<SignInBloc>(context);\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: BlocBuilder<SignInBloc, SignInState>(\n        buildWhen: (_, currState) => currState is SignInButtonEnableChangedState,\n        builder: (context, state) {\n          return FitnessButton(\n            title: TextConstants.signIn,\n            isEnabled: state is SignInButtonEnableChangedState ? state.isEnabled : false,\n            onTap: () {\n              FocusScope.of(context).unfocus();\n              bloc.add(SignInTappedEvent());\n            },\n          );\n        },\n      ),\n    );\n  }\n\n  Widget _createDoNotHaveAccountText(BuildContext context) {\n    final bloc = BlocProvider.of<SignInBloc>(context);\n    return Center(\n      child: RichText(\n        text: TextSpan(\n          text: TextConstants.doNotHaveAnAccount,\n          style: TextStyle(\n            color: ColorConstants.textBlack,\n            fontSize: 18,\n          ),\n          children: [\n            TextSpan(\n              text: \" ${TextConstants.signUp}\",\n              style: TextStyle(\n                color: ColorConstants.primaryColor,\n                fontSize: 18,\n                fontWeight: FontWeight.bold,\n              ),\n              recognizer: TapGestureRecognizer()\n                ..onTap = () {\n                  bloc.add(SignUpTappedEvent());\n                },\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_up/bloc/signup_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/core/service/auth_service.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:flutter/material.dart';\nimport 'package:meta/meta.dart';\n\npart 'signup_event.dart';\npart 'signup_state.dart';\n\nclass SignUpBloc extends Bloc<SignupEvent, SignUpState> {\n  SignUpBloc() : super(SignupInitial());\n\n  final userNameController = TextEditingController();\n  final emailController = TextEditingController();\n  final passwordController = TextEditingController();\n  final confirmPasswordController = TextEditingController();\n\n  bool isButtonEnabled = false;\n\n  @override\n  Stream<SignUpState> mapEventToState(\n    SignupEvent event,\n  ) async* {\n    if (event is OnTextChangedEvent) {\n      if (isButtonEnabled != checkIfSignUpButtonEnabled()) {\n        isButtonEnabled = checkIfSignUpButtonEnabled();\n        yield SignUpButtonEnableChangedState(isEnabled: isButtonEnabled);\n      }\n    } else if (event is SignUpTappedEvent) {\n      if (checkValidatorsOfTextField()) {\n        try {\n          yield LoadingState();\n          await AuthService.signUp(emailController.text, passwordController.text, userNameController.text);\n          yield NextTabBarPageState();\n          print(\"Go to the next page\");\n        } catch (e) {\n          yield ErrorState(message: e.toString());\n        }\n      } else {\n        yield ShowErrorState();\n      }\n    } else if (event is SignInTappedEvent) {\n      yield NextSignInPageState();\n    }\n  }\n\n  bool checkIfSignUpButtonEnabled() {\n    return userNameController.text.isNotEmpty &&\n        emailController.text.isNotEmpty &&\n        passwordController.text.isNotEmpty &&\n        confirmPasswordController.text.isNotEmpty;\n  }\n\n  bool checkValidatorsOfTextField() {\n    return ValidationService.username(userNameController.text) &&\n        ValidationService.email(emailController.text) &&\n        ValidationService.password(passwordController.text) &&\n        ValidationService.confirmPassword(passwordController.text, confirmPasswordController.text);\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_up/bloc/signup_event.dart",
    "content": "part of 'signup_bloc.dart';\n\n@immutable\nabstract class SignupEvent {}\n\nclass OnTextChangedEvent extends SignupEvent {}\n\nclass SignUpTappedEvent extends SignupEvent {}\n\nclass SignInTappedEvent extends SignupEvent {}\n"
  },
  {
    "path": "lib/screens/sign_up/bloc/signup_state.dart",
    "content": "part of 'signup_bloc.dart';\n\n@immutable\nabstract class SignUpState {}\n\nclass SignupInitial extends SignUpState {}\n\nclass SignUpButtonEnableChangedState extends SignUpState {\n  final bool isEnabled;\n\n  SignUpButtonEnableChangedState({\n    required this.isEnabled,\n  });\n}\n\nclass ShowErrorState extends SignUpState {}\n\nclass ErrorState extends SignUpState {\n  final String message;\n\n  ErrorState({required this.message});\n}\n\nclass NextTabBarPageState extends SignUpState {}\n\nclass NextSignInPageState extends SignUpState {}\n\nclass LoadingState extends SignUpState {}\n"
  },
  {
    "path": "lib/screens/sign_up/page/sign_up_page.dart",
    "content": "import 'package:fitness_flutter/screens/sign_in/page/sign_in_page.dart';\nimport 'package:fitness_flutter/screens/sign_up/bloc/signup_bloc.dart';\nimport 'package:fitness_flutter/screens/sign_up/widget/sign_up_content.dart';\nimport 'package:fitness_flutter/screens/tab_bar/page/tab_bar_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass SignUpPage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(body: _buildBody(context));\n  }\n\n  BlocProvider<SignUpBloc> _buildBody(BuildContext context) {\n    return BlocProvider<SignUpBloc>(\n      create: (BuildContext context) => SignUpBloc(),\n      child: BlocConsumer<SignUpBloc, SignUpState>(\n        listenWhen: (_, currState) => currState is NextTabBarPageState || currState is NextSignInPageState || currState is ErrorState,\n        listener: (context, state) {\n          if (state is NextTabBarPageState) {\n            Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_) => TabBarPage()));\n          } else if (state is NextSignInPageState) {\n            Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_) => SignInPage()));\n          } else if (state is ErrorState) {\n            ScaffoldMessenger.of(context).showSnackBar(\n              SnackBar(content: Text(state.message)),\n            );\n          }\n        },\n        buildWhen: (_, currState) => currState is SignupInitial,\n        builder: (context, state) {\n          return SignUpContent();\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/sign_up/widget/sign_up_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/core/service/validation_service.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_loading.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_text_field.dart';\nimport 'package:fitness_flutter/screens/sign_up/bloc/signup_bloc.dart';\nimport 'package:flutter/gestures.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass SignUpContent extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return GestureDetector(\n      onTap: () {\n        FocusScope.of(context).unfocus();\n      },\n      child: Container(\n        width: double.infinity,\n        height: double.infinity,\n        color: ColorConstants.white,\n        child: Stack(\n          children: [\n            _createMainData(context),\n            BlocBuilder<SignUpBloc, SignUpState>(\n              buildWhen: (_, currState) => currState is LoadingState || currState is NextTabBarPageState || currState is ErrorState,\n              builder: (context, state) {\n                if (state is LoadingState) {\n                  return _createLoading();\n                } else if (state is NextTabBarPageState || state is ErrorState) {\n                  return SizedBox();\n                }\n                return SizedBox();\n              },\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n\n  Widget _createMainData(BuildContext context) {\n    return SafeArea(\n      child: SingleChildScrollView(\n        child: Column(\n          children: [\n            const SizedBox(height: 20),\n            _createTitle(),\n            // const SizedBox(height: 50),\n            _createForm(context),\n            const SizedBox(height: 40),\n            _createSignUpButton(context),\n            // Spacer(),\n            const SizedBox(height: 40),\n            _createHaveAccountText(context),\n            const SizedBox(height: 30),\n          ],\n        ),\n      ),\n    );\n  }\n\n  Widget _createLoading() {\n    return FitnessLoading();\n  }\n\n  Widget _createTitle() {\n    return Text(\n      TextConstants.signUp,\n      style: TextStyle(\n        color: ColorConstants.textBlack,\n        fontSize: 24,\n        fontWeight: FontWeight.bold,\n      ),\n    );\n  }\n\n  Widget _createForm(BuildContext context) {\n    final bloc = BlocProvider.of<SignUpBloc>(context);\n    return BlocBuilder<SignUpBloc, SignUpState>(\n      buildWhen: (_, currState) => currState is ShowErrorState,\n      builder: (context, state) {\n        return Column(\n          children: [\n            FitnessTextField(\n              title: TextConstants.username,\n              placeholder: TextConstants.userNamePlaceholder,\n              controller: bloc.userNameController,\n              textInputAction: TextInputAction.next,\n              errorText: TextConstants.usernameErrorText,\n              isError: state is ShowErrorState ? !ValidationService.username(bloc.userNameController.text) : false,\n              onTextChanged: () {\n                bloc.add(OnTextChangedEvent());\n              },\n            ),\n            const SizedBox(height: 20),\n            FitnessTextField(\n              title: TextConstants.email,\n              placeholder: TextConstants.emailPlaceholder,\n              textInputAction: TextInputAction.next,\n              keyboardType: TextInputType.emailAddress,\n              controller: bloc.emailController,\n              errorText: TextConstants.emailErrorText,\n              isError: state is ShowErrorState ? !ValidationService.email(bloc.emailController.text) : false,\n              onTextChanged: () {\n                bloc.add(OnTextChangedEvent());\n              },\n            ),\n            const SizedBox(height: 20),\n            FitnessTextField(\n              title: TextConstants.password,\n              placeholder: TextConstants.passwordPlaceholder,\n              obscureText: true,\n              isError: state is ShowErrorState ? !ValidationService.password(bloc.passwordController.text) : false,\n              textInputAction: TextInputAction.next,\n              controller: bloc.passwordController,\n              errorText: TextConstants.passwordErrorText,\n              onTextChanged: () {\n                bloc.add(OnTextChangedEvent());\n              },\n            ),\n            const SizedBox(height: 20),\n            FitnessTextField(\n              title: TextConstants.confirmPassword,\n              placeholder: TextConstants.confirmPasswordPlaceholder,\n              obscureText: true,\n              isError: state is ShowErrorState ? !ValidationService.confirmPassword(bloc.passwordController.text, bloc.confirmPasswordController.text) : false,\n              controller: bloc.confirmPasswordController,\n              errorText: TextConstants.confirmPasswordErrorText,\n              onTextChanged: () {\n                bloc.add(OnTextChangedEvent());\n              },\n            ),\n          ],\n        );\n      },\n    );\n  }\n\n  Widget _createSignUpButton(BuildContext context) {\n    final bloc = BlocProvider.of<SignUpBloc>(context);\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: BlocBuilder<SignUpBloc, SignUpState>(\n        buildWhen: (_, currState) => currState is SignUpButtonEnableChangedState,\n        builder: (context, state) {\n          return FitnessButton(\n            title: TextConstants.signUp,\n            isEnabled: state is SignUpButtonEnableChangedState ? state.isEnabled : false,\n            onTap: () {\n              FocusScope.of(context).unfocus();\n              bloc.add(SignUpTappedEvent());\n            },\n          );\n        },\n      ),\n    );\n  }\n\n  Widget _createHaveAccountText(BuildContext context) {\n    final bloc = BlocProvider.of<SignUpBloc>(context);\n    return RichText(\n      text: TextSpan(\n        text: TextConstants.alreadyHaveAccount,\n        style: TextStyle(\n          color: ColorConstants.textBlack,\n          fontSize: 18,\n        ),\n        children: [\n          TextSpan(\n            text: \" ${TextConstants.signIn}\",\n            style: TextStyle(\n              color: ColorConstants.primaryColor,\n              fontSize: 18,\n              fontWeight: FontWeight.bold,\n            ),\n            recognizer: TapGestureRecognizer()\n              ..onTap = () {\n                bloc.add(SignInTappedEvent());\n              },\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/start_workout/bloc/start_workout_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\n\npart 'start_workout_event.dart';\npart 'start_workout_state.dart';\n\nclass StartWorkoutBloc extends Bloc<StartWorkoutEvent, StartWorkoutState> {\n  StartWorkoutBloc() : super(StartWorkoutInitial());\n\n  int time = 0;\n\n  @override\n  Stream<StartWorkoutState> mapEventToState(\n    StartWorkoutEvent event,\n  ) async* {\n    if (event is BackTappedEvent) {\n      yield BackTappedState();\n    } else if (event is PlayTappedEvent) {\n      time = event.time;\n      yield PlayTimerState(time: event.time);\n    } else if (event is PauseTappedEvent) {\n      time = event.time;\n      yield PauseTimerState(currentTime: time);\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/start_workout/bloc/start_workout_event.dart",
    "content": "part of 'start_workout_bloc.dart';\n\n@immutable\nabstract class StartWorkoutEvent {}\n\nclass BackTappedEvent extends StartWorkoutEvent {}\n\nclass PlayTappedEvent extends StartWorkoutEvent {\n  final int time;\n\n  PlayTappedEvent({\n    required this.time,\n  });\n}\n\nclass PauseTappedEvent extends StartWorkoutEvent {\n  final int time;\n\n  PauseTappedEvent({\n    required this.time,\n  });\n}\n\nclass ChangeTimerEvent extends StartWorkoutEvent {}\n"
  },
  {
    "path": "lib/screens/start_workout/bloc/start_workout_state.dart",
    "content": "part of 'start_workout_bloc.dart';\n\n@immutable\nabstract class StartWorkoutState {}\n\nclass StartWorkoutInitial extends StartWorkoutState {}\n\nclass BackTappedState extends StartWorkoutState {}\n\nclass PlayTimerState extends StartWorkoutState {\n  final int time;\n\n  PlayTimerState({\n    required this.time,\n  });\n}\n\nclass PauseTimerState extends StartWorkoutState {\n  final int currentTime;\n\n  PauseTimerState({\n    required this.currentTime,\n  });\n}\n"
  },
  {
    "path": "lib/screens/start_workout/page/start_workout_page.dart",
    "content": "import 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/screens/start_workout/bloc/start_workout_bloc.dart';\nimport 'package:fitness_flutter/screens/start_workout/widget/start_workout_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass StartWorkoutPage extends StatelessWidget {\n  final ExerciseData exercise;\n  final ExerciseData currentExercise;\n  final ExerciseData? nextExercise;\n\n  StartWorkoutPage(\n      {required this.exercise,\n      required this.currentExercise,\n      required this.nextExercise});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: _buildContext(context),\n    );\n  }\n\n  BlocProvider<StartWorkoutBloc> _buildContext(BuildContext context) {\n    return BlocProvider<StartWorkoutBloc>(\n      create: (context) => StartWorkoutBloc(),\n      child: BlocConsumer<StartWorkoutBloc, StartWorkoutState>(\n        buildWhen: (_, currState) => currState is StartWorkoutInitial,\n        builder: (context, state) {\n          return StartWorkoutContent(\n            exercise: exercise,\n            nextExercise: nextExercise,\n          );\n        },\n        listenWhen: (_, currState) => currState is BackTappedState,\n        listener: (context, state) {\n          if (state is BackTappedState) {\n            Navigator.pop(context);\n          }\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/start_workout/widget/start_workout_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/start_workout/bloc/start_workout_bloc.dart';\nimport 'package:fitness_flutter/screens/start_workout/page/start_workout_page.dart';\nimport 'package:fitness_flutter/screens/start_workout/widget/start_workout_video.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/bloc/workoutdetails_bloc.dart' as workout_bloc;\nimport 'package:flutter/material.dart';\nimport 'package:flutter/rendering.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass StartWorkoutContent extends StatelessWidget {\n  final ExerciseData exercise;\n  final ExerciseData? nextExercise;\n\n  StartWorkoutContent({required this.exercise, required this.nextExercise});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: double.infinity,\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: SafeArea(\n        child: _createDetailedExercise(context),\n      ),\n    );\n  }\n\n  Widget _createDetailedExercise(BuildContext context) {\n    return Container(\n      padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          _createBackButton(context),\n          const SizedBox(height: 23),\n          _createVideo(context),\n          const SizedBox(height: 8),\n          Expanded(\n            child: ListView(children: [\n              _createTitle(),\n              const SizedBox(height: 9),\n              _createDescription(),\n              const SizedBox(height: 30),\n              _createSteps(),\n            ]),\n          ),\n          _createTimeTracker(context),\n        ],\n      ),\n    );\n  }\n\n  Widget _createBackButton(BuildContext context) {\n    final bloc = BlocProvider.of<StartWorkoutBloc>(context);\n    return Padding(\n      padding: const EdgeInsets.only(left: 10, top: 8),\n      child: GestureDetector(\n        child: BlocBuilder<StartWorkoutBloc, StartWorkoutState>(\n          builder: (context, state) {\n            return Row(\n              children: [\n                Image(image: AssetImage(PathConstants.back)),\n                const SizedBox(width: 17),\n                Text(\n                  TextConstants.back,\n                  style: TextStyle(fontSize: 18, fontWeight: FontWeight.w500),\n                ),\n              ],\n            );\n          },\n        ),\n        onTap: () {\n          bloc.add(BackTappedEvent());\n        },\n      ),\n    );\n  }\n\n  Widget _createVideo(BuildContext context) {\n    final bloc = BlocProvider.of<StartWorkoutBloc>(context);\n    return Container(\n      height: 264,\n      width: double.infinity,\n      decoration: BoxDecoration(borderRadius: BorderRadius.circular(20), color: ColorConstants.white),\n      child: StartWorkoutVideo(\n        exercise: exercise,\n        onPlayTapped: (time) {\n          bloc.add(PlayTappedEvent(time: time));\n        },\n        onPauseTapped: (time) {\n          bloc.add(PauseTappedEvent(time: time));\n        },\n      ),\n    );\n  }\n\n  Widget _createTitle() {\n    return Text(exercise.title, style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold));\n  }\n\n  Widget _createDescription() {\n    return Text(exercise.description, style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500));\n  }\n\n  Widget _createSteps() {\n    return Column(\n      children: [\n        for (int i = 0; i < exercise.steps.length; i++) ...[\n          Step(number: \"${i + 1}\", description: exercise.steps[i]),\n          const SizedBox(height: 20),\n        ],\n      ],\n    );\n  }\n\n  Widget _createTimeTracker(BuildContext context) {\n    // final bloc = BlocProvider.of<StartWorkoutBloc>(context);\n    return Container(\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: Column(\n        children: [\n          nextExercise != null\n              ? Row(\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  children: [\n                    Text(\n                      TextConstants.nextExercise,\n                      style: TextStyle(\n                        color: ColorConstants.grey,\n                        fontSize: 17,\n                        fontWeight: FontWeight.w600,\n                      ),\n                    ),\n                    const SizedBox(width: 5),\n                    Text(\n                      nextExercise?.title ?? \"\",\n                      style: TextStyle(\n                        color: ColorConstants.textBlack,\n                        fontSize: 17,\n                        fontWeight: FontWeight.w600,\n                      ),\n                    ),\n                    const SizedBox(width: 6.5),\n                    Icon(Icons.access_time, size: 20),\n                    const SizedBox(width: 6.5),\n                    Text('00:${nextExercise!.minutes > 10 ? nextExercise!.minutes : '0${nextExercise!.minutes}'}')\n                    // BlocBuilder<StartWorkoutBloc, StartWorkoutState>(\n                    //   buildWhen: (_, currState) => currState is PlayTimerState || currState is PauseTimerState,\n                    //   builder: (context, state) {\n                    //     return StartWorkoutTimer(\n                    //       time: bloc.time,\n                    //       isPaused: !(state is PlayTimerState),\n                    //     );\n                    //   },\n                    // ),\n                  ],\n                )\n              : SizedBox.shrink(),\n          const SizedBox(height: 18),\n          _createButton(context),\n        ],\n      ),\n    );\n  }\n\n  Widget _createButton(BuildContext context) {\n    return FitnessButton(\n      title: nextExercise != null ? TextConstants.next : 'Finish',\n      onTap: () {\n        if (nextExercise != null) {\n          List<ExerciseData> exercisesList = BlocProvider.of<workout_bloc.WorkoutDetailsBloc>(context).workout.exerciseDataList;\n          int currentExerciseIndex = exercisesList.indexOf(exercise);\n          if (currentExerciseIndex < exercisesList.length - 1) {\n            Navigator.of(context).pushReplacement(\n              MaterialPageRoute(\n                  builder: (_) => BlocProvider.value(\n                        value: BlocProvider.of<workout_bloc.WorkoutDetailsBloc>(context),\n                        child: StartWorkoutPage(\n                          exercise: exercisesList[currentExerciseIndex + 1],\n                          currentExercise: exercisesList[currentExerciseIndex + 1],\n                          nextExercise: currentExerciseIndex + 2 < exercisesList.length ? exercisesList[currentExerciseIndex + 2] : null,\n                        ),\n                      )),\n            );\n          }\n        } else {\n          Navigator.of(context).pop();\n        }\n      },\n    );\n  }\n}\n\nclass Step extends StatelessWidget {\n  final String number;\n  final String description;\n\n  Step({required this.number, required this.description});\n  @override\n  Widget build(BuildContext context) {\n    return Row(\n      children: [\n        Container(\n          height: 25,\n          width: 25,\n          decoration: BoxDecoration(\n            borderRadius: BorderRadius.circular(20),\n            color: ColorConstants.primaryColor.withOpacity(0.12),\n          ),\n          child: Center(child: Text(number, style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold, color: ColorConstants.primaryColor))),\n        ),\n        const SizedBox(width: 10),\n        Expanded(child: Text(description)),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/start_workout/widget/start_workout_timer.dart",
    "content": "import 'package:custom_timer/custom_timer.dart';\nimport 'package:fitness_flutter/core/service/date_service.dart';\nimport 'package:flutter/material.dart';\n\nclass StartWorkoutTimer extends StatefulWidget {\n  final int time;\n  final bool isPaused;\n\n  StartWorkoutTimer({\n    required this.time,\n    required this.isPaused,\n  });\n\n  @override\n  _StartWorkoutTimerState createState() => _StartWorkoutTimerState();\n}\n\nclass _StartWorkoutTimerState extends State<StartWorkoutTimer> {\n  @override\n  Widget build(BuildContext context) {\n    return widget.isPaused ? _createPauseText() : _createCountdownTimer();\n  }\n\n  Widget _createCountdownTimer() {\n    return CustomTimer(\n      from: Duration(seconds: widget.time),\n      to: Duration(seconds: 0),\n      onBuildAction: CustomTimerAction.auto_start,\n      builder: (CustomTimerRemainingTime remaining) {\n        return Text(\n          \"${remaining.minutes}:${remaining.seconds}\",\n          style: TextStyle(fontSize: 17, fontWeight: FontWeight.w600),\n        );\n      },\n    );\n  }\n\n  Widget _createPauseText() {\n    final minutesSeconds = DateService.convertIntoSeconds(widget.time);\n    return Text(\n      \"${minutesSeconds.minutes.toString().padLeft(2, '0')}:${minutesSeconds.seconds.toString().padLeft(2, '0')}\",\n      style: TextStyle(\n        fontSize: 17,\n        fontWeight: FontWeight.w600,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/start_workout/widget/start_workout_video.dart",
    "content": "import 'dart:async';\n\nimport 'package:chewie/chewie.dart';\nimport 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/services.dart';\nimport 'package:video_player/video_player.dart';\nimport 'package:flutter/material.dart';\n\nclass StartWorkoutVideo extends StatefulWidget {\n  final ExerciseData exercise;\n  final Function(int) onPlayTapped;\n  final Function(int) onPauseTapped;\n\n  StartWorkoutVideo({\n    required this.exercise,\n    required this.onPlayTapped,\n    required this.onPauseTapped,\n  });\n  @override\n  _StartWorkoutVideoState createState() => _StartWorkoutVideoState();\n}\n\nclass _StartWorkoutVideoState extends State<StartWorkoutVideo> {\n  late VideoPlayerController _controller;\n  // late Future<void> _initializeVideoPlayerFuture;\n  late bool isPlayButtonHidden = false;\n  late ChewieController _chewieController;\n  Timer? timer;\n  Timer? videoTimer;\n  // bool _isVideoPlaying = false;\n\n  @override\n  void initState() {\n    _controller = VideoPlayerController.asset(widget.exercise.video);\n\n    _controller.initialize();\n\n    _chewieController = ChewieController(\n        videoPlayerController: _controller,\n        looping: true,\n        autoPlay: false,\n        deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],\n        aspectRatio: 15 / 10,\n        placeholder: Center(child: CupertinoActivityIndicator()),\n        materialProgressColors: ChewieProgressColors(playedColor: ColorConstants.primaryColor));\n    super.initState();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    _chewieController.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return AspectRatio(aspectRatio: _controller.value.aspectRatio, child: _createVideoContainer());\n  }\n\n  Widget _createVideoContainer() {\n    return ClipRRect(\n      borderRadius: BorderRadius.circular(20),\n      child: Theme(data: Theme.of(context).copyWith(platform: TargetPlatform.android), child: Chewie(controller: _chewieController)),\n    );\n  }\n\n  // Widget _createPlayButton() {\n  //   return Center(\n  //     child: GestureDetector(\n  //       onTap: () {\n  //         // timer?.cancel();\n  //         _chewieController.isPlaying ? _chewieController.pause() : _chewieController.play();\n  //         setState(() {\n  //           _isVideoPlaying = _chewieController.isPlaying;\n  //         });\n  //         // setState(() {\n  //         //   if (_controller.value.isPlaying) {\n  //         //     _controller.pause();\n  //         //     widget.onPauseTapped(_getCurrentTime());\n  //         //   } else {\n  //         //     _controller.play();\n  //         //     _playTimer();\n  //         //     widget.onPlayTapped(_getCurrentTime());\n  //         //   }\n  //         // });\n  //       },\n  //       child: Container(\n  //         height: 50,\n  //         width: 50,\n  //         decoration: BoxDecoration(\n  //           borderRadius: BorderRadius.circular(30),\n  //           color: ColorConstants.white.withOpacity(0.8),\n  //         ),\n  //         child: Icon(\n  //           _isVideoPlaying ? Icons.pause : Icons.play_arrow,\n  //           color: ColorConstants.primaryColor,\n  //         ),\n  //       ),\n  //     ),\n  //   );\n  // }\n\n  // void _playTimer() {\n  //   timer = Timer(Duration(seconds: 3), () {\n  //     setState(() {\n  //       isPlayButtonHidden = true;\n  //     });\n  //   });\n  // }\n\n  // int _getCurrentTime() {\n  //   int duration = _controller.value.duration.inSeconds;\n  //   int position = _controller.value.position.inSeconds;\n\n  //   return duration - position;\n  // }\n}\n"
  },
  {
    "path": "lib/screens/tab_bar/bloc/tab_bar_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\n\npart 'tab_bar_event.dart';\npart 'tab_bar_state.dart';\n\nclass TabBarBloc extends Bloc<TabBarEvent, TabBarState> {\n  TabBarBloc() : super(TabBarInitial());\n\n  int currentIndex = 0;\n  bool isSelected = false;\n\n  @override\n  Stream<TabBarState> mapEventToState(\n    TabBarEvent event,\n  ) async* {\n    if (event is TabBarItemTappedEvent) {\n      currentIndex = event.index;\n      yield TabBarItemSelectedState(index: currentIndex);\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/tab_bar/bloc/tab_bar_event.dart",
    "content": "part of 'tab_bar_bloc.dart';\n\n@immutable\nabstract class TabBarEvent {}\n\nclass TabBarItemTappedEvent extends TabBarEvent {\n  final int index;\n\n  TabBarItemTappedEvent({\n    required this.index,\n  });\n}\n"
  },
  {
    "path": "lib/screens/tab_bar/bloc/tab_bar_state.dart",
    "content": "part of 'tab_bar_bloc.dart';\n\n@immutable\nabstract class TabBarState {}\n\nclass TabBarInitial extends TabBarState {}\n\nclass TabBarItemSelectedState extends TabBarState {\n  final int index;\n\n  TabBarItemSelectedState({\n    required this.index,\n  });\n}\n"
  },
  {
    "path": "lib/screens/tab_bar/page/tab_bar_page.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/screens/home/page/home_page.dart';\nimport 'package:fitness_flutter/screens/settings/settings_screen.dart';\nimport 'package:fitness_flutter/screens/tab_bar/bloc/tab_bar_bloc.dart';\nimport 'package:fitness_flutter/screens/workouts/page/workouts_page.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass TabBarPage extends StatelessWidget {\n  const TabBarPage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider<TabBarBloc>(\n      create: (BuildContext context) => TabBarBloc(),\n      child: BlocConsumer<TabBarBloc, TabBarState>(\n        listener: (context, state) {},\n        buildWhen: (_, currState) =>\n            currState is TabBarInitial || currState is TabBarItemSelectedState,\n        builder: (context, state) {\n          final bloc = BlocProvider.of<TabBarBloc>(context);\n          return Scaffold(\n            body: _createBody(context, bloc.currentIndex),\n            bottomNavigationBar: _createdBottomTabBar(context),\n          );\n        },\n      ),\n    );\n  }\n\n  Widget _createdBottomTabBar(BuildContext context) {\n    final bloc = BlocProvider.of<TabBarBloc>(context);\n    return BottomNavigationBar(\n      currentIndex: bloc.currentIndex,\n      fixedColor: ColorConstants.primaryColor,\n      items: [\n        BottomNavigationBarItem(\n          icon: Image(\n            image: AssetImage(PathConstants.home),\n            color: bloc.currentIndex == 0 ? ColorConstants.primaryColor : null,\n          ),\n          label: TextConstants.homeIcon,\n        ),\n        BottomNavigationBarItem(\n          icon: Image(\n            image: AssetImage(PathConstants.workouts),\n            color: bloc.currentIndex == 1 ? ColorConstants.primaryColor : null,\n          ),\n          label: TextConstants.workoutsIcon,\n        ),\n        BottomNavigationBarItem(\n          icon: Image(\n            image: AssetImage(PathConstants.settings),\n            color: bloc.currentIndex == 2 ? ColorConstants.primaryColor : null,\n          ),\n          label: TextConstants.settingsIcon,\n        ),\n      ],\n      onTap: (index) {\n        bloc.add(TabBarItemTappedEvent(index: index));\n      },\n    );\n  }\n\n  Widget _createBody(BuildContext context, int index) {\n    final children = [\n      HomePage(),\n      WorkoutsPage(),\n      SettingsScreen()\n      // Scaffold(\n      //   body: Center(\n      //     child: RawMaterialButton(\n      //       fillColor: Colors.red,\n      //       child: Text(\n      //         TextConstants.signOut,\n      //         style: TextStyle(\n      //           color: ColorConstants.white,\n      //         ),\n      //       ),\n      //       onPressed: () {\n      //         AuthService.signOut();\n      //         Navigator.pushReplacement(\n      //           context,\n      //           MaterialPageRoute(builder: (_) => SignInPage()),\n      //         );\n      //       },\n      //     ),\n      //   ),\n      // ),\n    ];\n    return children[index];\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/bloc/workoutdetails_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:meta/meta.dart';\n\npart 'workoutdetails_event.dart';\npart 'workoutdetails_state.dart';\n\nclass WorkoutDetailsBloc extends Bloc<WorkoutDetailsEvent, WorkoutDetailsState> {\n  final WorkoutData workout;\n  WorkoutDetailsBloc({required this.workout}) : super(WorkoutDetailsInitial());\n\n  @override\n  Stream<WorkoutDetailsState> mapEventToState(\n    WorkoutDetailsEvent event,\n  ) async* {\n    if (event is BackTappedEvent) {\n      yield BackTappedState();\n    } else if (event is WorkoutExerciseCellTappedEvent) {\n      yield WorkoutExerciseCellTappedState(\n        currentExercise: event.currentExercise,\n        nextExercise: event.nextExercise,\n      );\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/bloc/workoutdetails_event.dart",
    "content": "part of 'workoutdetails_bloc.dart';\n\n@immutable\nabstract class WorkoutDetailsEvent {}\n\nclass BackTappedEvent extends WorkoutDetailsEvent {}\n\nclass WorkoutExerciseCellTappedEvent extends WorkoutDetailsEvent {\n  final ExerciseData currentExercise;\n  final ExerciseData? nextExercise;\n\n  WorkoutExerciseCellTappedEvent({\n    required this.currentExercise,\n    required this.nextExercise,\n  });\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/bloc/workoutdetails_state.dart",
    "content": "part of 'workoutdetails_bloc.dart';\n\n@immutable\nabstract class WorkoutDetailsState {}\n\nclass WorkoutDetailsInitial extends WorkoutDetailsState {}\n\nclass BackTappedState extends WorkoutDetailsState {}\n\nclass WorkoutExerciseCellTappedState extends WorkoutDetailsState {\n  final ExerciseData currentExercise;\n  final ExerciseData? nextExercise;\n\n  WorkoutExerciseCellTappedState({\n    required this.currentExercise,\n    required this.nextExercise,\n  });\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/page/workout_details_page.dart",
    "content": "import 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/common_widgets/fitness_button.dart';\nimport 'package:fitness_flutter/screens/start_workout/page/start_workout_page.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/bloc/workoutdetails_bloc.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/widget/workout_details_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:fitness_flutter/core/extensions/list_extension.dart';\n\nclass WorkoutDetailsPage extends StatelessWidget {\n  final WorkoutData workout;\n  WorkoutDetailsPage({required this.workout});\n\n  @override\n  Widget build(BuildContext context) {\n    return _buildContext(context);\n  }\n\n  BlocProvider<WorkoutDetailsBloc> _buildContext(BuildContext context) {\n    return BlocProvider<WorkoutDetailsBloc>(\n      create: (context) => WorkoutDetailsBloc(workout: workout),\n      child: BlocConsumer<WorkoutDetailsBloc, WorkoutDetailsState>(\n        buildWhen: (_, currState) => currState is WorkoutDetailsInitial,\n        builder: (context, state) {\n          return Scaffold(\n              floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,\n              floatingActionButton: Padding(\n                padding: EdgeInsets.symmetric(horizontal: 20),\n                child: FitnessButton(\n                  title: TextConstants.start,\n                  onTap: () {\n                    ExerciseData? exercise = workout.exerciseDataList.firstWhereOrNull((element) => element.progress < 1);\n                    if (exercise == null) exercise = workout.exerciseDataList.first;\n                    int exerciseIndex = workout.exerciseDataList.indexOf(exercise);\n                    Navigator.of(context).push(\n                      MaterialPageRoute(\n                          builder: (_) => BlocProvider.value(\n                                value: BlocProvider.of<WorkoutDetailsBloc>(context),\n                                child: StartWorkoutPage(\n                                  exercise: exercise!,\n                                  currentExercise: exercise,\n                                  nextExercise: exerciseIndex + 1 < workout.exerciseDataList.length ? workout.exerciseDataList[exerciseIndex + 1] : null,\n                                ),\n                              )),\n                    );\n                  },\n                ),\n              ),\n              body: WorkoutDetailsContent(workout: workout));\n        },\n        listenWhen: (_, currState) => currState is BackTappedState || currState is WorkoutExerciseCellTappedState,\n        listener: (context, state) {\n          if (state is BackTappedState) {\n            Navigator.pop(context);\n          } else if (state is WorkoutExerciseCellTappedState) {\n            Navigator.of(context).push(\n              MaterialPageRoute(\n                  builder: (_) => BlocProvider.value(\n                        value: BlocProvider.of<WorkoutDetailsBloc>(context),\n                        child: StartWorkoutPage(\n                          exercise: state.currentExercise,\n                          currentExercise: state.currentExercise,\n                          nextExercise: state.nextExercise,\n                        ),\n                      )),\n            );\n          }\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/widget/panel/exercises_list.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/data/exercise_data.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/bloc/workoutdetails_bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:percent_indicator/linear_percent_indicator.dart';\n\nclass ExercisesList extends StatelessWidget {\n  final WorkoutData workout;\n  final List<ExerciseData> exercises;\n\n  const ExercisesList({required this.exercises, required this.workout});\n\n  @override\n  Widget build(BuildContext context) {\n    return ListView.separated(\n      padding: EdgeInsets.only(top: 10),\n      itemCount: exercises.length,\n      itemBuilder: (context, index) {\n        return ExerciseCell(\n          currentExercise: exercises[index],\n          nextExercise: index == exercises.length - 1 ? null : exercises[index + 1],\n          workout: workout,\n        );\n      },\n      separatorBuilder: (context, index) {\n        return const SizedBox(height: 15);\n      },\n    );\n  }\n}\n\nclass ExerciseCell extends StatelessWidget {\n  final WorkoutData workout;\n  final ExerciseData currentExercise;\n  final ExerciseData? nextExercise;\n\n  const ExerciseCell({\n    required this.currentExercise,\n    required this.workout,\n    required this.nextExercise,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    final bloc = BlocProvider.of<WorkoutDetailsBloc>(context);\n    return BlocBuilder<WorkoutDetailsBloc, WorkoutDetailsState>(\n      buildWhen: (_, currState) => currState is WorkoutExerciseCellTappedState,\n      builder: (context, state) {\n        return InkWell(\n          borderRadius: BorderRadius.circular(40),\n          onTap: () {\n            bloc.add(\n              WorkoutExerciseCellTappedEvent(\n                currentExercise: currentExercise,\n                nextExercise: nextExercise,\n              ),\n            );\n          },\n          child: Container(\n            width: double.infinity,\n            padding: const EdgeInsets.only(left: 10, right: 25, top: 10, bottom: 10),\n            decoration: BoxDecoration(\n              color: ColorConstants.white,\n              borderRadius: BorderRadius.circular(10),\n              boxShadow: [\n                BoxShadow(\n                  color: ColorConstants.textBlack.withOpacity(0.12),\n                  blurRadius: 5.0,\n                  spreadRadius: 1.1,\n                ),\n              ],\n            ),\n            child: Row(\n              children: [\n                _createImage(),\n                const SizedBox(width: 10),\n                Expanded(\n                  child: _createExerciseTextInfo(),\n                ),\n                const SizedBox(width: 10),\n                _createRightArrow(),\n              ],\n            ),\n          ),\n        );\n      },\n    );\n  }\n\n  Widget _createImage() {\n    return Container(\n      width: 75,\n      height: 70,\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(5),\n        image: DecorationImage(\n          image: AssetImage(workout.image),\n          fit: BoxFit.contain,\n        ),\n      ),\n    );\n  }\n\n  Widget _createExerciseTextInfo() {\n    final minutesStr = \"${currentExercise.minutes} minutes\";\n    return Column(\n      crossAxisAlignment: CrossAxisAlignment.start,\n      children: [\n        Text(\n          currentExercise.title,\n          style: TextStyle(\n            color: ColorConstants.textColor,\n            fontSize: 16,\n            fontWeight: FontWeight.w700,\n          ),\n        ),\n        Text(\n          minutesStr,\n          style: TextStyle(\n            color: ColorConstants.textBlack,\n            fontSize: 14,\n            fontWeight: FontWeight.w400,\n          ),\n        ),\n        const SizedBox(height: 11),\n        Padding(\n          padding: const EdgeInsets.only(right: 20),\n          child: LinearPercentIndicator(\n            percent: currentExercise.progress,\n            progressColor: ColorConstants.primaryColor,\n            backgroundColor: ColorConstants.primaryColor.withOpacity(0.12),\n            lineHeight: 6,\n            padding: EdgeInsets.zero,\n          ),\n        ),\n      ],\n    );\n  }\n\n  Widget _createRightArrow() {\n    return RotatedBox(\n      quarterTurns: 2,\n      child: Image(\n        image: AssetImage(PathConstants.back),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/widget/panel/workout_details_panel.dart",
    "content": "import 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/widget/panel/exercises_list.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/widget/panel/workout_tag.dart';\nimport 'package:flutter/material.dart';\n\nclass WorkoutDetailsPanel extends StatelessWidget {\n  final WorkoutData workout;\n\n  WorkoutDetailsPanel({required this.workout});\n\n  @override\n  Widget build(BuildContext context) {\n    return _createPanelData();\n  }\n\n  Widget _createPanelData() {\n    return Column(\n      children: [\n        const SizedBox(height: 15),\n        _createRectangle(),\n        const SizedBox(height: 15),\n        Expanded(\n          child: Column(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: [\n              _createHeader(),\n              const SizedBox(height: 20),\n              _createWorkoutData(),\n              SizedBox(height: 20),\n              _createExerciesList(),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n\n  Widget _createRectangle() {\n    return Image(image: AssetImage(PathConstants.rectangle));\n  }\n\n  Widget _createHeader() {\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 20),\n      child: Text(\n        workout.title + \"  \" + TextConstants.workout,\n        style: TextStyle(\n          fontSize: 24,\n          fontWeight: FontWeight.bold,\n        ),\n      ),\n    );\n  }\n\n  Widget _createWorkoutData() {\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 10),\n      child: Row(\n        children: [\n          WorkoutTag(\n            icon: PathConstants.timeTracker,\n            content: \"${workout.minutes}:00\",\n          ),\n          const SizedBox(width: 15),\n          WorkoutTag(\n            icon: PathConstants.exerciseTracker,\n            content: \"${workout.exercices} ${TextConstants.exercisesLowercase}\",\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createExerciesList() {\n    return Expanded(\n      child: Padding(\n        padding: const EdgeInsets.symmetric(horizontal: 20),\n        child: ExercisesList(exercises: workout.exerciseDataList, workout: workout),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/widget/panel/workout_tag.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:flutter/material.dart';\n\nclass WorkoutTag extends StatelessWidget {\n  final String icon;\n  final String content;\n\n  WorkoutTag({required this.icon, required this.content});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      padding: EdgeInsets.symmetric(horizontal: 17, vertical: 10),\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(20),\n        color: ColorConstants.primaryColor.withOpacity(0.12),\n      ),\n      child: Row(\n        children: [\n          Image.asset(icon, height: 17, width: 17, fit: BoxFit.fill),\n          const SizedBox(width: 7),\n          Text(content, style: TextStyle(color: ColorConstants.primaryColor, fontSize: 14, fontWeight: FontWeight.w500)),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/widget/workout_details_body.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/path_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/bloc/workoutdetails_bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass WorkoutDetailsBody extends StatelessWidget {\n  final WorkoutData workout;\n  WorkoutDetailsBody({required this.workout});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: double.infinity,\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: Stack(\n        children: [\n          _createImage(),\n          _createBackButton(context),\n        ],\n      ),\n    );\n  }\n\n  Widget _createBackButton(BuildContext context) {\n    final bloc = BlocProvider.of<WorkoutDetailsBloc>(context);\n    return Positioned(\n      child: SafeArea(\n        child: BlocBuilder<WorkoutDetailsBloc, WorkoutDetailsState>(\n          builder: (context, state) {\n            return GestureDetector(\n              child: Container(\n                width: 30,\n                height: 30,\n                child: Image(\n                  image: AssetImage(PathConstants.back),\n                ),\n              ),\n              onTap: () {\n                bloc.add(BackTappedEvent());\n              },\n            );\n          },\n        ),\n      ),\n      left: 20,\n      top: 14,\n    );\n  }\n\n  Widget _createImage() {\n    return Container(\n      width: double.infinity,\n      child: Image(\n        image: AssetImage(workout.image),\n        fit: BoxFit.cover,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workout_details_screen/widget/workout_details_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/widget/panel/workout_details_panel.dart';\nimport 'package:fitness_flutter/screens/workout_details_screen/widget/workout_details_body.dart';\nimport 'package:flutter/material.dart';\nimport 'package:sliding_up_panel/sliding_up_panel.dart';\n\nclass WorkoutDetailsContent extends StatelessWidget {\n  final WorkoutData workout;\n\n  const WorkoutDetailsContent({required this.workout});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: double.infinity,\n      width: double.infinity,\n      color: ColorConstants.white,\n      child: _createSlidingUpPanel(context),\n    );\n  }\n\n  Widget _createSlidingUpPanel(BuildContext context) {\n    return SlidingUpPanel(\n      panel: WorkoutDetailsPanel(workout: workout),\n      body: WorkoutDetailsBody(workout: workout),\n      minHeight: MediaQuery.of(context).size.height * 0.65,\n      maxHeight: MediaQuery.of(context).size.height * 0.87,\n      isDraggable: true,\n      borderRadius: BorderRadius.only(\n        topLeft: Radius.circular(50),\n        topRight: Radius.circular(50),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workouts/bloc/workouts_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:meta/meta.dart';\n\npart 'workouts_event.dart';\npart 'workouts_state.dart';\n\nclass WorkoutsBloc extends Bloc<WorkoutsEvent, WorkoutsState> {\n  WorkoutsBloc() : super(WorkoutsInitial());\n\n  @override\n  Stream<WorkoutsState> mapEventToState(\n    WorkoutsEvent event,\n  ) async* {\n    if (event is CardTappedEvent) {\n      yield CardTappedState(workout: event.workout);\n    }\n  }\n}\n"
  },
  {
    "path": "lib/screens/workouts/bloc/workouts_event.dart",
    "content": "part of 'workouts_bloc.dart';\n\n@immutable\nabstract class WorkoutsEvent {}\n\nclass CardTappedEvent extends WorkoutsEvent {\n  final WorkoutData workout;\n\n  CardTappedEvent({required this.workout});\n}\n"
  },
  {
    "path": "lib/screens/workouts/bloc/workouts_state.dart",
    "content": "part of 'workouts_bloc.dart';\n\n@immutable\nabstract class WorkoutsState {}\n\nclass WorkoutsInitial extends WorkoutsState {}\n\nclass CardTappedState extends WorkoutsState {\n  final WorkoutData workout;\n\n  CardTappedState({required this.workout});\n}\n"
  },
  {
    "path": "lib/screens/workouts/page/workouts_page.dart",
    "content": "import 'package:fitness_flutter/screens/workout_details_screen/page/workout_details_page.dart';\nimport 'package:fitness_flutter/screens/workouts/bloc/workouts_bloc.dart';\nimport 'package:fitness_flutter/screens/workouts/widget/workout_content.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nclass WorkoutsPage extends StatelessWidget {\n  const WorkoutsPage({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(body: _buildContext(context));\n  }\n\n  BlocProvider<WorkoutsBloc> _buildContext(BuildContext context) {\n    return BlocProvider<WorkoutsBloc>(\n      create: (context) => WorkoutsBloc(),\n      child: BlocConsumer<WorkoutsBloc, WorkoutsState>(\n        buildWhen: (_, currState) => currState is WorkoutsInitial,\n        builder: (context, state) {\n          return WorkoutContent();\n        },\n        listenWhen: (_, currState) => currState is CardTappedState,\n        listener: (context, state) {\n          if (state is CardTappedState) {\n            Navigator.of(context, rootNavigator: true).push(\n              MaterialPageRoute(\n                builder: (_) => WorkoutDetailsPage(workout: state.workout),\n              ),\n            );\n          }\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workouts/widget/workout_card.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/text_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workouts/bloc/workouts_bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:percent_indicator/percent_indicator.dart';\n\nclass WorkoutCard extends StatelessWidget {\n  final WorkoutData workout;\n  WorkoutCard({Key? key, required this.workout}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final bloc = BlocProvider.of<WorkoutsBloc>(context);\n    return Container(\n      width: double.infinity,\n      height: 140,\n      margin: const EdgeInsets.symmetric(horizontal: 20),\n      decoration: BoxDecoration(\n        borderRadius: BorderRadius.circular(10),\n        color: ColorConstants.white,\n        boxShadow: [BoxShadow(color: ColorConstants.textBlack.withOpacity(0.12), blurRadius: 5.0, spreadRadius: 1.1)],\n      ),\n      child: Material(\n        color: Colors.transparent,\n        child: BlocBuilder<WorkoutsBloc, WorkoutsState>(\n          buildWhen: (_, currState) => currState is CardTappedState,\n          builder: (context, state) {\n            return InkWell(\n              borderRadius: BorderRadius.circular(10),\n              onTap: () {\n                bloc.add(CardTappedEvent(workout: workout));\n              },\n              child: Container(\n                padding: EdgeInsets.symmetric(horizontal: 20, vertical: 15),\n                decoration: BoxDecoration(\n                  borderRadius: BorderRadius.circular(10),\n                ),\n                child: Row(\n                  children: [\n                    Expanded(\n                      child: Column(\n                        crossAxisAlignment: CrossAxisAlignment.start,\n                        children: [\n                          Text(workout.title, style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),\n                          const SizedBox(height: 3),\n                          Text(workout.exercices + \" \" + TextConstants.exercisesUppercase,\n                              style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500, color: ColorConstants.grey),\n                              overflow: TextOverflow.ellipsis,\n                              maxLines: 2),\n                          const SizedBox(height: 3),\n                          Text(workout.minutes + \" \" + TextConstants.minutes,\n                              style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500, color: ColorConstants.grey),\n                              overflow: TextOverflow.ellipsis,\n                              maxLines: 2),\n                          Spacer(),\n                          Text('${workout.currentProgress}/${workout.progress}', style: TextStyle(fontSize: 10)),\n                          SizedBox(height: 3),\n                          Padding(\n                            padding: const EdgeInsets.only(right: 30.0, left: 2),\n                            child: LinearPercentIndicator(\n                              percent: workout.currentProgress / workout.progress,\n                              progressColor: ColorConstants.primaryColor,\n                              backgroundColor: ColorConstants.primaryColor.withOpacity(0.12),\n                              lineHeight: 6,\n                              padding: EdgeInsets.zero,\n                            ),\n                          )\n                        ],\n                      ),\n                    ),\n                    SizedBox(width: 60),\n                    Expanded(child: ClipRRect(borderRadius: BorderRadius.circular(15), child: Image.asset(workout.image, fit: BoxFit.fill))),\n                  ],\n                ),\n              ),\n            );\n          },\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/screens/workouts/widget/workout_content.dart",
    "content": "import 'package:fitness_flutter/core/const/color_constants.dart';\nimport 'package:fitness_flutter/core/const/data_constants.dart';\nimport 'package:fitness_flutter/data/workout_data.dart';\nimport 'package:fitness_flutter/screens/workouts/widget/workout_card.dart';\nimport 'package:flutter/material.dart';\n\nclass WorkoutContent extends StatelessWidget {\n  WorkoutContent({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      color: ColorConstants.homeBackgroundColor,\n      height: double.infinity,\n      width: double.infinity,\n      child: _createHomeBody(context),\n    );\n  }\n\n  Widget _createHomeBody(BuildContext context) {\n    return Padding(\n      padding: const EdgeInsets.only(top: 50),\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          Padding(\n            padding: const EdgeInsets.symmetric(horizontal: 20.0),\n            child: Text('Workouts',\n                style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),\n          ),\n          const SizedBox(height: 5),\n          Expanded(\n            child: ListView(\n              children: DataConstants.workouts\n                  .map(\n                    (e) => _createWorkoutCard(e),\n                  )\n                  .toList(),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n\n  Widget _createWorkoutCard(WorkoutData workoutData) {\n    return Padding(\n      padding: const EdgeInsets.only(bottom: 20),\n      child: WorkoutCard(workout: workoutData),\n    );\n  }\n}\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: fitness_flutter\ndescription: A new Flutter project.\n\n# The following line prevents the package from being accidentally published to\n# pub.dev using `pub publish`. This is preferred for private packages.\npublish_to: 'none' # Remove this line if you wish to publish to pub.dev\n\n# The following defines the version and build number for your application.\n# A version number is three numbers separated by dots, like 1.2.43\n# followed by an optional build number separated by a +.\n# Both the version and the builder number may be overridden in flutter\n# build by specifying --build-name and --build-number, respectively.\n# In Android, build-name is used as versionName while build-number used as versionCode.\n# Read more about Android versioning at https://developer.android.com/studio/publish/versioning\n# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.\n# Read more about iOS versioning at\n# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html\nversion: 1.0.0+1\n\nenvironment:\n  sdk: \">=2.12.0 <3.0.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n  \n  #BloC  \n  flutter_bloc: ^7.0.1\n\n  # Firebase\n  firebase_core: ^1.4.0\n  firebase_auth: ^3.0.1\n  firebase_storage: ^10.0.1\n\n\n  # IOS Icons\n  cupertino_icons: ^1.0.2\n\n  # Page View dots indicator\n  dots_indicator: ^2.0.0\n\n  # Percent circle\n  percent_indicator: ^3.0.1\n\n  # URL launcher\n  url_launcher: ^6.0.9\n\n  # Workout Details sliding up panel\n  sliding_up_panel: ^2.0.0+1\n\n  # Video player\n  video_player: ^2.1.12\n  chewie: \n    git:\n      url: git@github.com:v1nnk1/chewie.git\n\n\n  # Countdown timer\n  custom_timer: ^0.0.6\n\n  # Image library\n  image_picker: ^0.8.2\n\n  # Reminder notification\n  flutter_local_notifications: ^8.0.0\n\n  # Native timezone\n  flutter_native_timezone: ^2.0.0\n\n  # Permission handler\n  permission_handler: ^8.1.4+2\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n\n\n\n# The following section is specific to Flutter.\nflutter:\n\n  uses-material-design: true\n\n  # To add assets to your application, add an assets section, like this:\n  assets:\n    - assets/images/onboarding/\n    - assets/images/auth/\n    - assets/images/home/\n    - assets/images/exercises/\n    - assets/icons/home/\n    - assets/icons/workouts/\n    - assets/icons/social_networks/\n    - assets/videos/workouts/\n\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.dev/assets-and-images/#resolution-aware.\n\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.dev/assets-and-images/#from-packages\n\n  fonts:\n    - family: NotoSansKR\n      fonts:\n        - asset: assets/fonts/NotoSansKR/NotoSansKR-Regular.otf\n        - asset: assets/fonts/NotoSansKR/NotoSansKR-Medium.otf\n          weight: 500\n        - asset: assets/fonts/NotoSansKR/NotoSansKR-Bold.otf\n          weight: 700\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #"
  },
  {
    "path": "test/widget_test.dart",
    "content": "// This is a basic Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester\n// utility that Flutter provides. For example, you can send tap and scroll\n// gestures. You can also use WidgetTester to find child widgets in the widget\n// tree, read text, and verify that the values of widget properties are correct.\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nimport 'package:fitness_flutter/main.dart';\n\nvoid main() {\n  testWidgets('Counter increments smoke test', (WidgetTester tester) async {\n    // Build our app and trigger a frame.\n    await tester.pumpWidget(MyApp());\n\n    // Verify that our counter starts at 0.\n    expect(find.text('0'), findsOneWidget);\n    expect(find.text('1'), findsNothing);\n\n    // Tap the '+' icon and trigger a frame.\n    await tester.tap(find.byIcon(Icons.add));\n    await tester.pump();\n\n    // Verify that our counter has incremented.\n    expect(find.text('0'), findsNothing);\n    expect(find.text('1'), findsOneWidget);\n  });\n}\n"
  },
  {
    "path": "web/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <!--\n    If you are serving your web app in a path other than the root, change the\n    href value below to reflect the base path you are serving from.\n\n    The path provided below has to start and end with a slash \"/\" in order for\n    it to work correctly.\n\n    Fore more details:\n    * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base\n  -->\n  <base href=\"/\">\n\n  <meta charset=\"UTF-8\">\n  <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\">\n  <meta name=\"description\" content=\"A new Flutter project.\">\n\n  <!-- iOS meta tags & icons -->\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\">\n  <meta name=\"apple-mobile-web-app-title\" content=\"fitness_flutter\">\n  <link rel=\"apple-touch-icon\" href=\"icons/Icon-192.png\">\n\n  <!-- Favicon -->\n  <link rel=\"icon\" type=\"image/png\" href=\"favicon.png\"/>\n\n  <title>fitness_flutter</title>\n  <link rel=\"manifest\" href=\"manifest.json\">\n</head>\n<body>\n  \n  <!-- This script installs service_worker.js to provide PWA functionality to\n       application. For more information, see:\n       https://developers.google.com/web/fundamentals/primers/service-workers -->\n  <script>\n    if ('serviceWorker' in navigator) {\n      window.addEventListener('flutter-first-frame', function () {\n        navigator.serviceWorker.register('flutter_service_worker.js');\n      });\n    }\n  </script>\n  <script src=\"https://www.gstatic.com/firebasejs/8.6.1/firebase-app.js\"></script>\n  <script src=\"https://www.gstatic.com/firebasejs/8.6.1/firebase-storage.js\"></script>\n  <script src=\"https://www.gstatic.com/firebasejs/8.6.1/firebase-auth.js\"></script>\n  <script>\n    // Your web app's Firebase configuration\n    // For Firebase JS SDK v7.20.0 and later, measurementId is optional\n    var firebaseConfig = {\n      apiKey: \"AIzaSyDrPUAw_3Cea0ULoW4XtRpcrn99XE-Cc2g\",\n      authDomain: \"fitness-1a139.firebaseapp.com\",\n      projectId: \"fitness-1a139\",\n      storageBucket: \"fitness-1a139.appspot.com\",\n      messagingSenderId: \"422986340486\",\n      appId: \"1:422986340486:web:7a9af0190bbbc19db51907\",\n      measurementId: \"G-LZ3D1T26G6\"\n    };\n    // Initialize Firebase\n    firebase.initializeApp(firebaseConfig);\n  </script>\n  <script src=\"main.dart.js\" type=\"application/javascript\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "web/manifest.json",
    "content": "{\n    \"name\": \"fitness_flutter\",\n    \"short_name\": \"fitness_flutter\",\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"background_color\": \"#0175C2\",\n    \"theme_color\": \"#0175C2\",\n    \"description\": \"A new Flutter project.\",\n    \"orientation\": \"portrait-primary\",\n    \"prefer_related_applications\": false,\n    \"icons\": [\n        {\n            \"src\": \"icons/Icon-192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"icons/Icon-512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\"\n        }\n    ]\n}\n"
  }
]