├── .gitignore ├── .metadata ├── .vscode └── launch.json ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── exercise_app │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── cfg │ └── configurations.json ├── cheer.mp3 ├── db │ └── kegel.db ├── img │ ├── apple_pay.png │ ├── bg_learn_card1_blue.png │ ├── bg_learn_card1_green.png │ ├── bg_learn_card1_pink.png │ ├── bg_learn_card1_purple.png │ ├── bg_learn_card2_blue.png │ ├── bg_learn_card2_green.png │ ├── bg_learn_card2_pink.png │ ├── bg_learn_card2_purple.png │ ├── bg_learn_card3.png │ ├── bg_level.png │ ├── bg_level_select_blue.png │ ├── bg_level_select_green.png │ ├── bg_level_select_pink.png │ ├── bg_level_select_purple.png │ ├── bg_splash.jpg │ ├── brazil.png │ ├── canada.png │ ├── cash.png │ ├── china.png │ ├── female.svg │ ├── france.png │ ├── germany.png │ ├── ic_switch_private_off.png │ ├── ic_switch_private_on.png │ ├── ic_tip_1.png │ ├── ic_tip_10.png │ ├── ic_tip_11.png │ ├── ic_tip_12.png │ ├── ic_tip_2.png │ ├── ic_tip_3.png │ ├── ic_tip_4.png │ ├── ic_tip_5.png │ ├── ic_tip_61.png │ ├── ic_tip_62.png │ ├── ic_tip_7.png │ ├── ic_tip_8.png │ ├── ic_tip_9.png │ ├── italy.png │ ├── loading.gif │ ├── loading_card.gif │ ├── loading_trend.gif │ ├── male.svg │ ├── marker.png │ ├── mastercard.png │ ├── my_marker.png │ ├── netherlands.png │ ├── pay_pickup.png │ ├── paypal.png │ ├── paypal2.png │ ├── progressbar.svg │ ├── razorpay.png │ ├── spain.png │ ├── united-arab-emirates.png │ ├── united-states-of-america.png │ ├── vector_setting_vibration_blue.png │ ├── vector_setting_vibration_green.png │ ├── vector_setting_vibration_pink.png │ ├── vector_setting_vibration_purple.png │ ├── vector_setting_voice_blue.png │ ├── vector_setting_voice_green.png │ ├── vector_setting_voice_pink.png │ ├── vector_setting_voice_purple.png │ ├── visa.png │ ├── visacard.png │ └── wallet.png ├── td_countdown.mp3 ├── td_ding.mp3 ├── td_tick.mp3 └── td_whistle.wav ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── kegel.db ├── lib ├── app.dart ├── controllers │ └── settings_controller.dart ├── generated │ ├── i18n.dart │ ├── intl │ │ ├── messages_all.dart │ │ ├── messages_ar.dart │ │ ├── messages_en.dart │ │ ├── messages_es.dart │ │ ├── messages_fr.dart │ │ ├── messages_fr_CA.dart │ │ ├── messages_in.dart │ │ ├── messages_ko.dart │ │ └── messages_pt_BR.dart │ └── l10n.dart ├── helpers │ └── app_config.dart ├── l10n │ ├── intl_ar.arb │ ├── intl_en.arb │ ├── intl_es.arb │ ├── intl_fr.arb │ ├── intl_fr_CA.arb │ ├── intl_in.arb │ ├── intl_ko.arb │ ├── intl_pt_BR.arb │ └── intl_zh_CN.arb ├── main.dart ├── pages │ ├── CanKegel.dart │ ├── CompleteExerciseWidget.dart │ ├── DayExercise.dart │ ├── Disclaimer.dart │ ├── ExerciseWidget.dart │ ├── FindMuscles.dart │ ├── HowKegel.dart │ ├── KegelWidget.dart │ ├── LearnWidget.dart │ ├── MineWidget.dart │ ├── PleaseNote.dart │ ├── SettingWidget.dart │ ├── WhatBenefits.dart │ ├── WhatBenefitsForWoman.dart │ ├── WhatsKegel.dart │ ├── pages.dart │ └── splash_screen.dart ├── repository │ └── settings_repository.dart └── route_generator.dart ├── pubspec.lock └── pubspec.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 78910062997c3a836feee883712c241a5fd22983 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "kegel_flutter_app", 9 | "request": "launch", 10 | "type": "dart" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # exercise_app 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 29 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.exercise_app" 42 | minSdkVersion 16 43 | targetSdkVersion 29 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | } 47 | 48 | buildTypes { 49 | release { 50 | // TODO: Add your own signing config for the release build. 51 | // Signing with the debug keys for now, so `flutter run --release` works. 52 | signingConfig signingConfigs.debug 53 | } 54 | } 55 | } 56 | 57 | flutter { 58 | source '../..' 59 | } 60 | 61 | dependencies { 62 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 63 | } 64 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/exercise_app/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.exercise_app 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.enableR8=true 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/cfg/configurations.json: -------------------------------------------------------------------------------- 1 | { 2 | "base_url": "https://localhost/", 3 | "api_base_url": "https://localhost/api/" 4 | } -------------------------------------------------------------------------------- /assets/cheer.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/cheer.mp3 -------------------------------------------------------------------------------- /assets/db/kegel.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/db/kegel.db -------------------------------------------------------------------------------- /assets/img/apple_pay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/apple_pay.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card1_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card1_blue.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card1_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card1_green.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card1_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card1_pink.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card1_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card1_purple.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card2_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card2_blue.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card2_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card2_green.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card2_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card2_pink.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card2_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card2_purple.png -------------------------------------------------------------------------------- /assets/img/bg_learn_card3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_learn_card3.png -------------------------------------------------------------------------------- /assets/img/bg_level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_level.png -------------------------------------------------------------------------------- /assets/img/bg_level_select_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_level_select_blue.png -------------------------------------------------------------------------------- /assets/img/bg_level_select_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_level_select_green.png -------------------------------------------------------------------------------- /assets/img/bg_level_select_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_level_select_pink.png -------------------------------------------------------------------------------- /assets/img/bg_level_select_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_level_select_purple.png -------------------------------------------------------------------------------- /assets/img/bg_splash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/bg_splash.jpg -------------------------------------------------------------------------------- /assets/img/brazil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/brazil.png -------------------------------------------------------------------------------- /assets/img/canada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/canada.png -------------------------------------------------------------------------------- /assets/img/cash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/cash.png -------------------------------------------------------------------------------- /assets/img/china.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/china.png -------------------------------------------------------------------------------- /assets/img/female.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Svg Vector Icons : http://www.onlinewebfonts.com/icon 6 | 7 | -------------------------------------------------------------------------------- /assets/img/france.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/france.png -------------------------------------------------------------------------------- /assets/img/germany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/germany.png -------------------------------------------------------------------------------- /assets/img/ic_switch_private_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_switch_private_off.png -------------------------------------------------------------------------------- /assets/img/ic_switch_private_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_switch_private_on.png -------------------------------------------------------------------------------- /assets/img/ic_tip_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_1.png -------------------------------------------------------------------------------- /assets/img/ic_tip_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_10.png -------------------------------------------------------------------------------- /assets/img/ic_tip_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_11.png -------------------------------------------------------------------------------- /assets/img/ic_tip_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_12.png -------------------------------------------------------------------------------- /assets/img/ic_tip_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_2.png -------------------------------------------------------------------------------- /assets/img/ic_tip_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_3.png -------------------------------------------------------------------------------- /assets/img/ic_tip_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_4.png -------------------------------------------------------------------------------- /assets/img/ic_tip_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_5.png -------------------------------------------------------------------------------- /assets/img/ic_tip_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_61.png -------------------------------------------------------------------------------- /assets/img/ic_tip_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_62.png -------------------------------------------------------------------------------- /assets/img/ic_tip_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_7.png -------------------------------------------------------------------------------- /assets/img/ic_tip_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_8.png -------------------------------------------------------------------------------- /assets/img/ic_tip_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/ic_tip_9.png -------------------------------------------------------------------------------- /assets/img/italy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/italy.png -------------------------------------------------------------------------------- /assets/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/loading.gif -------------------------------------------------------------------------------- /assets/img/loading_card.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/loading_card.gif -------------------------------------------------------------------------------- /assets/img/loading_trend.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/loading_trend.gif -------------------------------------------------------------------------------- /assets/img/male.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Svg Vector Icons : http://www.onlinewebfonts.com/icon 6 | 7 | -------------------------------------------------------------------------------- /assets/img/marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/marker.png -------------------------------------------------------------------------------- /assets/img/mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/mastercard.png -------------------------------------------------------------------------------- /assets/img/my_marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/my_marker.png -------------------------------------------------------------------------------- /assets/img/netherlands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/netherlands.png -------------------------------------------------------------------------------- /assets/img/pay_pickup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/pay_pickup.png -------------------------------------------------------------------------------- /assets/img/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/paypal.png -------------------------------------------------------------------------------- /assets/img/paypal2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/paypal2.png -------------------------------------------------------------------------------- /assets/img/progressbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/img/razorpay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/razorpay.png -------------------------------------------------------------------------------- /assets/img/spain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/spain.png -------------------------------------------------------------------------------- /assets/img/united-arab-emirates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/united-arab-emirates.png -------------------------------------------------------------------------------- /assets/img/united-states-of-america.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/united-states-of-america.png -------------------------------------------------------------------------------- /assets/img/vector_setting_vibration_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_vibration_blue.png -------------------------------------------------------------------------------- /assets/img/vector_setting_vibration_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_vibration_green.png -------------------------------------------------------------------------------- /assets/img/vector_setting_vibration_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_vibration_pink.png -------------------------------------------------------------------------------- /assets/img/vector_setting_vibration_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_vibration_purple.png -------------------------------------------------------------------------------- /assets/img/vector_setting_voice_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_voice_blue.png -------------------------------------------------------------------------------- /assets/img/vector_setting_voice_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_voice_green.png -------------------------------------------------------------------------------- /assets/img/vector_setting_voice_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_voice_pink.png -------------------------------------------------------------------------------- /assets/img/vector_setting_voice_purple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/vector_setting_voice_purple.png -------------------------------------------------------------------------------- /assets/img/visa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/visa.png -------------------------------------------------------------------------------- /assets/img/visacard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/visacard.png -------------------------------------------------------------------------------- /assets/img/wallet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/img/wallet.png -------------------------------------------------------------------------------- /assets/td_countdown.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/td_countdown.mp3 -------------------------------------------------------------------------------- /assets/td_ding.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/td_ding.mp3 -------------------------------------------------------------------------------- /assets/td_tick.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/td_tick.mp3 -------------------------------------------------------------------------------- /assets/td_whistle.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/assets/td_whistle.wav -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | exercise_app 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /kegel.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codemaster730/Kegel_exercise_Flutter/2453b6aa4949f0460fcff04bb61784cbc43b4dff/kegel.db -------------------------------------------------------------------------------- /lib/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'route_generator.dart'; 3 | 4 | import 'package:flutter_localizations/flutter_localizations.dart'; 5 | 6 | import 'generated/l10n.dart'; 7 | import 'models/setting.dart'; 8 | import 'repository/settings_repository.dart' as settingRepo; 9 | import 'helpers/app_config.dart' as config; 10 | 11 | class App extends StatefulWidget { 12 | @override 13 | _AppState createState() => _AppState(); 14 | } 15 | 16 | class _AppState extends State { 17 | @override 18 | void initState() { 19 | settingRepo.initSettings(); 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return ValueListenableBuilder( 26 | valueListenable: settingRepo.setting, 27 | builder: (context, Setting _setting, _) { 28 | return MaterialApp( 29 | theme: ThemeData( 30 | primaryColor: Color(0xFFF5739E), 31 | // primaryColor: config.Colors().mainColor(0.2), 32 | //primaryColor: Color(_setting.mainColor), 33 | backgroundColor: Color(0xFFF5F7FA), 34 | textTheme: TextTheme( 35 | headline1: TextStyle( 36 | color: Colors.black, 37 | fontSize: 37, 38 | fontWeight: FontWeight.bold, 39 | ), 40 | headline2: TextStyle( 41 | color: Colors.black, 42 | fontSize: 32, 43 | fontWeight: FontWeight.bold, 44 | ), 45 | headline5: TextStyle( 46 | color: Colors.black, 47 | height: 1, 48 | fontWeight: FontWeight.bold, 49 | fontSize: 22, 50 | ), 51 | headline6: TextStyle( 52 | color: Color(0xFF5B5B5B), 53 | height: 1.4, 54 | ), 55 | subtitle1: TextStyle( 56 | color: Colors.black, 57 | fontSize: 18, 58 | ), 59 | subtitle2: TextStyle( 60 | color: Colors.black, 61 | fontSize: 16, 62 | ), 63 | ), 64 | textButtonTheme: TextButtonThemeData( 65 | style: TextButton.styleFrom( 66 | primary: Color(0xFFFD7452), 67 | textStyle: TextStyle( 68 | fontSize: 22, 69 | fontWeight: FontWeight.bold, 70 | ), 71 | ), 72 | ), 73 | ), 74 | initialRoute: '/Splash', 75 | onGenerateRoute: RouteGenerator.generateRoute, 76 | locale: _setting.mobileLanguage.value, 77 | localizationsDelegates: [ 78 | S.delegate, 79 | GlobalMaterialLocalizations.delegate, 80 | GlobalWidgetsLocalizations.delegate, 81 | ], 82 | supportedLocales: S.delegate.supportedLocales, 83 | debugShowCheckedModeBanner: false, 84 | ); 85 | }); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/controllers/settings_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:mvc_pattern/mvc_pattern.dart'; 3 | 4 | import '../generated/l10n.dart'; 5 | // import '../models/credit_card.dart'; 6 | import '../models/user.dart'; 7 | // import '../repository/user_repository.dart' as repository; 8 | 9 | class SettingsController extends ControllerMVC { 10 | // CreditCard creditCard = new CreditCard(); 11 | GlobalKey loginFormKey; 12 | GlobalKey scaffoldKey; 13 | 14 | SettingsController() { 15 | loginFormKey = new GlobalKey(); 16 | this.scaffoldKey = new GlobalKey(); 17 | } 18 | 19 | void update(User user) async { 20 | user.deviceToken = null; 21 | // repository.update(user).then((value) { 22 | // setState(() {}); 23 | // scaffoldKey?.currentState?.showSnackBar(SnackBar( 24 | // content: Text(S.of(context).profile_settings_updated_successfully), 25 | // )); 26 | // }); 27 | } 28 | 29 | // void updateCreditCard(CreditCard creditCard) { 30 | // repository.setCreditCard(creditCard).then((value) { 31 | // setState(() {}); 32 | // scaffoldKey?.currentState?.showSnackBar(SnackBar( 33 | // content: Text(S.of(context).payment_settings_updated_successfully), 34 | // )); 35 | // }); 36 | // } 37 | 38 | void listenForUser() async { 39 | // creditCard = await repository.getCreditCard(); 40 | setState(() {}); 41 | } 42 | 43 | Future refreshSettings() async { 44 | // creditCard = new CreditCard(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/generated/i18n.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/foundation.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | // ignore_for_file: non_constant_identifier_names 7 | // ignore_for_file: camel_case_types 8 | // ignore_for_file: prefer_single_quotes 9 | 10 | // This file is automatically generated. DO NOT EDIT, all your changes would be lost. 11 | class S implements WidgetsLocalizations { 12 | const S(); 13 | 14 | static S current; 15 | 16 | static const GeneratedLocalizationsDelegate delegate = GeneratedLocalizationsDelegate(); 17 | 18 | static S of(BuildContext context) => Localizations.of(context, S); 19 | 20 | @override 21 | TextDirection get textDirection => TextDirection.ltr; 22 | } 23 | 24 | class $en extends S { 25 | const $en(); 26 | } 27 | 28 | class GeneratedLocalizationsDelegate extends LocalizationsDelegate { 29 | const GeneratedLocalizationsDelegate(); 30 | 31 | List get supportedLocales { 32 | return const [ 33 | Locale("en", ""), 34 | ]; 35 | } 36 | 37 | LocaleListResolutionCallback listResolution({Locale fallback, bool withCountry = true}) { 38 | return (List locales, Iterable supported) { 39 | if (locales == null || locales.isEmpty) { 40 | return fallback ?? supported.first; 41 | } else { 42 | return _resolve(locales.first, fallback, supported, withCountry); 43 | } 44 | }; 45 | } 46 | 47 | LocaleResolutionCallback resolution({Locale fallback, bool withCountry = true}) { 48 | return (Locale locale, Iterable supported) { 49 | return _resolve(locale, fallback, supported, withCountry); 50 | }; 51 | } 52 | 53 | @override 54 | Future load(Locale locale) { 55 | final String lang = getLang(locale); 56 | if (lang != null) { 57 | switch (lang) { 58 | case "en": 59 | S.current = const $en(); 60 | return SynchronousFuture(S.current); 61 | default: 62 | // NO-OP. 63 | } 64 | } 65 | S.current = const S(); 66 | return SynchronousFuture(S.current); 67 | } 68 | 69 | @override 70 | bool isSupported(Locale locale) => _isSupported(locale, true); 71 | 72 | @override 73 | bool shouldReload(GeneratedLocalizationsDelegate old) => false; 74 | 75 | /// 76 | /// Internal method to resolve a locale from a list of locales. 77 | /// 78 | Locale _resolve(Locale locale, Locale fallback, Iterable supported, bool withCountry) { 79 | if (locale == null || !_isSupported(locale, withCountry)) { 80 | return fallback ?? supported.first; 81 | } 82 | 83 | final Locale languageLocale = Locale(locale.languageCode, ""); 84 | if (supported.contains(locale)) { 85 | return locale; 86 | } else if (supported.contains(languageLocale)) { 87 | return languageLocale; 88 | } else { 89 | final Locale fallbackLocale = fallback ?? supported.first; 90 | return fallbackLocale; 91 | } 92 | } 93 | 94 | /// 95 | /// Returns true if the specified locale is supported, false otherwise. 96 | /// 97 | bool _isSupported(Locale locale, bool withCountry) { 98 | if (locale != null) { 99 | for (Locale supportedLocale in supportedLocales) { 100 | // Language must always match both locales. 101 | if (supportedLocale.languageCode != locale.languageCode) { 102 | continue; 103 | } 104 | 105 | // If country code matches, return this locale. 106 | if (supportedLocale.countryCode == locale.countryCode) { 107 | return true; 108 | } 109 | 110 | // If no country requirement is requested, check if this locale has no country. 111 | if (true != withCountry && (supportedLocale.countryCode == null || supportedLocale.countryCode.isEmpty)) { 112 | return true; 113 | } 114 | } 115 | } 116 | return false; 117 | } 118 | } 119 | 120 | String getLang(Locale l) => l == null ? null : l.countryCode != null && l.countryCode.isEmpty ? l.languageCode : l.toString(); 121 | -------------------------------------------------------------------------------- /lib/generated/intl/messages_all.dart: -------------------------------------------------------------------------------- 1 | // DO NOT EDIT. This is code generated via package:intl/generate_localized.dart 2 | // This is a library that looks up messages for specific locales by 3 | // delegating to the appropriate library. 4 | 5 | // Ignore issues from commonly used lints in this file. 6 | // ignore_for_file:implementation_imports, file_names, unnecessary_new 7 | // ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering 8 | // ignore_for_file:argument_type_not_assignable, invalid_assignment 9 | // ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases 10 | // ignore_for_file:comment_references 11 | 12 | import 'dart:async'; 13 | 14 | import 'package:intl/intl.dart'; 15 | import 'package:intl/message_lookup_by_library.dart'; 16 | import 'package:intl/src/intl_helpers.dart'; 17 | 18 | import 'messages_ar.dart' as messages_ar; 19 | import 'messages_en.dart' as messages_en; 20 | import 'messages_es.dart' as messages_es; 21 | import 'messages_fr.dart' as messages_fr; 22 | import 'messages_fr_CA.dart' as messages_fr_ca; 23 | import 'messages_in.dart' as messages_in; 24 | import 'messages_ko.dart' as messages_ko; 25 | import 'messages_pt_BR.dart' as messages_pt_br; 26 | 27 | typedef Future LibraryLoader(); 28 | Map _deferredLibraries = { 29 | 'ar': () => new Future.value(null), 30 | 'en': () => new Future.value(null), 31 | 'es': () => new Future.value(null), 32 | 'fr': () => new Future.value(null), 33 | 'fr_CA': () => new Future.value(null), 34 | 'in': () => new Future.value(null), 35 | 'ko': () => new Future.value(null), 36 | 'pt_BR': () => new Future.value(null), 37 | }; 38 | 39 | MessageLookupByLibrary _findExact(String localeName) { 40 | switch (localeName) { 41 | case 'ar': 42 | return messages_ar.messages; 43 | case 'en': 44 | return messages_en.messages; 45 | case 'es': 46 | return messages_es.messages; 47 | case 'fr': 48 | return messages_fr.messages; 49 | case 'fr_CA': 50 | return messages_fr_ca.messages; 51 | case 'in': 52 | return messages_in.messages; 53 | case 'ko': 54 | return messages_ko.messages; 55 | case 'pt_BR': 56 | return messages_pt_br.messages; 57 | default: 58 | return null; 59 | } 60 | } 61 | 62 | /// User programs should call this before using [localeName] for messages. 63 | Future initializeMessages(String localeName) async { 64 | var availableLocale = Intl.verifiedLocale( 65 | localeName, 66 | (locale) => _deferredLibraries[locale] != null, 67 | onFailure: (_) => null); 68 | if (availableLocale == null) { 69 | return new Future.value(false); 70 | } 71 | var lib = _deferredLibraries[availableLocale]; 72 | await (lib == null ? new Future.value(false) : lib()); 73 | initializeInternalMessageLookup(() => new CompositeMessageLookup()); 74 | messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor); 75 | return new Future.value(true); 76 | } 77 | 78 | bool _messagesExistFor(String locale) { 79 | try { 80 | return _findExact(locale) != null; 81 | } catch (e) { 82 | return false; 83 | } 84 | } 85 | 86 | MessageLookupByLibrary _findGeneratedMessagesFor(String locale) { 87 | var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor, 88 | onFailure: (_) => null); 89 | if (actualLocale == null) return null; 90 | return _findExact(actualLocale); 91 | } 92 | -------------------------------------------------------------------------------- /lib/helpers/app_config.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../repository/settings_repository.dart' as settingRepo; 4 | 5 | class App { 6 | BuildContext _context; 7 | double _height; 8 | double _width; 9 | double _heightPadding; 10 | double _widthPadding; 11 | 12 | App(_context) { 13 | this._context = _context; 14 | MediaQueryData _queryData = MediaQuery.of(this._context); 15 | _height = _queryData.size.height / 100.0; 16 | _width = _queryData.size.width / 100.0; 17 | _heightPadding = _height - 18 | ((_queryData.padding.top + _queryData.padding.bottom) / 100.0); 19 | _widthPadding = 20 | _width - (_queryData.padding.left + _queryData.padding.right) / 100.0; 21 | } 22 | 23 | double appHeight(double v) { 24 | return _height * v; 25 | } 26 | 27 | double appWidth(double v) { 28 | return _width * v; 29 | } 30 | 31 | double appVerticalPadding(double v) { 32 | return _heightPadding * v; 33 | } 34 | 35 | double appHorizontalPadding(double v) { 36 | // int.parse(settingRepo.setting.mainColor.replaceAll("#", "0xFF")); 37 | return _widthPadding * v; 38 | } 39 | } 40 | 41 | class Colors { 42 | Color mainColor(double opacity) { 43 | try { 44 | return Color(settingRepo.setting.value.mainColor.value); 45 | } catch (e) { 46 | return Color(4293943954); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/l10n/intl_ar.arb: -------------------------------------------------------------------------------- 1 | { 2 | "search_for_markets_or_products": "ابحث عن الأسواق أو المنتجات", 3 | "top_markets": "أهم الأسواق", 4 | "ordered_by_nearby_first": "تم طلبه مسبقًا أولاً", 5 | "trending_this_week": "تتجه هذا الأسبوع", 6 | "product_categories": "فئات المنتجات", 7 | "most_popular": "الأكثر شعبية", 8 | "recent_reviews": "المراجعات الأخيرة", 9 | "login": "تسجيل الدخول", 10 | "skip": "تخطى", 11 | "about": "حول", 12 | "submit": "إرسال", 13 | "verify": "تحقق", 14 | "select_your_preferred_languages": "حدد لغاتك المفضلة", 15 | "order_id": "رقم التعريف الخاص بالطلب", 16 | "category": "الفئة", 17 | "checkout": "الدفع", 18 | "payment_mode": "طريقة الدفع", 19 | "select_your_preferred_payment_mode": "حدد وضع الدفع المفضل لديك", 20 | "or_checkout_with": "أو الخروج مع", 21 | "subtotal": "المجموع الفرعي", 22 | "total": "مجموع", 23 | "confirm_payment": "تأكيد الدفع", 24 | "information": "معلومات", 25 | "featured_products": "منتجات مميزة", 26 | "what_they_say": "ماذا يقولون ؟", 27 | "favorite_products": "المنتجات المفضلة", 28 | "options": "خيارات", 29 | "select_options_to_add_them_on_the_product": "حدد خيارات لإضافتها على المنتج", 30 | "reviews": "المراجعات", 31 | "quantity": "كمية", 32 | "add_to_cart": "أضف إلى السلة", 33 | "faq": "التعليمات", 34 | "help_supports": "المساعدة والدعم", 35 | "app_language": "لغة التطبيق", 36 | "i_forgot_password": "نسيت كلمة المرور؟", 37 | "i_dont_have_an_account": "ليس لدي حساب؟", 38 | "maps_explorer": "مستكشف الخرائط", 39 | "all_product": "جميع المنتجات", 40 | "notifications": "إشعارات", 41 | "confirmation": "التأكيد", 42 | "your_order_has_been_successfully_submitted": "تم تقديم طلبك بنجاح!", 43 | "tax": "ضريبة", 44 | "my_orders": "طلباتي", 45 | "profile": "الملف الشخصي", 46 | "favorites": "المفضلة", 47 | "home": "الصفحة الرئيسية", 48 | "payment_options": "خيارات الدفع", 49 | "cash_on_delivery": "الدفع عند الاستلام", 50 | "paypal_payment": "الدفع باي بال", 51 | "recent_orders": "الطلبيات الأخيرة", 52 | "settings": "الإعدادات", 53 | "profile_settings": "إعدادات الملف الشخصي", 54 | "full_name": "الاسم الكامل", 55 | "email": "البريد الإلكتروني", 56 | "phone": "هاتف", 57 | "address": "عنوان", 58 | "payments_settings": "إعدادات المدفوعات", 59 | "default_credit_card": "بطاقة الائتمان الافتراضية", 60 | "app_settings": "إعدادات التطبيقات", 61 | "languages": "اللغات", 62 | "english": "الإنجليزية", 63 | "help_support": "ساعد لدعم", 64 | "register": "تسجيل", 65 | "lets_start_with_register": "لنبدأ بالتسجيل!", 66 | "should_be_more_than_3_letters": "يجب أن يكون أكثر من 3 أحرف", 67 | "john_doe": "فلان الفلاني", 68 | "should_be_a_valid_email": "يجب أن يكون بريدًا إلكترونيًا صالحًا", 69 | "should_be_more_than_6_letters": "يجب أن يكون أكثر من 6 أحرف", 70 | "password": "كلمه السر", 71 | "i_have_account_back_to_login": "لدي حساب؟ العودة لتسجيل الدخول", 72 | "tracking_order": "تتبع الطلب", 73 | "discover__explorer": "اكتشف واستكشف", 74 | "you_can_discover_markets": "يمكنك اكتشاف الأسواق والمتاجر من حولك واختيار أفضل وجبة لك بعد بضع دقائق نجهزها ونقدمها لك", 75 | "reset_cart": "إعادة تعيين السلة؟", 76 | "cart": "عربة التسوق", 77 | "shopping_cart": "عربة التسوق", 78 | "verify_your_quantity_and_click_checkout": "تحقق من الكمية الخاصة بك وانقر فوق الخروج", 79 | "lets_start_with_login": "لنبدأ بتسجيل الدخول!", 80 | "should_be_more_than_3_characters": "يجب أن يكون أكثر من 3 أحرف", 81 | "you_must_add_products_of_the_same_markets_choose_one": "يجب عليك إضافة منتجات من نفس الأسواق اختر سوقًا واحدًا فقط!", 82 | "reset_your_cart_and_order_meals_form_this_market": "إعادة تعيين عربة التسوق وطلب وجبات الطعام من هذا السوق", 83 | "keep_your_old_meals_of_this_market": "احتفظ بوجباتك القديمة في هذا السوق", 84 | "reset": "إعادة تعيين", 85 | "close": "قريب", 86 | "application_preferences": "تفضيلات التطبيق", 87 | "help__support": "ساعد لدعم", 88 | "light_mode": "وضع الضوء", 89 | "dark_mode": "الوضع الداكن", 90 | "log_out": "تسجيل خروج", 91 | "version": "الإصدار", 92 | "dont_have_any_item_in_your_cart": "لا يوجد أي عنصر في سلة التسوق الخاصة بك", 93 | "start_exploring": "ابدأ الاستكشاف", 94 | "dont_have_any_item_in_the_notification_list": "لا يوجد أي عنصر في قائمة الإشعارات", 95 | "payment_settings": "إعدادات الدفع", 96 | "not_a_valid_number": "رقم غير صالح", 97 | "not_a_valid_date": "ليس تاريخًا صالحًا", 98 | "not_a_valid_cvc": "ليس رمز التحقق من البطاقة (CVC) صالحًا", 99 | "cancel": "إلغاء", 100 | "save": "حفظ", 101 | "edit": "تعديل", 102 | "not_a_valid_full_name": "ليس اسم كامل صالح", 103 | "email_address": "عنوان بريد الكتروني", 104 | "not_a_valid_email": "ليس بريدًا إلكترونيًا صالحًا", 105 | "not_a_valid_phone": "ليس هاتفًا صالحًا", 106 | "not_a_valid_address": "عنوان غير صالح", 107 | "not_a_valid_biography": "ليست سيرة ذاتية صالحة", 108 | "your_biography": "سيرتك الذاتية", 109 | "your_address": "عنوانك", 110 | "search": "بحث", 111 | "recents_search": "البحث الأخير", 112 | "verify_your_internet_connection": "تحقق من اتصالك بالإنترنت", 113 | "carts_refreshed_successfuly": "تم تحديث عربات التسوق بنجاح", 114 | "the_product_was_removed_from_your_cart": "تمت إزالة {productName} من سلة التسوق الخاصة بك", 115 | "category_refreshed_successfuly": "تم تحديث الفئة بنجاح", 116 | "notifications_refreshed_successfuly": "تم تحديث الإشعارات بنجاح", 117 | "order_refreshed_successfuly": "تم تحديث الطلب بنجاح", 118 | "orders_refreshed_successfuly": "تم تحديث الطلبات بنجاح", 119 | "market_refreshed_successfuly": "تم تحديث السوق بنجاح", 120 | "profile_settings_updated_successfully": "تم تحديث إعدادات ملف التعريف بنجاح", 121 | "payment_settings_updated_successfully": "تم تحديث إعدادات الدفع بنجاح", 122 | "tracking_refreshed_successfuly": "تم تحديث التتبع بنجاح", 123 | "welcome": "أهلا بك", 124 | "wrong_email_or_password": "البريد الإلكتروني أو كلمة المرور خاطئة", 125 | "addresses_refreshed_successfuly": "تم تحديث العناوين بنجاح", 126 | "delivery_addresses": "عناوين التسليم", 127 | "add": "أضف", 128 | "new_address_added_successfully": "تمت إضافة العنوان الجديد بنجاح", 129 | "the_address_updated_successfully": "تم تحديث العنوان بنجاح", 130 | "long_press_to_edit_item_swipe_item_to_delete_it": "اضغط مع الاستمرار لتحرير العنصر ، واسحب العنصر لحذفه", 131 | "add_delivery_address": "أضف عنوان التسليم", 132 | "home_address": "عنوان المنزل", 133 | "description": "وصف", 134 | "hint_full_address": "12 شارع المدينة 21663 ، البلد", 135 | "full_address": "العنوان الكامل", 136 | "email_to_reset_password": "البريد الإلكتروني لإعادة تعيين كلمة المرور", 137 | "send_password_reset_link": "أرسل الرابط", 138 | "i_remember_my_password_return_to_login": "أتذكر عودة كلمة المرور الخاصة بي لتسجيل الدخول", 139 | "your_reset_link_has_been_sent_to_your_email": "تم إرسال رابط إعادة تعيين إلى البريد الإلكتروني الخاص بك", 140 | "error_verify_email_settings": "خطأ! تحقق من إعدادات البريد الإلكتروني", 141 | "guest": "زائر", 142 | "you_must_signin_to_access_to_this_section": "يجب عليك تسجيل الدخول للوصول إلى هذا القسم", 143 | "tell_us_about_this_market": "أخبرنا عن هذا السوق", 144 | "how_would_you_rate_this_market_": "كيف تقيم هذا السوق؟", 145 | "tell_us_about_this_product": "أخبرنا عن هذا المنتج", 146 | "the_market_has_been_rated_successfully": "تم تصنيف السوق بنجاح", 147 | "the_product_has_been_rated_successfully": "تم تصنيف المنتج بنجاح", 148 | "reviews_refreshed_successfully": "تم تحديث المراجعات بنجاح!", 149 | "delivery_fee": "رسوم التوصيل", 150 | "order_status_changed": "تغيرت حالة الطلب", 151 | "new_order_from_client": "طلب جديد من العميل", 152 | "shopping": "التسوق", 153 | "delivery_or_pickup": "التسليم أو الاستلام", 154 | "payment_card_updated_successfully": "تم تحديث بطاقة الدفع بنجاح", 155 | "deliverable": "قابلة للتسليم", 156 | "not_deliverable": "غير قابل للتسليم", 157 | "items": "العناصر", 158 | "delivery": "توصيل", 159 | "pickup": "امسك", 160 | "closed": "مغلق", 161 | "open": "افتح", 162 | "km": "كم", 163 | "mi": "أنا", 164 | "delivery_address": "عنوان التسليم", 165 | "current_location": "الموقع الحالي", 166 | "delivery_address_removed_successfully": "تمت إزالة عنوان التسليم بنجاح", 167 | "add_new_delivery_address": "أضف عنوان تسليم جديد", 168 | "markets_near_to_your_current_location": "الأسواق بالقرب من موقعك الحالي", 169 | "markets_near_to": "أسواق قريبة من", 170 | "near_to": "قريب من", 171 | "near_to_your_current_location": "بالقرب من موقعك الحالي", 172 | "pickup_your_product_from_the_market": "التقاط المنتج الخاص بك من السوق", 173 | "confirm_your_delivery_address": "قم بتأكيد عنوان التسليم الخاص بك", 174 | "filter": "منقي", 175 | "clear": "واضح", 176 | "apply_filters": "تطبيق الفلاتر", 177 | "opened_markets": "الأسواق المفتوحة", 178 | "fields": "مجالات", 179 | "this_product_was_added_to_cart": "تمت إضافة هذا المنتج إلى سلة التسوق", 180 | "products_result": "نتيجة المنتجات", 181 | "products_results": "نتائج المنتجات", 182 | "markets_results": "نتائج الأسواق", 183 | "all": "الكل", 184 | "this_market_is_closed_": "هذا السوق مغلق!", 185 | "unknown": "مجهول", 186 | "how_would_you_rate_this_market": "كيف تقيم هذا السوق؟", 187 | "click_on_the_stars_below_to_leave_comments": "انقر على النجوم أدناه لترك التعليقات", 188 | "click_to_confirm_your_address_and_pay_or_long_press": "انقر لتأكيد عنوانك والدفع أو الضغط لفترة طويلة لتحرير عنوانك", 189 | "visa_card": "بطاقة فيزا", 190 | "mastercard": "بطاقة ماستر بطاقة ائتمان", 191 | "paypal": "باي بال", 192 | "pay_on_pickup": "دفع على بيك اب", 193 | "click_to_pay_with_your_visa_card": "انقر للدفع باستخدام بطاقة Visa Card الخاصة بك", 194 | "click_to_pay_with_your_mastercard": "انقر للدفع باستخدام بطاقة MasterCard", 195 | "click_to_pay_with_your_paypal_account": "انقر للدفع باستخدام حساب PayPal الخاص بك", 196 | "click_to_pay_cash_on_delivery": "انقر لدفع نقدا عند التسليم", 197 | "click_to_pay_on_pickup": "انقر للدفع عند الاستلام", 198 | "this_email_account_exists": "حساب البريد الإلكتروني هذا موجود", 199 | "this_account_not_exist": "هذا الحساب غير موجود", 200 | "card_number": "رقم البطاقة", 201 | "expiry_date": "تاريخ الانتهاء", 202 | "cvv": "CVV", 203 | "your_credit_card_not_valid": "بطاقتك الائتمانية غير صالحة", 204 | "number": "رقم", 205 | "exp_date": "تاريخ الانتهاء", 206 | "cvc": "رمز التحقق من البطاقة", 207 | "completeYourProfileDetailsToContinue": "أكمل تفاصيل ملفك الشخصي للمتابعة", 208 | "deliveryAddressOutsideTheDeliveryRangeOfThisMarkets": "عنوان التسليم خارج نطاق التسليم لهذه الأسواق.", 209 | "thisMarketNotSupportDeliveryMethod": "هذا السوق لا يدعم طريقة التسليم.", 210 | "oneOrMoreProductsInYourCartNotDeliverable": "منتج واحد أو أكثر في سلة التسوق الخاصة بك غير قابلة للتسليم.", 211 | "deliveryMethodNotAllowed": "طريقة التسليم غير مسموح بها!", 212 | "viewDetails": "عرض التفاصيل", 213 | "youDontHaveAnyOrder": "ليس لديك أي طلب", 214 | "orderDetails": "تفاصيل الطلب", 215 | "order": "طلب", 216 | "details": "تفاصيل", 217 | "canceled": "ألغيت", 218 | "cancelOrder": "الغاء الطلب", 219 | "view": "رأي", 220 | "yes": "نعم", 221 | "areYouSureYouWantToCancelThisOrder": "هل أنت متأكد أنك تريد إلغاء هذا الطلب؟", 222 | "orderThisorderidHasBeenCanceled": "الطلب: #{id} تم إلغاءه ", 223 | "clickOnTheProductToGetMoreDetailsAboutIt": "انقر على المنتج للحصول على مزيد من التفاصيل حوله", 224 | "tapAgainToLeave": "Tap again to leave", 225 | "favorites_refreshed_successfuly": "Favorites refreshed successfully", 226 | "faqsRefreshedSuccessfuly": "Faqs refreshed successfully", 227 | "thisProductWasAddedToFavorite": "This product was added to favorite", 228 | "thisProductWasRemovedFromFavorites": "This product was removed from favorites", 229 | "productRefreshedSuccessfuly": "Product refreshed successfully", 230 | "razorpayPayment": "RazorPay Payment", 231 | "razorpay": "RazorPay", 232 | "clickToPayWithRazorpayMethod": "Click to pay with RazorPay method", 233 | "products": "Products", 234 | "validCouponCode": "Valid Coupon", 235 | "invalidCouponCode": "Invalid Coupon", 236 | "haveCouponCode": "Have Coupon Code?", 237 | "messages": "Messages", 238 | "youDontHaveAnyConversations": "You don't have any conversations", 239 | "newMessageFrom": "New message from", 240 | "forMoreDetailsPleaseChatWithOurManagers": "For more details, please chat with our managers", 241 | "signinToChatWithOurManagers": "Sign-In to chat with our managers", 242 | "typeToStartChat": "Type to start chat", 243 | "makeItDefault": "Make it default", 244 | "notValidAddress": "Not valid address", 245 | "swipeLeftTheNotificationToDeleteOrReadUnreadIt": "Swipe left the notification to delete or read / unread it", 246 | "thisNotificationHasMarkedAsUnread": "This notification has marked as unread", 247 | "notificationWasRemoved": "Notification was removed", 248 | "thisNotificationHasMarkedAsRead": "This notification has marked as read", 249 | "free": "Free" 250 | } -------------------------------------------------------------------------------- /lib/l10n/intl_en.arb: -------------------------------------------------------------------------------- 1 | { 2 | "kegel": "Kegel", 3 | "level": "Level", 4 | "day": "Day", 5 | "learn": "Learn", 6 | "mine": "Mine", 7 | "settings": "Settings", 8 | "tense": "tense", 9 | "relax": "relax", 10 | "excercises": "Excercises", 11 | "start": "START", 12 | "skip": "SKIP", 13 | "next": "Next", 14 | "s": "s", 15 | "completed": "Completed", 16 | "time": "time", 17 | "doing_kegel_3_times": "Doing Kegel exercises 3 times a day can achieve the best results.", 18 | "continue": "CONTINUE", 19 | "do_it_again": "DO IT AGAIN", 20 | "how_do_you_feel": "How do you feel", 21 | "hard": "Hard", 22 | "just_right": "Just right", 23 | "easy": "Easy", 24 | "reminders": "Reminders", 25 | "am": "AM", 26 | "pm": "PM", 27 | "add_reminder": "Add reminder", 28 | "cancel": "Cancel", 29 | "done": "Done", 30 | "reminder": "Reminder", 31 | "quit": "QUIT", 32 | "come_back_in_30_mins": "Come back in 30 minutes", 33 | "about_kegel": "About Kegel", 34 | "how_to_do": "How to do", 35 | "benefits_for_men": "Benefits for men", 36 | "benefits_for_women": "Benefits for women", 37 | "whats_kegel": "What's Kegel?", 38 | "what_are_the_benefits": "What are the benefits?", 39 | "can_i_do_kegel": "Can I do Kegel?", 40 | "who_is_not_suitable": "Who is not suitable", 41 | "how_to_do_kegel": "How to do Kegel", 42 | "how_to_find_pelvic": "How to find pelvic floor muscles?", 43 | "please_note": "Please note", 44 | "disclaimer": "Disclaimer", 45 | "training": "Training", 46 | "total": "Total", 47 | "duration": "duration", 48 | "days": "days", 49 | "min": "min", 50 | "calendar": "Calendar", 51 | "history": "History", 52 | "sound_options": "Sound options", 53 | "vibration": "Vibration", 54 | "voice_guide": "Voice guide", 55 | "general_settings": "General settings", 56 | "theme": "Theme", 57 | "purple": "Purple", 58 | "blue": "Blue", 59 | "green": "Green", 60 | "pink": "Pink", 61 | "gender": "Gender", 62 | "female": "Female", 63 | "male": "Male", 64 | "language_options": "Language Options", 65 | "reset_progress": "Reset progress", 66 | "day_prefix_for_chinese": "", 67 | "day_suffix_for_chinese": "" 68 | } -------------------------------------------------------------------------------- /lib/l10n/intl_in.arb: -------------------------------------------------------------------------------- 1 | { 2 | "search_for_markets_or_products": "Search for markets or products", 3 | "top_markets": "Top Markets", 4 | "ordered_by_nearby_first": "Ordered by Nearby first", 5 | "trending_this_week": "Trending This Week", 6 | "double_click_on_the_product_to_add_it_to_the": "Double click on the product to add it to the cart", 7 | "product_categories": "Product Categories", 8 | "most_popular": "Most Popular", 9 | "recent_reviews": "Recent Reviews", 10 | "login": "Login", 11 | "skip": "Skip", 12 | "about": "About", 13 | "submit": "Submit", 14 | "verify": "Verify", 15 | "select_your_preferred_languages": "Select your preferred languages", 16 | "order_id": "Order Id", 17 | "category": "Category", 18 | "checkout": "Checkout", 19 | "payment_mode": "Payment Mode", 20 | "select_your_preferred_payment_mode": "Select your preferred payment mode", 21 | "or_checkout_with": "Or Checkout With", 22 | "subtotal": "Subtotal", 23 | "total": "Total", 24 | "confirm_payment": "Confirm Payment", 25 | "menu": "Menu", 26 | "information": "Information", 27 | "featured_products": "Featured Products", 28 | "what_they_say": "What They Say ?", 29 | "favorite_products": "Favorite Products", 30 | "options": "Options", 31 | "select_options_to_add_them_on_the_product": "Select options to add them on the product", 32 | "reviews": "Reviews", 33 | "quantity": "Quantity", 34 | "add_to_cart": "Add to Cart", 35 | "faq": "Faq", 36 | "help_supports": "Help & Supports", 37 | "app_language": "App Language", 38 | "i_forgot_password": "I forgot password ?", 39 | "i_dont_have_an_account": "I don't have an account?", 40 | "maps_explorer": "Maps Explorer", 41 | "all_menu": "All Menu", 42 | "longpress_on_the_product_to_add_suplements": "Longpress on the product to add suplements", 43 | "notifications": "Notifications", 44 | "confirmation": "Confirmation", 45 | "your_order_has_been_successfully_submitted": "Your order has been successfully submitted!", 46 | "tax": "TAX", 47 | "my_orders": "My Orders", 48 | "profile": "Profile", 49 | "favorites": "Favorites", 50 | "home": "Home", 51 | "payment_options": "Payment Options", 52 | "cash_on_delivery": "Cash on delivery", 53 | "paypal_payment": "PayPal Payment", 54 | "recent_orders": "Recent Orders", 55 | "settings": "Settings", 56 | "profile_settings": "Profile Settings", 57 | "full_name": "Full name", 58 | "email": "Email", 59 | "phone": "Phone", 60 | "address": "Address", 61 | "payments_settings": "Payments Settings", 62 | "default_credit_card": "Default Credit Card", 63 | "app_settings": "App Settings", 64 | "languages": "Languages", 65 | "english": "English", 66 | "help_support": "Help & Support", 67 | "register": "Register", 68 | "lets_start_with_register": "Let's Start with register!", 69 | "should_be_more_than_3_letters": "Should be more than 3 letters", 70 | "john_doe": "John Doe", 71 | "should_be_a_valid_email": "Should be a valid email", 72 | "should_be_more_than_6_letters": "Should be more than 6 letters", 73 | "password": "Password", 74 | "i_have_account_back_to_login": "I have account? Back to login", 75 | "multimarkets": "Multi-Markets", 76 | "tracking_order": "Tracking Order", 77 | "discover__explorer": "Discover & Explorer", 78 | "you_can_discover_markets": "You can discover markets & fastproduct arround you and choose you best meal after few minutes we prepare and delivere it for you", 79 | "reset_cart": "Reset Cart?", 80 | "cart": "Cart", 81 | "shopping_cart": "Shopping Cart", 82 | "verify_your_quantity_and_click_checkout": "Verify your quantity and click checkout", 83 | "lets_start_with_login": "Let's Start with Login!", 84 | "should_be_more_than_3_characters": "Should be more than 3 characters", 85 | "you_must_add_products_of_the_same_markets_choose_one": "You must add products of the same markets choose one markets only!", 86 | "reset_your_cart_and_order_meals_form_this_market": "Reset your cart and order meals form this market", 87 | "keep_your_old_meals_of_this_market": "Keep your old meals of this market", 88 | "reset": "Reset", 89 | "close": "Close", 90 | "application_preferences": "Application Preferences", 91 | "help__support": "Help & Support", 92 | "light_mode": "Light Mode", 93 | "dark_mode": "Dark Mode", 94 | "log_out": "Log out", 95 | "version": "Version", 96 | "dont_have_any_item_in_your_cart": "D'ont have any item in your cart", 97 | "start_exploring": "Start Exploring", 98 | "dont_have_any_item_in_the_notification_list": "D'ont have any item in the notification list", 99 | "payment_settings": "Payment Settings", 100 | "not_a_valid_number": "Not a valid number", 101 | "not_a_valid_date": "Not a valid date", 102 | "not_a_valid_cvc": "Not a valid CVC", 103 | "cancel": "Cancel", 104 | "save": "Save", 105 | "edit": "Edit", 106 | "not_a_valid_full_name": "Not a valid full name", 107 | "email_address": "Email Address", 108 | "not_a_valid_email": "Not a valid email", 109 | "not_a_valid_phone": "Not a valid phone", 110 | "not_a_valid_address": "Not a valid address", 111 | "not_a_valid_biography": "Not a valid biography", 112 | "your_biography": "Your biography", 113 | "your_address": "Your Address", 114 | "search": "Search", 115 | "recents_search": "Recents Search", 116 | "verify_your_internet_connection": "Verify your internet connection", 117 | "carts_refreshed_successfuly": "Carts refreshed successfuly", 118 | "the_product_was_removed_from_your_cart": "The {productName} was removed from your cart", 119 | "category_refreshed_successfuly": "Category refreshed successfuly", 120 | "notifications_refreshed_successfuly": "Notifications refreshed successfuly", 121 | "order_refreshed_successfuly": "Order refreshed successfuly", 122 | "orders_refreshed_successfuly": "Orders refreshed successfuly", 123 | "market_refreshed_successfuly": "Market refreshed successfuly", 124 | "profile_settings_updated_successfully": "Profile settings updated successfully", 125 | "payment_settings_updated_successfully": "Payment settings updated successfully", 126 | "tracking_refreshed_successfuly": "Tracking refreshed successfuly", 127 | "welcome": "Welcome", 128 | "wrong_email_or_password": "Wrong email or password", 129 | "addresses_refreshed_successfuly": "Addresses refreshed successfuly", 130 | "delivery_addresses": "Delivery Addresses", 131 | "add": "Add", 132 | "new_address_added_successfully": "New Address added successfully", 133 | "the_address_updated_successfully": "The address updated successfully", 134 | "long_press_to_edit_item_swipe_item_to_delete_it": "Long press to edit item, swipe item to delete it", 135 | "add_delivery_address": "Add Delivery Address", 136 | "home_address": "Home Address", 137 | "description": "Description", 138 | "hint_full_address": "12 Street, City 21663, Country", 139 | "full_address": "Full Address", 140 | "email_to_reset_password": "Email to reset password", 141 | "send_password_reset_link": "Send password reset link", 142 | "i_remember_my_password_return_to_login": "I remember my password return to login", 143 | "your_reset_link_has_been_sent_to_your_email": "Your reset link has been sent to your email", 144 | "error_verify_email_settings": "Error! Verify email settings", 145 | "guest": "Guest", 146 | "you_must_signin_to_access_to_this_section": "You must sign-in to access to this section", 147 | "how_would_you_rate_this_market_": "How would you rate this market ?", 148 | "tell_us_about_this_product": "Tell us about this product", 149 | "the_market_has_been_rated_successfully": "The market has been rated successfully", 150 | "the_product_has_been_rated_successfully": "The product has been rated successfully", 151 | "reviews_refreshed_successfully": "Reviews refreshed successfully!", 152 | "delivery_fee": "Delivery Fee", 153 | "order_status_changed": "Order status changed", 154 | "new_order_from_client": "New order from client", 155 | "shopping": "Shopping", 156 | "delivery_or_pickup": "Delivery or Pickup", 157 | "payment_card_updated_successfully": "Payment card updated successfully", 158 | "deliverable": "Deliverable", 159 | "not_deliverable": "Not Deliverable", 160 | "items": "Items", 161 | "delivery": "Delivery", 162 | "pickup": "Pickup", 163 | "closed": "Closed", 164 | "open": "Open", 165 | "km": "Km", 166 | "mi": "mi", 167 | "delivery_address": "Delivery Address", 168 | "current_location": "Current location", 169 | "delivery_address_removed_successfully": "Delivery Address removed successfully", 170 | "add_new_delivery_address": "Add new delivery address", 171 | "markets_near_to_your_current_location": "Markets near to your current location", 172 | "markets_near_to": "Markets near to", 173 | "near_to": "Near to", 174 | "near_to_your_current_location": "Near to your current location", 175 | "pickup_your_product_from_the_market": "Pickup your product from the market", 176 | "confirm_your_delivery_address": "Confirm your delivery address", 177 | "filter": "Filter", 178 | "clear": "Clear", 179 | "apply_filters": "Apply Filters", 180 | "opened_markets": "Opened Markets", 181 | "fields": "Fields", 182 | "this_product_was_added_to_cart": "This product was added to cart", 183 | "products_result": "Products result", 184 | "products_results": "Products Results", 185 | "markets_results": "Markets Results", 186 | "all": "All", 187 | "this_market_is_closed_": "This market is closed !", 188 | "unknown": "Unknown", 189 | "how_would_you_rate_this_market": "How would you rate this market ?", 190 | "click_on_the_stars_below_to_leave_comments": "Click on the stars below to leave comments", 191 | "click_to_confirm_your_address_and_pay_or_long_press": "Click to confirm your address and pay or Long press to edit your address", 192 | "visa_card": "Visa Card", 193 | "mastercard": "MasterCard", 194 | "paypal": "PayPal", 195 | "pay_on_pickup": "Pay on Pickup", 196 | "click_to_pay_with_your_visa_card": "Click to pay with your Visa Card", 197 | "click_to_pay_with_your_mastercard": "Click to pay with your MasterCard", 198 | "click_to_pay_with_your_paypal_account": "Click to pay with your PayPal account", 199 | "click_to_pay_cash_on_delivery": "Click to pay cash on delivery", 200 | "click_to_pay_on_pickup": "Click to pay on pickup", 201 | "this_email_account_exists": "This email account exists", 202 | "this_account_not_exist": "This account not exist", 203 | "card_number": "CARD NUMBER", 204 | "expiry_date": "EXPIRY DATE", 205 | "cvv": "CVV", 206 | "your_credit_card_not_valid": "Your credit card not valid", 207 | "number": "Number", 208 | "exp_date": "Exp Date", 209 | "cvc": "CVC", 210 | "completeYourProfileDetailsToContinue": "Complete your profile details to continue", 211 | "deliveryAddressOutsideTheDeliveryRangeOfThisMarkets": "Delivery address outside the delivery range of this markets.", 212 | "thisMarketNotSupportDeliveryMethod": "This market not support delivery method.", 213 | "oneOrMoreProductsInYourCartNotDeliverable": "One or more products in your cart not deliverable.", 214 | "deliveryMethodNotAllowed": "Delivery method not allowed!", 215 | "viewDetails": "View Details", 216 | "youDontHaveAnyOrder": "You don'/t have any order", 217 | "orderDetails": "Order Details", 218 | "order": "Order", 219 | "details": "Details", 220 | "canceled": "Canceled", 221 | "cancelOrder": "Cancel Order", 222 | "view": "View", 223 | "yes": "Yes", 224 | "areYouSureYouWantToCancelThisOrder": "Are you sure you want to cancel this order?", 225 | "orderThisorderidHasBeenCanceled": "Order: #{id} has been canceled", 226 | "clickOnTheProductToGetMoreDetailsAboutIt": "Click on the product to get more details about it", 227 | "tapAgainToLeave": "Tap again to leave", 228 | "favorites_refreshed_successfuly": "Favorites refreshed successfully", 229 | "faqsRefreshedSuccessfuly": "Faqs refreshed successfully", 230 | "thisProductWasAddedToFavorite": "This product was added to favorite", 231 | "thisProductWasRemovedFromFavorites": "This product was removed from favorites", 232 | "productRefreshedSuccessfuly": "Product refreshed successfully", 233 | "razorpayPayment": "RazorPay Payment", 234 | "razorpay": "RazorPay", 235 | "clickToPayWithRazorpayMethod": "Click to pay with RazorPay method", 236 | "products": "Products", 237 | "validCouponCode": "Valid Coupon", 238 | "invalidCouponCode": "Invalid Coupon", 239 | "haveCouponCode": "Have Coupon Code?", 240 | "messages": "Messages", 241 | "youDontHaveAnyConversations": "You don't have any conversations", 242 | "newMessageFrom": "New message from", 243 | "forMoreDetailsPleaseChatWithOurManagers": "For more details, please chat with our managers", 244 | "signinToChatWithOurManagers": "Sign-In to chat with our managers", 245 | "typeToStartChat": "Type to start chat", 246 | "makeItDefault": "Make it default", 247 | "notValidAddress": "Not valid address", 248 | "swipeLeftTheNotificationToDeleteOrReadUnreadIt": "Swipe left the notification to delete or read / unread it", 249 | "thisNotificationHasMarkedAsUnread": "This notification has marked as unread", 250 | "notificationWasRemoved": "Notification was removed", 251 | "thisNotificationHasMarkedAsRead": "This notification has marked as read", 252 | "free": "Free" 253 | } -------------------------------------------------------------------------------- /lib/l10n/intl_ko.arb: -------------------------------------------------------------------------------- 1 | { 2 | "search_for_markets_or_products": "검색", 3 | "top_markets": "Top 배달업소", 4 | "ordered_by_nearby_first": "내주변 주문", 5 | "trending_this_week": "이번주 트렌드", 6 | "double_click_on_the_product_to_add_it_to_the": "두번 클릭하면 장바구니에 저장됩니다", 7 | "product_categories": "음식 카테고리", 8 | "most_popular": "가장 인기있는 메뉴", 9 | "recent_reviews": "최근 리뷰", 10 | "login": "로그인", 11 | "skip": "스킵", 12 | "about": "소개", 13 | "submit": "제출", 14 | "verify": "확인", 15 | "select_your_preferred_languages": "언어 선택", 16 | "order_id": "주문 Id", 17 | "category": "카테고리", 18 | "checkout": "결제", 19 | "payment_mode": "결제 방식", 20 | "select_your_preferred_payment_mode": "결제방식을 선택 해주세요", 21 | "or_checkout_with": "Or 결제 With", 22 | "subtotal": "서브 합계", 23 | "total": "전체 합계", 24 | "confirm_payment": "결제 확인", 25 | "menu": "메뉴", 26 | "information": "정보", 27 | "featured_products": "추천 메뉴", 28 | "what_they_say": "What They Say ?", 29 | "favorite_products": "즐겨찾기", 30 | "options": "추가 메뉴", 31 | "select_options_to_add_them_on_the_product": "추가할 메뉴", 32 | "reviews": "리뷰", 33 | "quantity": "수량", 34 | "add_to_cart": "장바구니에 추가", 35 | "faq": "자주묻는질문", 36 | "help_supports": "헬프 & 지원", 37 | "app_language": "언어", 38 | "i_forgot_password": "비밀번호를 잊으셨나요 ?", 39 | "i_dont_have_an_account": "계정이 없으신가요?", 40 | "maps_explorer": "지도", 41 | "all_menu": "모든 메뉴", 42 | "longpress_on_the_product_to_add_suplements": "추가할 메뉴를 선택해주세요", 43 | "notifications": "알림", 44 | "confirmation": "확인", 45 | "your_order_has_been_successfully_submitted": "성공적으로 주문되었습니다!", 46 | "tax": "부가세", 47 | "my_orders": "내 주문", 48 | "profile": "프로필", 49 | "favorites": "즐겨찾기", 50 | "home": "Home", 51 | "payment_options": "결제 옵션", 52 | "cash_on_delivery": "현금 결제", 53 | "paypal_payment": "페이팔 결제", 54 | "recent_orders": "최근 주문", 55 | "settings": "설정", 56 | "profile_settings": "프로필 설정", 57 | "full_name": "성함", 58 | "email": "Email", 59 | "phone": "휴대폰번호", 60 | "address": "배달 주소", 61 | "payments_settings": "결제 설정", 62 | "default_credit_card": "디폴트 신용카드", 63 | "app_settings": "앱 설정", 64 | "languages": "언어", 65 | "english": "English", 66 | "help_support": "헬프 & 지원", 67 | "register": "가입하기", 68 | "lets_start_with_register": "가입후 시작하기!", 69 | "should_be_more_than_3_letters": "3자 이상이어야합니다", 70 | "john_doe": "John Doe", 71 | "should_be_a_valid_email": "이메일이 유효하지 않습니다", 72 | "should_be_more_than_6_letters": "6자 이상이어야합니다", 73 | "password": "비밀번호", 74 | "i_have_account_back_to_login": "계정이 있으신가요? 로그인", 75 | "multimarkets": "K-배달", 76 | "tracking_order": "추적 순서", 77 | "discover__explorer": "검색 & 탐색", 78 | "you_can_discover_markets": "주변의 배달업체를 발견하고 몇분 후 최고의 음식을 준비합니다", 79 | "reset_cart": "장바구니 리셋?", 80 | "cart": "장바구니", 81 | "shopping_cart": "장바구니", 82 | "verify_your_quantity_and_click_checkout": "수량 확인 및 결제 확인", 83 | "lets_start_with_login": "로그인 해주세요!", 84 | "should_be_more_than_3_characters": "3자 이상이어야합니다", 85 | "you_must_add_products_of_the_same_markets_choose_one": "You must add products of the same markets choose one markets only!", 86 | "reset_your_cart_and_order_meals_form_this_market": "Reset your cart and order meals form this market", 87 | "keep_your_old_meals_of_this_market": "Keep your old meals of this market", 88 | "reset": "리셋", 89 | "close": "닫기", 90 | "application_preferences": "앱 환경", 91 | "help__support": "헬프 & 지원", 92 | "light_mode": "라이트 모드", 93 | "dark_mode": "다크 모드", 94 | "log_out": "로그아웃", 95 | "version": "버젼", 96 | "dont_have_any_item_in_your_cart": "장바구니에 주문이 없습니다", 97 | "start_exploring": "탐색 시작", 98 | "dont_have_any_item_in_the_notification_list": "알림 리스트가 없습니다", 99 | "payment_settings": "결제 설정", 100 | "not_a_valid_number": "유효한 숫자가 아닙니다", 101 | "not_a_valid_date": "유효한 날짜가 아닙니다", 102 | "not_a_valid_cvc": "유효한 CVC가 아닙니다", 103 | "cancel": "취소", 104 | "save": "저장", 105 | "edit": "편집", 106 | "not_a_valid_full_name": "유효한 성함이 아닙니다", 107 | "email_address": "이메일 주소", 108 | "not_a_valid_email": "유효한 이메일이 아닙니다", 109 | "not_a_valid_phone": "유효한 전화번호가 아닙니다", 110 | "not_a_valid_address": "유효한 주소가 아닙니다", 111 | "not_a_valid_biography": "유효한 전기가 아닙니다", 112 | "your_biography": "당신의 전기는", 113 | "your_address": "귀하의 주소는", 114 | "search": "검색", 115 | "recents_search": "최근 검색", 116 | "verify_your_internet_connection": "인터넷 연결상태 확인", 117 | "carts_refreshed_successfuly": "장바구니가 갱신되었습니다", 118 | "the_product_was_removed_from_your_cart": "{productName} 가 장바구니에서 제가 되었습니다", 119 | "category_refreshed_successfuly": "카테고리가 갱신되었습니다", 120 | "notifications_refreshed_successfuly": "알림이 갱신되었습니다", 121 | "order_refreshed_successfuly": "주문이 갱신되었습니다", 122 | "orders_refreshed_successfuly": "주문이 갱신되었습니다", 123 | "market_refreshed_successfuly": "레스토랑이 갱신되었습니다", 124 | "profile_settings_updated_successfully": "프로필 설정이 업데이트되었습니다", 125 | "payment_settings_updated_successfully": "결제 설정이 업데이트되었습니다", 126 | "tracking_refreshed_successfuly": "추적이 갱신되었습니다", 127 | "welcome": "환영합니다", 128 | "wrong_email_or_password": "이메일 또는 비밀번호가 잘못되었습니다", 129 | "addresses_refreshed_successfuly": "주소가 성공적으로 갱신되었습니다", 130 | "delivery_addresses": "배달 주소", 131 | "add": "추가", 132 | "new_address_added_successfully": "새 주소가 성공적으로 추가되었습니다", 133 | "the_address_updated_successfully": "주소가 성공적으로 업데이트되었습니다", 134 | "long_press_to_edit_item_swipe_item_to_delete_it": "길게 누르면 항목을 편집하고 살짝 밀면 삭제됩니다", 135 | "add_delivery_address": "배송 주소 추가", 136 | "home_address": "집 주소", 137 | "description": "설명", 138 | "hint_full_address": "12 Street, City 21663, Country", 139 | "full_address": "전체 주소", 140 | "email_to_reset_password": "암호 재설정 이메일", 141 | "send_password_reset_link": "암호 재설정 링크 보내기", 142 | "i_remember_my_password_return_to_login": "비밀번호가 로그인으로 돌아가는 것을 기억합니다", 143 | "your_reset_link_has_been_sent_to_your_email": "재설정 링크가 이메일로 전송되었습니다", 144 | "error_verify_email_settings": "오류! 이메일 설정 확인", 145 | "guest": "게스트", 146 | "you_must_signin_to_access_to_this_section": "이 섹션에 액세스하려면 로그인해야합니다", 147 | "how_would_you_rate_this_market_": "이 시장을 어떻게 평가 하시겠습니까?", 148 | "tell_us_about_this_product": "이 제품에 대해 알려주십시오", 149 | "the_market_has_been_rated_successfully": "시장이 성공적으로 평가되었습니다", 150 | "the_product_has_been_rated_successfully": "제품이 성공적으로 평가되었습니다", 151 | "reviews_refreshed_successfully": "검토가 성공적으로 갱신되었습니다!", 152 | "delivery_fee": "배송료", 153 | "order_status_changed": "주문 상태가 변경되었습니다", 154 | "new_order_from_client": "클라이언트의 새로운 주문", 155 | "shopping": "쇼핑", 156 | "delivery_or_pickup": "배송 또는 픽업", 157 | "payment_card_updated_successfully": "결제 카드가 성공적으로 업데이트되었습니다", 158 | "deliverable": "전달 가능", 159 | "not_deliverable": "제공 할 수 없음", 160 | "items": "항목", 161 | "delivery": "배달", 162 | "pickup": "픽업", 163 | "closed": "폐쇄 됨", 164 | "open": "열기", 165 | "km": "Km", 166 | "mi":"미", 167 | "delivery_address": "배달 주소", 168 | "current_location": "현재 위치", 169 | "delivery_address_removed_successfully": "배달 주소가 성공적으로 제거되었습니다", 170 | "add_new_delivery_address": "새 배달 주소 추가", 171 | "markets_near_to_your_current_location": "현재 위치에 가까운 시장", 172 | "markets_near_to": "가까운 시장", 173 | "near_to": "근처에", 174 | "near_to_your_current_location": "현재 위치 근처", 175 | "pickup_your_product_from_the_market": "시장에서 제품 픽업", 176 | "confirm_your_delivery_address": "배송 주소 확인", 177 | "filter": "필터", 178 | "clear": "클리어", 179 | "apply_filters": "필터 적용", 180 | "opened_markets": "열린 시장", 181 | "fields": "필드", 182 | "this_product_was_added_to_cart": "이 제품은 장바구니에 추가되었습니다", 183 | "products_result": "제품 결과", 184 | "products_results": "제품 결과", 185 | "markets_results": "시장 결과", 186 | "all": "All", 187 | "this_market_is_closed_": "This market is closed !", 188 | "unknown": "Unknown", 189 | "how_would_you_rate_this_market": "How would you rate this market ?", 190 | "click_on_the_stars_below_to_leave_comments": "Click on the stars below to leave comments", 191 | "click_to_confirm_your_address_and_pay_or_long_press": "Click to confirm your address and pay or Long press to edit your address", 192 | "visa_card": "Visa Card", 193 | "mastercard": "MasterCard", 194 | "paypal": "PayPal", 195 | "pay_on_pickup": "Pay on Pickup", 196 | "click_to_pay_with_your_visa_card": "Click to pay with your Visa Card", 197 | "click_to_pay_with_your_mastercard": "Click to pay with your MasterCard", 198 | "click_to_pay_with_your_paypal_account": "Click to pay with your PayPal account", 199 | "click_to_pay_cash_on_delivery": "Click to pay cash on delivery", 200 | "click_to_pay_on_pickup": "Click to pay on pickup", 201 | "this_email_account_exists": "This email account exists", 202 | "this_account_not_exist": "This account not exist", 203 | "card_number": "CARD NUMBER", 204 | "expiry_date": "EXPIRY DATE", 205 | "cvv": "CVV", 206 | "your_credit_card_not_valid": "Your credit card not valid", 207 | "number": "Number", 208 | "exp_date": "Exp Date", 209 | "cvc": "CVC", 210 | "completeYourProfileDetailsToContinue": "Complete your profile details to continue", 211 | "deliveryAddressOutsideTheDeliveryRangeOfThisMarkets": "Delivery address outside the delivery range of this markets.", 212 | "thisMarketNotSupportDeliveryMethod": "This market not support delivery method.", 213 | "oneOrMoreProductsInYourCartNotDeliverable": "One or more products in your cart not deliverable.", 214 | "deliveryMethodNotAllowed": "Delivery method not allowed!", 215 | "viewDetails": "View Details", 216 | "youDontHaveAnyOrder": "You don'/t have any order", 217 | "orderDetails": "Order Details", 218 | "order": "Order", 219 | "details": "Details", 220 | "canceled": "Canceled", 221 | "cancelOrder": "Cancel Order", 222 | "view": "View", 223 | "yes": "Yes", 224 | "areYouSureYouWantToCancelThisOrder": "Are you sure you want to cancel this order?", 225 | "orderThisorderidHasBeenCanceled": "Order: #{id} has been canceled", 226 | "clickOnTheProductToGetMoreDetailsAboutIt": "Click on the product to get more details about it", 227 | "tapAgainToLeave": "Tap again to leave", 228 | "favorites_refreshed_successfuly": "Favorites refreshed successfully", 229 | "faqsRefreshedSuccessfuly": "Faqs refreshed successfully", 230 | "thisProductWasAddedToFavorite": "This product was added to favorite", 231 | "thisProductWasRemovedFromFavorites": "This product was removed from favorites", 232 | "productRefreshedSuccessfuly": "Product refreshed successfully", 233 | "razorpayPayment": "RazorPay Payment", 234 | "razorpay": "RazorPay", 235 | "clickToPayWithRazorpayMethod": "Click to pay with RazorPay method", 236 | "products": "Products", 237 | "validCouponCode": "Valid Coupon", 238 | "invalidCouponCode": "Invalid Coupon", 239 | "haveCouponCode": "Have Coupon Code?", 240 | "messages": "Messages", 241 | "youDontHaveAnyConversations": "You don't have any conversations", 242 | "newMessageFrom": "New message from", 243 | "forMoreDetailsPleaseChatWithOurManagers": "For more details, please chat with our managers", 244 | "signinToChatWithOurManagers": "Sign-In to chat with our managers", 245 | "typeToStartChat": "Type to start chat", 246 | "makeItDefault": "Make it default", 247 | "notValidAddress": "Not valid address", 248 | "swipeLeftTheNotificationToDeleteOrReadUnreadIt": "Swipe left the notification to delete or read / unread it", 249 | "thisNotificationHasMarkedAsUnread": "This notification has marked as unread", 250 | "notificationWasRemoved": "Notification was removed", 251 | "thisNotificationHasMarkedAsRead": "This notification has marked as read", 252 | "free": "Free" 253 | } -------------------------------------------------------------------------------- /lib/l10n/intl_pt_BR.arb: -------------------------------------------------------------------------------- 1 | { 2 | "search_for_markets_or_products": "Pesquise mercados ou produtos", 3 | "top_markets": "Principais mercados", 4 | "ordered_by_nearby_first": "Ordenado por Perto primeiro", 5 | "trending_this_week": "Tendências desta semana", 6 | "product_categories": "Categorias de Produtos", 7 | "most_popular": "Mais popular", 8 | "recent_reviews": "Comentários recentes", 9 | "login": "Conecte-se", 10 | "skip": "Pular", 11 | "about": "Sobre", 12 | "submit": "Enviar", 13 | "verify": "Verificar", 14 | "select_your_preferred_languages": "Selecione seus idiomas preferidos", 15 | "order_id": "ID do pedido", 16 | "category": "Categoria", 17 | "checkout": "Verificação de saída", 18 | "payment_mode": "Modo de pagamento", 19 | "select_your_preferred_payment_mode": "Selecione seu modo de pagamento preferido", 20 | "or_checkout_with": "Ou check-out com", 21 | "subtotal": "Subtotal", 22 | "total": "Total", 23 | "confirm_payment": "Confirme o pagamento", 24 | "information": "Em formação", 25 | "featured_products": "produtos em destaque", 26 | "what_they_say": "O que eles disseram ?", 27 | "favorite_products": "Produtos Favoritos", 28 | "options": "Opções", 29 | "select_options_to_add_them_on_the_product": "Selecione opções para adicioná-los ao produto", 30 | "reviews": "Avaliações", 31 | "quantity": "Quantidade", 32 | "add_to_cart": "Adicionar ao carrinho", 33 | "faq": "Perguntas frequentes", 34 | "help_supports": "Ajuda e Suporte", 35 | "app_language": "Idioma do aplicativo", 36 | "i_forgot_password": "Esqueci minha senha?", 37 | "i_dont_have_an_account": "Eu não tenho uma conta?", 38 | "maps_explorer": "Maps Explorer", 39 | "all_product": "Todos os produtos", 40 | "notifications": "Notificações", 41 | "confirmation": "Confirmação", 42 | "your_order_has_been_successfully_submitted": "Seu pedido foi enviado com sucesso!", 43 | "tax": "Imposto", 44 | "my_orders": "minhas ordens", 45 | "profile": "Perfil", 46 | "favorites": "Favoritos", 47 | "home": "Casa", 48 | "payment_options": "Opções de pagamento", 49 | "cash_on_delivery": "Dinheiro na entrega", 50 | "paypal_payment": "Pagamento PayPal", 51 | "recent_orders": "pedidos recentes", 52 | "settings": "Definições", 53 | "profile_settings": "Configurações de perfil", 54 | "full_name": "Nome completo", 55 | "email": "O email", 56 | "phone": "telefone", 57 | "address": "Endereço", 58 | "payments_settings": "Configurações de pagamentos", 59 | "default_credit_card": "Cartão de crédito padrão", 60 | "app_settings": "Configurações do aplicativo", 61 | "languages": "línguas", 62 | "english": "Inglês", 63 | "help_support": "Ajuda e Suporte", 64 | "register": "Registro", 65 | "lets_start_with_register": "Vamos começar com o registro!", 66 | "should_be_more_than_3_letters": "Deve ter mais de 3 letras", 67 | "john_doe": "John Doe", 68 | "should_be_a_valid_email": "Deve ser um email válido", 69 | "should_be_more_than_6_letters": "Deve ter mais de 6 letras", 70 | "password": "Senha", 71 | "i_have_account_back_to_login": "Eu tenho conta Volte ao login", 72 | "tracking_order": "Ordem de rastreamento", 73 | "discover__explorer": "Discover & Explorer", 74 | "you_can_discover_markets": "Você pode descobrir mercados e lojas ao seu redor e escolher sua melhor refeição após alguns minutos, nós preparamos e entregamos para você", 75 | "reset_cart": "Redefinir carrinho?", 76 | "cart": "Carrinho", 77 | "shopping_cart": "Carrinho de compras", 78 | "verify_your_quantity_and_click_checkout": "Verifique sua quantidade e clique em check-out", 79 | "lets_start_with_login": "Vamos começar com o login!", 80 | "should_be_more_than_3_characters": "Deve ter mais de 3 caracteres", 81 | "you_must_add_products_of_the_same_markets_choose_one": "Você deve adicionar produtos dos mesmos mercados, escolher apenas um mercado!", 82 | "reset_your_cart_and_order_meals_form_this_market": "Redefina seu carrinho e solicite refeições deste mercado", 83 | "keep_your_old_meals_of_this_market": "Mantenha as suas refeições antigas deste mercado", 84 | "reset": "Redefinir", 85 | "close": "Fechar", 86 | "application_preferences": "Preferências do aplicativo", 87 | "help__support": "Ajuda e Suporte", 88 | "light_mode": "Modo de luz", 89 | "dark_mode": "Modo escuro", 90 | "log_out": "Sair", 91 | "version": "Versão", 92 | "dont_have_any_item_in_your_cart": "Não tem nenhum item no seu carrinho", 93 | "start_exploring": "Comece a explorar", 94 | "dont_have_any_item_in_the_notification_list": "Não possui nenhum item na lista de notificações", 95 | "payment_settings": "Configurações de pagamento", 96 | "not_a_valid_number": "Não é um número válido", 97 | "not_a_valid_date": "Data não válida", 98 | "not_a_valid_cvc": "CVC inválido", 99 | "cancel": "Cancelar", 100 | "save": "Salve", 101 | "edit": "Editar", 102 | "not_a_valid_full_name": "Não é um nome completo válido", 103 | "email_address": "Endereço de e-mail", 104 | "not_a_valid_email": "Não é um email válido", 105 | "not_a_valid_phone": "Não é um telefone válido", 106 | "not_a_valid_address": "Endereço inválido", 107 | "not_a_valid_biography": "Biografia não válida", 108 | "your_biography": "Sua biografia", 109 | "your_address": "Seu endereço", 110 | "search": "Procurar", 111 | "recents_search": "Pesquisa recente", 112 | "verify_your_internet_connection": "Verifique sua conexão com a Internet", 113 | "carts_refreshed_successfuly": "Carrinhos atualizados com sucesso", 114 | "the_product_was_removed_from_your_cart": "O {productName} foi removido do seu carrinho", 115 | "category_refreshed_successfuly": "Categoria atualizada com sucesso", 116 | "notifications_refreshed_successfuly": "Notificações atualizadas com sucesso", 117 | "order_refreshed_successfuly": "Pedido atualizado com sucesso", 118 | "orders_refreshed_successfuly": "Pedidos atualizados com sucesso", 119 | "market_refreshed_successfuly": "Mercado atualizado com sucesso", 120 | "profile_settings_updated_successfully": "Configurações de perfil atualizadas com sucesso", 121 | "payment_settings_updated_successfully": "Configurações de pagamento atualizadas com sucesso", 122 | "tracking_refreshed_successfuly": "Rastreamento atualizado com sucesso", 123 | "welcome": "Bem-vinda", 124 | "wrong_email_or_password": "e-mail ou senha incorretos", 125 | "addresses_refreshed_successfuly": "Endereços atualizados com sucesso", 126 | "delivery_addresses": "Endereços de entrega", 127 | "add": "Adicionar", 128 | "new_address_added_successfully": "Novo endereço adicionado com sucesso", 129 | "the_address_updated_successfully": "O endereço foi atualizado com sucesso", 130 | "long_press_to_edit_item_swipe_item_to_delete_it": "Pressione e segure para editar o item, deslize o item para excluí-lo", 131 | "add_delivery_address": "Adicionar endereço de entrega", 132 | "home_address": "Endereço residencial", 133 | "description": "Descrição", 134 | "hint_full_address": "12 Street, Cidade 21663, País", 135 | "full_address": "Endereço completo", 136 | "email_to_reset_password": "E-mail para redefinir a senha", 137 | "send_password_reset_link": "Enviar Link", 138 | "i_remember_my_password_return_to_login": "Lembro-me da minha senha voltar ao login", 139 | "your_reset_link_has_been_sent_to_your_email": "Seu link de redefinição foi enviado para seu e-mail", 140 | "error_verify_email_settings": "Erro! Verificar configurações de email", 141 | "guest": "Hóspede", 142 | "you_must_signin_to_access_to_this_section": "Você deve fazer login para acessar esta seção", 143 | "tell_us_about_this_market": "Conte-nos sobre este mercado", 144 | "how_would_you_rate_this_market_": "Como você classificaria esse mercado?", 145 | "tell_us_about_this_product": "Nos conte sobre este produto", 146 | "the_market_has_been_rated_successfully": "O mercado foi avaliado com sucesso", 147 | "the_product_has_been_rated_successfully": "O produto foi classificado com sucesso", 148 | "reviews_refreshed_successfully": "Comentários atualizados com sucesso!", 149 | "delivery_fee": "Taxa de entrega", 150 | "order_status_changed": "Status do pedido alterado", 151 | "new_order_from_client": "Novo pedido do cliente", 152 | "shopping": "Compras", 153 | "delivery_or_pickup": "Entrega ou retirada", 154 | "payment_card_updated_successfully": "Cartão de pagamento atualizado com sucesso", 155 | "deliverable": "Entregável", 156 | "not_deliverable": "Não entregue", 157 | "items": "Itens", 158 | "delivery": "Entrega", 159 | "pickup": "Pegar", 160 | "closed": "Fechadas", 161 | "open": "Aberto", 162 | "km": "Km", 163 | "mi": "mi", 164 | "delivery_address": "Endereço de entrega", 165 | "current_location": "Localização atual", 166 | "delivery_address_removed_successfully": "Endereço de entrega removido com sucesso", 167 | "add_new_delivery_address": "Adicionar novo endereço de entrega", 168 | "markets_near_to_your_current_location": "Mercados próximos à sua localização atual", 169 | "markets_near_to": "Mercados próximos a", 170 | "near_to": "Perto de", 171 | "near_to_your_current_location": "Perto da sua localização atual", 172 | "pickup_your_product_from_the_market": "Retire seu produto do mercado", 173 | "confirm_your_delivery_address": "Confirme seu endereço de entrega", 174 | "filter": "Filtro", 175 | "clear": "Claro", 176 | "apply_filters": "Aplicar filtros", 177 | "opened_markets": "Mercados Abertos", 178 | "fields": "Campos", 179 | "this_product_was_added_to_cart": "Este produto foi adicionado ao carrinho", 180 | "products_result": "Resultado dos produtos", 181 | "products_results": "Resultados dos produtos", 182 | "markets_results": "Resultados de Mercados", 183 | "all": "Todos", 184 | "this_market_is_closed_": "Este mercado está fechado!", 185 | "unknown": "Desconhecido", 186 | "how_would_you_rate_this_market": "Como você classificaria esse mercado?", 187 | "click_on_the_stars_below_to_leave_comments": "Clique nas estrelas abaixo para deixar comentários", 188 | "click_to_confirm_your_address_and_pay_or_long_press": "Clique para confirmar seu endereço e pagar ou pressione e segure para editar seu endereço", 189 | "visa_card": "Cartão Visa", 190 | "mastercard": "MasterCard", 191 | "paypal": "PayPal", 192 | "pay_on_pickup": "Pagar na retirada", 193 | "click_to_pay_with_your_visa_card": "Clique para pagar com seu cartão Visa", 194 | "click_to_pay_with_your_mastercard": "Clique para pagar com seu MasterCard", 195 | "click_to_pay_with_your_paypal_account": "Clique para pagar com sua conta do PayPal", 196 | "click_to_pay_cash_on_delivery": "Clique para pagar em dinheiro na entrega", 197 | "click_to_pay_on_pickup": "Clique para pagar na retirada", 198 | "this_email_account_exists": "Esta conta de email existe", 199 | "this_account_not_exist": "Esta conta não existe", 200 | "card_number": "NÚMERO DO CARTÃO", 201 | "expiry_date": "DATA DE VALIDADE", 202 | "cvv": "CVV", 203 | "your_credit_card_not_valid": "O seu cartão de crédito não é válido", 204 | "number": "Número", 205 | "exp_date": "Data de validade", 206 | "cvc": "CVC", 207 | "completeYourProfileDetailsToContinue": "Preencha os detalhes do seu perfil para continuar", 208 | "deliveryAddressOutsideTheDeliveryRangeOfThisMarkets": "Endereço de entrega fora da faixa de entrega desses mercados.", 209 | "thisMarketNotSupportDeliveryMethod": "Este mercado não suporta o método de entrega.", 210 | "oneOrMoreProductsInYourCartNotDeliverable": "Um ou mais produtos no seu carrinho não podem ser entregues.", 211 | "deliveryMethodNotAllowed": "Método de entrega não permitido!", 212 | "viewDetails": "Ver detalhes", 213 | "youDontHaveAnyOrder": "Você não tem nenhum pedido", 214 | "orderDetails": "detalhes do pedido", 215 | "order": "Ordem", 216 | "details": "Detalhes", 217 | "canceled": "Cancelado", 218 | "cancelOrder": "Cancelar pedido", 219 | "view": "Visão", 220 | "yes": "sim", 221 | "areYouSureYouWantToCancelThisOrder": "Tem certeza de que deseja cancelar este pedido?", 222 | "orderThisorderidHasBeenCanceled": "Pedido: #{id} foi cancelado", 223 | "clickOnTheProductToGetMoreDetailsAboutIt": "Clique no produto para obter mais detalhes sobre ele", 224 | "tapAgainToLeave": "Tap again to leave", 225 | "favorites_refreshed_successfuly": "Favorites refreshed successfully", 226 | "faqsRefreshedSuccessfuly": "Faqs refreshed successfully", 227 | "thisProductWasAddedToFavorite": "This product was added to favorite", 228 | "thisProductWasRemovedFromFavorites": "This product was removed from favorites", 229 | "productRefreshedSuccessfuly": "Product refreshed successfully", 230 | "razorpayPayment": "RazorPay Payment", 231 | "razorpay": "RazorPay", 232 | "clickToPayWithRazorpayMethod": "Click to pay with RazorPay method", 233 | "validCouponCode": "Valid Coupon", 234 | "invalidCouponCode": "Invalid Coupon", 235 | "products": "Products", 236 | "haveCouponCode": "Have Coupon Code?", 237 | "messages": "Messages", 238 | "youDontHaveAnyConversations": "You don't have any conversations", 239 | "newMessageFrom": "New message from", 240 | "forMoreDetailsPleaseChatWithOurManagers": "For more details, please chat with our managers", 241 | "signinToChatWithOurManagers": "Sign-In to chat with our managers", 242 | "typeToStartChat": "Type to start chat", 243 | "makeItDefault": "Make it default", 244 | "notValidAddress": "Not valid address", 245 | "swipeLeftTheNotificationToDeleteOrReadUnreadIt": "Swipe left the notification to delete or read / unread it", 246 | "thisNotificationHasMarkedAsUnread": "This notification has marked as unread", 247 | "notificationWasRemoved": "Notification was removed", 248 | "thisNotificationHasMarkedAsRead": "This notification has marked as read", 249 | "free": "Free" 250 | } -------------------------------------------------------------------------------- /lib/l10n/intl_zh_CN.arb: -------------------------------------------------------------------------------- 1 | { 2 | "kegel": "凯格尔", 3 | "level": "等级", 4 | "day": "天", 5 | "learn": "学习", 6 | "mine": "我的", 7 | "settings": "设置", 8 | "tense": "秒收紧", 9 | "relax": "秒放松", 10 | "excercises": "锻炼", 11 | "start": "开始", 12 | "skip": "跳过", 13 | "next": "下一个", 14 | "s": "秒", 15 | "completed": "已完成", 16 | "time": "时间", 17 | "doing_kegel_3_times": "每天做3次凯格尔运动可以帮你将效果最大 化。", 18 | "continue": "继续", 19 | "do_it_again": "再来一次", 20 | "how_do_you_feel": "感受如何", 21 | "hard": "有点难", 22 | "just_right": "刚刚好", 23 | "easy": "简单", 24 | "reminders": "提醒", 25 | "am": "上午", 26 | "pm": "下午", 27 | "add_reminder": "添加得醒", 28 | "cancel": "取消", 29 | "done": "完成", 30 | "reminder": "提醒", 31 | "quit": "放弃", 32 | "come_back_in_30_mins": "30分钟后回来", 33 | "about_kegel": "关于凯格尔", 34 | "how_to_do": "怎么做", 35 | "benefits_for_men": "对男性的好处", 36 | "benefits_for_women": "对女性的好处", 37 | "whats_kegel": "什么是凯格尔?", 38 | "what_are_the_benefits": "有什么好处?", 39 | "can_i_do_kegel": "我可以做凯格尔运动吗?", 40 | "who_is_not_suitable": "凯格尔运动不适合谁?", 41 | "how_to_do_kegel": "怎么做凯格尔运动?", 42 | "how_to_find_pelvic": "怎样找到骨盆底肌?", 43 | "please_note": "请注意", 44 | "disclaimer": "免责声明", 45 | "training": "锻炼", 46 | "total": "总", 47 | "duration": "时间", 48 | "days": "天数", 49 | "min": "分钟", 50 | "calendar": "日历", 51 | "history": "历史", 52 | "sound_options": "声音选项", 53 | "vibration": "振动", 54 | "voice_guide": "语音引导", 55 | "general_settings": "一般设置", 56 | "theme": "主题", 57 | "purple": "紫色", 58 | "blue": "蓝色", 59 | "green": "绿色", 60 | "pink": "粉色", 61 | "gender": "性别", 62 | "female": "女性", 63 | "male": "男性", 64 | "language_options": "语言选项", 65 | "reset_progress": "重置进度", 66 | "day_prefix_for_chinese": "第", 67 | "day_suffix_for_chinese": "天" 68 | } -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter/services.dart'; 5 | import 'package:global_configuration/global_configuration.dart'; 6 | import 'package:path/path.dart'; 7 | import './app.dart'; 8 | import 'package:device_preview/device_preview.dart'; 9 | import 'package:sqflite/sqflite.dart'; 10 | 11 | void main() async { 12 | WidgetsFlutterBinding.ensureInitialized(); 13 | GlobalConfiguration().loadFromAsset("configurations"); 14 | // var databasesPath = await getDatabasesPath(); 15 | // var path = join(databasesPath, "kegel.db"); 16 | // print("************************"); 17 | // print("dbPath: $databasesPath"); 18 | 19 | // // Check if the database exists 20 | // var exists = await databaseExists(path); 21 | 22 | // if (!exists) { 23 | // // Should happen only the first time you launch your application 24 | // print("Creating new copy from asset"); 25 | 26 | // // Make sure the parent directory exists 27 | // try { 28 | // await Directory(dirname(path)).create(recursive: true); 29 | // } catch (_) {} 30 | 31 | // // Copy from asset 32 | // ByteData data = await rootBundle.load(join("assets", "kegel.db")); 33 | // List bytes = 34 | // data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); 35 | 36 | // // Write and flush the bytes written 37 | // await File(path).writeAsBytes(bytes, flush: true); 38 | // } else { 39 | // print("Opening existing database"); 40 | // } 41 | // // // open the database 42 | // var db = await openDatabase(path, readOnly: true); 43 | // var list = 44 | // await db.query('ex_schedule', columns: ['id', 'sex', 'level', 'day']); 45 | // print(list); 46 | runApp( 47 | DevicePreview( 48 | enabled: false, 49 | builder: (_) => App(), 50 | ), 51 | ); 52 | } 53 | -------------------------------------------------------------------------------- /lib/pages/CanKegel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CanKegelWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const CanKegelWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _CanKegelWidget createState() => _CanKegelWidget(); 9 | } 10 | 11 | class _CanKegelWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "Can I do Kegel?", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "You can benefit from Kegel exercises. if you:", 36 | style: Theme.of(context).textTheme.headline6, 37 | ), 38 | SizedBox( 39 | height: 40, 40 | ), 41 | Text( 42 | "- Experience erectile dysfunction.", 43 | style: Theme.of(context).textTheme.headline6, 44 | ), 45 | SizedBox( 46 | height: 40, 47 | ), 48 | Text( 49 | "- Frequent or urgent urination.", 50 | style: Theme.of(context).textTheme.headline6, 51 | ), 52 | SizedBox( 53 | height: 40, 54 | ), 55 | Text( 56 | "- Suffer the symptoms of prostatitis.", 57 | style: Theme.of(context).textTheme.headline6, 58 | ), 59 | SizedBox( 60 | height: 40, 61 | ), 62 | Text( 63 | "- Dribble after urination.", 64 | style: Theme.of(context).textTheme.headline6, 65 | ), 66 | SizedBox( 67 | height: 40, 68 | ), 69 | Center( 70 | child: Image.asset( 71 | 'assets/img/ic_tip_1.png', 72 | width: 110, 73 | ), 74 | ), 75 | SizedBox( 76 | height: 60, 77 | ), 78 | TextButton( 79 | onPressed: () { 80 | Navigator.pop(context); 81 | }, 82 | child: Container( 83 | decoration: BoxDecoration( 84 | borderRadius: BorderRadius.circular(40), 85 | color: Color(0xFFFFF2F0), 86 | ), 87 | padding: const EdgeInsets.all(10.0), 88 | child: SizedBox( 89 | width: 340, 90 | height: 40, 91 | child: Center( 92 | child: Text( 93 | 'Got it', 94 | ), 95 | ), 96 | ), 97 | ), 98 | ), 99 | SizedBox( 100 | height: 30, 101 | ), 102 | ], 103 | ), 104 | ), 105 | ); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /lib/pages/CompleteExerciseWidget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CompleteExerciseWidget extends StatefulWidget { 4 | @override 5 | _CompleteExerciseWidgetState createState() => _CompleteExerciseWidgetState(); 6 | } 7 | 8 | class _CompleteExerciseWidgetState extends State { 9 | @override 10 | Widget build(BuildContext context) { 11 | return Scaffold( 12 | appBar: AppBar( 13 | elevation: 0, 14 | leading: IconButton( 15 | icon: Icon( 16 | Icons.arrow_back_ios, 17 | color: Colors.white, 18 | ), 19 | onPressed: () {}, 20 | ), 21 | ), 22 | backgroundColor: Theme.of(context).primaryColor, 23 | body: SingleChildScrollView( 24 | child: Align( 25 | alignment: Alignment.center, 26 | child: Column( 27 | crossAxisAlignment: CrossAxisAlignment.center, 28 | mainAxisAlignment: MainAxisAlignment.center, 29 | children: [ 30 | Text( 31 | "Day 2", 32 | style: TextStyle( 33 | color: Colors.white, 34 | fontSize: 35, 35 | fontWeight: FontWeight.bold, 36 | ), 37 | ), 38 | SizedBox( 39 | height: 5, 40 | ), 41 | Text( 42 | "Completed 1 time", 43 | style: TextStyle( 44 | color: Colors.white, 45 | fontSize: 25, 46 | fontWeight: FontWeight.bold, 47 | ), 48 | ), 49 | SizedBox( 50 | height: 30, 51 | ), 52 | ], 53 | ), 54 | ), 55 | ), 56 | ); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/pages/DayExercise.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DayExerciseWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const DayExerciseWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _DayExerciseWidgetState createState() => _DayExerciseWidgetState(); 9 | } 10 | 11 | class _DayExerciseWidgetState extends State { 12 | final items = List.generate(5, (i) => "Item $i"); 13 | int selExe = 0; 14 | 15 | @override 16 | void initState() { 17 | super.initState(); 18 | } 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Scaffold( 23 | appBar: AppBar( 24 | leading: IconButton( 25 | onPressed: () { 26 | Navigator.of(context).pushReplacementNamed('/Pages', arguments: 0); 27 | }, 28 | icon: Icon( 29 | Icons.arrow_back_ios, 30 | ), 31 | ), 32 | backgroundColor: Colors.transparent, 33 | iconTheme: IconThemeData( 34 | color: Colors.black38, //change your color here 35 | ), 36 | elevation: 0, 37 | centerTitle: true, 38 | title: Text('Level 1', 39 | style: TextStyle( 40 | color: Colors.black38, 41 | fontSize: 25, 42 | )), 43 | ), 44 | bottomNavigationBar: BottomAppBar( 45 | color: Colors.white, 46 | child: Container( 47 | margin: EdgeInsets.symmetric( 48 | horizontal: 20, 49 | vertical: 10, 50 | ), 51 | height: 50, 52 | child: RaisedButton( 53 | shape: RoundedRectangleBorder( 54 | borderRadius: BorderRadius.circular(30.0), 55 | //side: BorderSide(color: Colors.red), 56 | ), 57 | onPressed: () { 58 | Navigator.of(context) 59 | .pushReplacementNamed('/Exercise', arguments: 0); 60 | }, 61 | color: Theme.of(context).primaryColor, 62 | textColor: Colors.white, 63 | child: Text( 64 | "START", //.toUpperCase(), 65 | style: TextStyle(fontSize: 20), 66 | ), 67 | ), 68 | ), 69 | ), 70 | body: Stack( 71 | alignment: AlignmentDirectional.topCenter, 72 | children: [ 73 | ListView( 74 | primary: true, 75 | children: [ 76 | ListView.separated( 77 | padding: EdgeInsets.only(top: 170, bottom: 50), 78 | scrollDirection: Axis.vertical, 79 | shrinkWrap: true, 80 | primary: false, 81 | itemCount: items.length, 82 | separatorBuilder: (context, index) { 83 | return SizedBox(height: 15); 84 | }, 85 | itemBuilder: (context, index) { 86 | return Container( 87 | margin: EdgeInsets.symmetric( 88 | horizontal: 20, 89 | ), 90 | padding: const EdgeInsets.symmetric(horizontal: 5.0), 91 | decoration: BoxDecoration( 92 | color: Colors.white, 93 | borderRadius: BorderRadius.circular(20), 94 | ), 95 | child: ListTile( 96 | leading: Container( 97 | padding: EdgeInsets.all(5), 98 | decoration: BoxDecoration( 99 | borderRadius: BorderRadius.circular(15), 100 | color: selExe == index 101 | ? Colors.blue[50] 102 | : Colors.yellow[50], 103 | ), 104 | child: Icon( 105 | selExe == index ? Icons.graphic_eq : Icons.bolt, 106 | size: 30, 107 | color: selExe == index 108 | ? Colors.blue[400] 109 | : Colors.yellow[900], 110 | ), 111 | ), 112 | title: Text( 113 | '3" tense, 3" relax', 114 | style: Theme.of(context).textTheme.headline6, 115 | ), 116 | subtitle: Text( 117 | 'x10', 118 | style: Theme.of(context).textTheme.subtitle1, 119 | ), 120 | ), 121 | ); 122 | }, 123 | ), 124 | ], 125 | ), 126 | Container( 127 | color: Colors.grey[50], 128 | height: 170, 129 | child: Column( 130 | children: [ 131 | Container( 132 | margin: EdgeInsets.symmetric(horizontal: 10, vertical: 10), 133 | child: Text( 134 | 'Day 1', 135 | style: TextStyle( 136 | fontSize: 35, 137 | fontWeight: FontWeight.bold, 138 | ), 139 | ), 140 | ), 141 | Container( 142 | padding: EdgeInsets.all(8), 143 | width: 110, 144 | decoration: BoxDecoration( 145 | color: Colors.white, 146 | borderRadius: BorderRadius.circular(26), 147 | ), 148 | child: Row( 149 | mainAxisAlignment: MainAxisAlignment.center, 150 | children: [ 151 | Icon( 152 | Icons.schedule, 153 | color: Colors.black38, 154 | size: 20, 155 | ), 156 | SizedBox( 157 | width: 5, 158 | ), 159 | Text( 160 | '23:00', 161 | style: TextStyle( 162 | color: Colors.black38, 163 | fontSize: 18, 164 | ), 165 | ), 166 | ], 167 | ), 168 | ), 169 | Padding( 170 | padding: const EdgeInsets.symmetric(horizontal: 10), 171 | child: ListTile( 172 | title: Text( 173 | //S.of(context).profile_settings, 174 | 'Exercises', 175 | style: TextStyle( 176 | color: Colors.black, 177 | fontSize: 20, 178 | fontWeight: FontWeight.bold, 179 | ), 180 | ), 181 | trailing: Wrap( 182 | spacing: 5, // space between two icons 183 | children: [ 184 | Icon( 185 | Icons.content_copy, 186 | color: Colors.black38, 187 | size: 18, 188 | ), // icon-1 189 | Text( 190 | '40', 191 | style: TextStyle( 192 | color: Colors.black38, 193 | fontSize: 18, 194 | ), 195 | ), 196 | ], 197 | ), 198 | ), 199 | ), 200 | ], 201 | ), 202 | ), 203 | ], 204 | ), 205 | ); 206 | } 207 | } 208 | -------------------------------------------------------------------------------- /lib/pages/Disclaimer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DisclaimerWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const DisclaimerWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _DisclaimerWidget createState() => _DisclaimerWidget(); 9 | } 10 | 11 | class _DisclaimerWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "Disclaimer", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "If you feel any discomfort, you may be doing the Kegel exercises incorrectly, or they may not be suited to your body. Ask your doctor for help or stop exercising. We're not responsible for injuries you may sustain from this exercise.", 36 | style: Theme.of(context).textTheme.headline6, 37 | ), 38 | SizedBox( 39 | height: 60, 40 | ), 41 | TextButton( 42 | onPressed: () { 43 | Navigator.pop(context); 44 | }, 45 | child: Container( 46 | decoration: BoxDecoration( 47 | borderRadius: BorderRadius.circular(40), 48 | color: Color(0xFFFFF2F0), 49 | ), 50 | padding: const EdgeInsets.all(10.0), 51 | child: SizedBox( 52 | width: 340, 53 | height: 40, 54 | child: Center( 55 | child: Text( 56 | 'Got it', 57 | ), 58 | ), 59 | ), 60 | ), 61 | ), 62 | SizedBox( 63 | height: 30, 64 | ), 65 | ], 66 | ), 67 | ), 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/pages/ExerciseWidget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:percent_indicator/linear_percent_indicator.dart'; 3 | 4 | class ExerciseWidget extends StatefulWidget { 5 | @override 6 | _ExerciseWidgetState createState() => _ExerciseWidgetState(); 7 | } 8 | 9 | class _ExerciseWidgetState extends State { 10 | bool _isRelax = true; 11 | bool _isPlay = false; 12 | bool _isPrivate = false; 13 | 14 | void _noteModalBottomSheet(context) { 15 | showModalBottomSheet( 16 | shape: RoundedRectangleBorder( 17 | borderRadius: BorderRadius.circular(10.0), 18 | ), 19 | context: context, 20 | builder: (BuildContext buildContext) { 21 | return SingleChildScrollView( 22 | padding: EdgeInsets.only( 23 | left: 30, 24 | top: 30, 25 | right: 30, 26 | bottom: 20, 27 | ), 28 | child: Column( 29 | crossAxisAlignment: CrossAxisAlignment.stretch, 30 | children: [ 31 | Text( 32 | "Please note", 33 | style: TextStyle( 34 | color: Colors.black, 35 | fontSize: 25, 36 | fontWeight: FontWeight.bold, 37 | ), 38 | ), 39 | SizedBox( 40 | height: 20, 41 | ), 42 | Text( 43 | "- Empty your bladder before exercising. Stop the urination is not an exercise. it's not recommended to do it regularly as it can increase the risk of a urinary tract infection.", 44 | style: Theme.of(context).textTheme.headline6, 45 | ), 46 | SizedBox( 47 | height: 20, 48 | ), 49 | Text( 50 | "- Relax your body and mind.", 51 | style: Theme.of(context).textTheme.headline6, 52 | ), 53 | SizedBox( 54 | height: 60, 55 | ), 56 | TextButton( 57 | onPressed: () { 58 | Navigator.pop(context); 59 | }, 60 | child: Container( 61 | decoration: BoxDecoration( 62 | borderRadius: BorderRadius.circular(40), 63 | color: Color(0xFFFFF2F0), 64 | ), 65 | padding: const EdgeInsets.all(10.0), 66 | child: SizedBox( 67 | width: 340, 68 | height: 40, 69 | child: Center( 70 | child: Text( 71 | 'Got it', 72 | style: TextStyle( 73 | fontWeight: FontWeight.bold, 74 | ), 75 | ), 76 | ), 77 | ), 78 | ), 79 | ), 80 | ], 81 | ), 82 | ); 83 | }, 84 | ); 85 | } 86 | 87 | @override 88 | Widget build(BuildContext context) { 89 | final screenSize = MediaQuery.of(context).size; 90 | return Scaffold( 91 | appBar: AppBar( 92 | elevation: 0, 93 | backgroundColor: Colors.transparent, 94 | iconTheme: IconThemeData( 95 | color: Colors.black38, //change your color here 96 | ), 97 | leading: IconButton( 98 | icon: Icon(Icons.arrow_back_ios), 99 | onPressed: () { 100 | Navigator.of(context) 101 | .pushReplacementNamed('/DayExercise', arguments: 0); 102 | }, 103 | ), 104 | actions: [ 105 | IconButton( 106 | iconSize: 40, 107 | icon: Image.asset( 108 | _isPrivate == false 109 | ? "assets/img/ic_switch_private_off.png" 110 | : "assets/img/ic_switch_private_on.png", 111 | ), 112 | onPressed: () { 113 | if (_isPrivate == false) { 114 | setState(() { 115 | _isPrivate = true; 116 | }); 117 | } else { 118 | setState(() { 119 | _isPrivate = false; 120 | }); 121 | } 122 | }, 123 | ), 124 | ], 125 | ), 126 | body: Stack( 127 | alignment: Alignment.center, 128 | children: [ 129 | Positioned( 130 | width: screenSize.width, 131 | bottom: 120, 132 | child: Padding( 133 | padding: const EdgeInsets.symmetric(horizontal: 40), 134 | child: Row( 135 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 136 | children: [ 137 | IconButton( 138 | icon: Icon( 139 | Icons.arrow_back_ios, 140 | color: Theme.of(context).primaryColor.withOpacity(0.5), 141 | ), 142 | onPressed: () {}), 143 | GestureDetector( 144 | onTap: () { 145 | if (_isPlay == false) { 146 | setState(() { 147 | _isPlay = true; 148 | }); 149 | } else { 150 | setState(() { 151 | _isPlay = false; 152 | }); 153 | } 154 | }, 155 | child: Container( 156 | padding: EdgeInsets.all(10), 157 | decoration: BoxDecoration( 158 | color: Colors.white, 159 | shape: BoxShape.circle, 160 | boxShadow: [ 161 | BoxShadow( 162 | spreadRadius: 1, 163 | blurRadius: 10, 164 | color: Colors.grey.withOpacity(0.3), 165 | offset: Offset(0, 10), 166 | ), 167 | ], 168 | ), 169 | child: CircleAvatar( 170 | backgroundColor: Theme.of(context).primaryColor, 171 | radius: 35, 172 | child: Icon( 173 | _isPlay == false 174 | ? Icons.play_arrow_rounded 175 | : Icons.pause_rounded, 176 | color: Colors.white, 177 | size: 60, 178 | ), 179 | ), 180 | ), 181 | ), 182 | IconButton( 183 | icon: Icon( 184 | Icons.arrow_forward_ios, 185 | color: Theme.of(context).primaryColor.withOpacity(0.5), 186 | ), 187 | onPressed: () { 188 | Navigator.of(context) 189 | .pushReplacementNamed('/Complete', arguments: 0); 190 | }, 191 | ), 192 | ], 193 | ), 194 | ), 195 | ), 196 | Positioned( 197 | bottom: 0, 198 | child: Row( 199 | children: [ 200 | LinearPercentIndicator( 201 | padding: EdgeInsets.symmetric( 202 | horizontal: 7, 203 | ), 204 | width: screenSize.width * 0.3, 205 | lineHeight: 10.0, 206 | percent: 1, 207 | backgroundColor: 208 | Theme.of(context).primaryColor.withOpacity(0.1), 209 | progressColor: Theme.of(context).primaryColor, 210 | ), 211 | LinearPercentIndicator( 212 | padding: EdgeInsets.symmetric( 213 | horizontal: 7, 214 | ), 215 | width: screenSize.width * 0.3, 216 | lineHeight: 10.0, 217 | percent: 1.0, 218 | backgroundColor: Colors.orange.withOpacity(0.1), 219 | progressColor: Colors.orange, 220 | ), 221 | LinearPercentIndicator( 222 | padding: EdgeInsets.symmetric( 223 | horizontal: 7, 224 | ), 225 | width: screenSize.width * 0.3, 226 | lineHeight: 10.0, 227 | percent: 0.3, 228 | backgroundColor: Colors.orange.withOpacity(0.1), 229 | progressColor: Colors.orange, 230 | ), 231 | ], 232 | ), 233 | ), 234 | Positioned( 235 | width: screenSize.width, 236 | bottom: 40, 237 | child: Container( 238 | child: Row( 239 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 240 | children: [ 241 | CircleAvatar( 242 | backgroundColor: 243 | Theme.of(context).primaryColor.withOpacity(0.1), 244 | radius: 25, 245 | child: IconButton( 246 | icon: Icon( 247 | Icons.vibration, 248 | size: 25, 249 | color: Theme.of(context).primaryColor, 250 | ), 251 | onPressed: () {}, 252 | ), 253 | ), 254 | CircleAvatar( 255 | backgroundColor: 256 | Theme.of(context).primaryColor.withOpacity(0.1), 257 | radius: 25, 258 | child: IconButton( 259 | icon: Icon( 260 | Icons.volume_up, 261 | size: 25, 262 | color: Theme.of(context).primaryColor, 263 | ), 264 | onPressed: () {}, 265 | ), 266 | ), 267 | CircleAvatar( 268 | backgroundColor: 269 | Theme.of(context).primaryColor.withOpacity(0.1), 270 | radius: 25, 271 | child: IconButton( 272 | icon: Icon( 273 | Icons.article, 274 | size: 25, 275 | color: Theme.of(context).primaryColor, 276 | ), 277 | onPressed: () { 278 | _noteModalBottomSheet(context); 279 | }, 280 | ), 281 | ), 282 | ], 283 | ), 284 | ), 285 | ), 286 | Container( 287 | width: screenSize.width, 288 | child: Column( 289 | mainAxisAlignment: MainAxisAlignment.start, 290 | children: [ 291 | Text( 292 | "1\" tense, 1\" relax", 293 | style: TextStyle( 294 | color: Colors.black, 295 | fontSize: 28, 296 | fontWeight: FontWeight.bold, 297 | ), 298 | ), 299 | SizedBox( 300 | height: 5, 301 | ), 302 | Text( 303 | "x1", 304 | style: TextStyle( 305 | color: Colors.orange, 306 | fontSize: 28, 307 | fontWeight: FontWeight.bold, 308 | ), 309 | ), 310 | Padding( 311 | padding: const EdgeInsets.symmetric( 312 | vertical: 80, 313 | ), 314 | child: CircleAvatar( 315 | radius: 80, 316 | backgroundColor: _isRelax == true 317 | ? Colors.orange 318 | : Theme.of(context).primaryColor, 319 | child: Text( 320 | _isRelax == true ? "Relax" : "Tense", 321 | style: TextStyle( 322 | color: Colors.white, 323 | fontSize: 35, 324 | fontWeight: FontWeight.bold, 325 | ), 326 | ), 327 | ), 328 | ), 329 | ], 330 | ), 331 | ), 332 | ], 333 | ), 334 | ); 335 | } 336 | } 337 | -------------------------------------------------------------------------------- /lib/pages/FindMuscles.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:carousel_slider/carousel_slider.dart'; 3 | import 'package:dots_indicator/dots_indicator.dart'; 4 | 5 | class FindMusclesWidget extends StatefulWidget { 6 | final GlobalKey parentScaffoldKey; 7 | 8 | const FindMusclesWidget({Key key, this.parentScaffoldKey}) : super(key: key); 9 | @override 10 | _FindMusclesWidget createState() => _FindMusclesWidget(); 11 | } 12 | 13 | class _FindMusclesWidget extends State { 14 | CarouselController carouselController = CarouselController(); 15 | bool isNextPage = false; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Scaffold( 20 | appBar: AppBar( 21 | backgroundColor: Colors.transparent, 22 | iconTheme: IconThemeData( 23 | color: Colors.black.withOpacity(0.5), //change your color here 24 | ), 25 | elevation: 0, 26 | ), 27 | body: Column( 28 | children: [ 29 | Container( 30 | padding: EdgeInsets.only(left: 0, top: 20, right: 0), 31 | child: CarouselSlider( 32 | carouselController: carouselController, 33 | options: CarouselOptions( 34 | height: 430.0, 35 | autoPlay: false, 36 | viewportFraction: 1, 37 | enableInfiniteScroll: false, 38 | onPageChanged: (index, reason) { 39 | setState(() { 40 | isNextPage = index == 0 ? false : true; 41 | }); 42 | }, 43 | ), 44 | items: [ 45 | Builder( 46 | builder: (BuildContext context) { 47 | return Container( 48 | width: MediaQuery.of(context).size.width * 0.8, 49 | child: Column( 50 | crossAxisAlignment: CrossAxisAlignment.start, 51 | children: [ 52 | Text( 53 | "Method 1", 54 | style: Theme.of(context).textTheme.headline1, 55 | ), 56 | SizedBox( 57 | height: 40, 58 | ), 59 | Text( 60 | "Muscles that can slow or stop the urination are pelvic floor muscles. Don't tense your buttocks, legs and abdomen when stopping midstream.", 61 | style: Theme.of(context).textTheme.headline6, 62 | ), 63 | SizedBox( 64 | height: 40, 65 | ), 66 | Center( 67 | child: Image.asset( 68 | 'assets/img/ic_tip_7.png', 69 | width: 90, 70 | ), 71 | ), 72 | SizedBox( 73 | height: 60, 74 | ), 75 | ], 76 | ), 77 | ); 78 | }, 79 | ), 80 | Builder( 81 | builder: (BuildContext context) { 82 | return Container( 83 | width: MediaQuery.of(context).size.width * 0.8, 84 | child: Column( 85 | crossAxisAlignment: CrossAxisAlignment.start, 86 | children: [ 87 | Text( 88 | "Method 2", 89 | style: Theme.of(context).textTheme.headline1, 90 | ), 91 | SizedBox( 92 | height: 40, 93 | ), 94 | Text( 95 | "Muscles that can prevent the passing of gas are pelvic floor muscles.", 96 | style: Theme.of(context).textTheme.headline6, 97 | ), 98 | SizedBox( 99 | height: 40, 100 | ), 101 | Center( 102 | child: Image.asset( 103 | 'assets/img/ic_tip_8.png', 104 | width: 90, 105 | ), 106 | ), 107 | SizedBox( 108 | height: 60, 109 | ), 110 | ], 111 | ), 112 | ); 113 | }, 114 | ), 115 | ], 116 | ), 117 | ), 118 | Padding( 119 | padding: const EdgeInsets.only(bottom: 20.0), 120 | child: Center( 121 | child: new DotsIndicator( 122 | dotsCount: 3, 123 | position: 0, 124 | decorator: DotsDecorator( 125 | size: const Size.square(5.0), 126 | activeSize: const Size(15.0, 5.0), 127 | color: Theme.of(context).primaryColor.withOpacity(0.3), 128 | activeColor: Color(0xFFFFA690), 129 | spacing: EdgeInsets.only(left: 5), 130 | activeShape: RoundedRectangleBorder( 131 | borderRadius: BorderRadius.circular(5.0), 132 | ), 133 | ), 134 | ), 135 | ), 136 | ), 137 | SizedBox( 138 | height: 10, 139 | ), 140 | TextButton( 141 | onPressed: () { 142 | if (isNextPage) { 143 | Navigator.pop(context); 144 | } else { 145 | carouselController.animateToPage(1); 146 | } 147 | }, 148 | child: Container( 149 | decoration: BoxDecoration( 150 | borderRadius: BorderRadius.circular(40), 151 | color: Color(0xFFFFF2F0), 152 | ), 153 | padding: const EdgeInsets.all(10.0), 154 | child: SizedBox( 155 | width: 340, 156 | height: 40, 157 | child: Center( 158 | child: Text( 159 | isNextPage ? 'Got it' : 'Next', 160 | style: TextStyle( 161 | fontSize: 27, 162 | fontWeight: FontWeight.bold, 163 | ), 164 | ), 165 | ), 166 | ), 167 | ), 168 | ), 169 | ], 170 | ), 171 | ); 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /lib/pages/HowKegel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HowKegelWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const HowKegelWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _HowKegelWidget createState() => _HowKegelWidget(); 9 | } 10 | 11 | class _HowKegelWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "How to do Kegel?", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "Kegel requires a rhythmic contraction of pelvic floor muscles to strengthen these muscles.", 36 | style: Theme.of(context).textTheme.headline6, 37 | ), 38 | SizedBox( 39 | height: 10, 40 | ), 41 | Center( 42 | child: Image.asset( 43 | 'assets/img/ic_tip_61.png', 44 | width: MediaQuery.of(context).size.width * 0.7, 45 | ), 46 | ), 47 | SizedBox( 48 | height: 10, 49 | ), 50 | TextButton( 51 | onPressed: () { 52 | Navigator.of(context).pushNamed( 53 | '/FindMuscles', 54 | ); 55 | }, 56 | child: Container( 57 | decoration: BoxDecoration( 58 | borderRadius: BorderRadius.circular(40), 59 | color: Color(0xFFFFF2F0), 60 | ), 61 | padding: const EdgeInsets.all(10.0), 62 | child: SizedBox( 63 | width: 340, 64 | height: 70, 65 | child: Center( 66 | child: Text( 67 | 'How to find pelvic floor muscles?', 68 | textAlign: TextAlign.center, 69 | ), 70 | ), 71 | ), 72 | ), 73 | ), 74 | SizedBox( 75 | height: 30, 76 | ), 77 | ], 78 | ), 79 | ), 80 | ); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /lib/pages/PleaseNote.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class PleaseNoteWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const PleaseNoteWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _PleaseNoteWidget createState() => _PleaseNoteWidget(); 9 | } 10 | 11 | class _PleaseNoteWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "Please note", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "- Empty your bladder before exercising. Stop the urination is not an exercise. it's not recommended to do it regularly as it can increase the risk of a urinary tract infection.", 36 | style: Theme.of(context).textTheme.headline6, 37 | ), 38 | SizedBox( 39 | height: 40, 40 | ), 41 | Text( 42 | "- Perseverance is important. You need to stick to it to see the results.", 43 | style: Theme.of(context).textTheme.headline6, 44 | ), 45 | SizedBox( 46 | height: 40, 47 | ), 48 | Text( 49 | "- To maximize results, we strongly suggest you live a healthy lifestyle - don't smoke and drink, follow a low cholesterol diet.", 50 | style: Theme.of(context).textTheme.headline6, 51 | ), 52 | SizedBox( 53 | height: 40, 54 | ), 55 | Text( 56 | "- Relax your body and mind.", 57 | style: Theme.of(context).textTheme.headline6, 58 | ), 59 | SizedBox( 60 | height: 60, 61 | ), 62 | TextButton( 63 | onPressed: () { 64 | Navigator.pop(context); 65 | }, 66 | child: Container( 67 | decoration: BoxDecoration( 68 | borderRadius: BorderRadius.circular(40), 69 | color: Color(0xFFFFF2F0), 70 | ), 71 | padding: const EdgeInsets.all(10.0), 72 | child: SizedBox( 73 | width: 340, 74 | height: 40, 75 | child: Center( 76 | child: Text( 77 | 'Got it', 78 | ), 79 | ), 80 | ), 81 | ), 82 | ), 83 | SizedBox( 84 | height: 30, 85 | ), 86 | ], 87 | ), 88 | ), 89 | ); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /lib/pages/WhatBenefits.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WhatBenefitsWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const WhatBenefitsWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _WhatBenefitsWidget createState() => _WhatBenefitsWidget(); 9 | } 10 | 11 | class _WhatBenefitsWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "What are the benefits?", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "Sex life", 36 | style: Theme.of(context).textTheme.headline5, 37 | ), 38 | SizedBox( 39 | height: 10, 40 | ), 41 | Text( 42 | "- Help with erectile dysfunction.", 43 | style: Theme.of(context).textTheme.headline6, 44 | ), 45 | SizedBox( 46 | height: 40, 47 | ), 48 | Text( 49 | "- Get more intense orgasms.", 50 | style: Theme.of(context).textTheme.headline6, 51 | ), 52 | SizedBox( 53 | height: 40, 54 | ), 55 | Text( 56 | "- Last longer in bed.", 57 | style: Theme.of(context).textTheme.headline6, 58 | ), 59 | SizedBox( 60 | height: 40, 61 | ), 62 | Center( 63 | child: Image.asset( 64 | 'assets/img/ic_tip_2.png', 65 | width: 120, 66 | ), 67 | ), 68 | SizedBox( 69 | height: 40, 70 | ), 71 | Text( 72 | "Self-care", 73 | style: Theme.of(context).textTheme.headline5, 74 | ), 75 | SizedBox( 76 | height: 10, 77 | ), 78 | Text( 79 | "- Prevent and reduce prostatitis.", 80 | style: Theme.of(context).textTheme.headline6, 81 | ), 82 | SizedBox( 83 | height: 40, 84 | ), 85 | Text( 86 | "- Reduce urinary urgency and frequency.", 87 | style: Theme.of(context).textTheme.headline6, 88 | ), 89 | SizedBox( 90 | height: 40, 91 | ), 92 | Text( 93 | "- Improve the symptoms of post micturition dribble.", 94 | style: Theme.of(context).textTheme.headline6, 95 | ), 96 | SizedBox( 97 | height: 40, 98 | ), 99 | Text( 100 | "- Improve bladder and bowel control.", 101 | style: Theme.of(context).textTheme.headline6, 102 | ), 103 | SizedBox( 104 | height: 40, 105 | ), 106 | Center( 107 | child: Image.asset( 108 | 'assets/img/ic_tip_5.png', 109 | width: 100, 110 | ), 111 | ), 112 | SizedBox( 113 | height: 40, 114 | ), 115 | Text( 116 | "Privacy", 117 | style: Theme.of(context).textTheme.headline5, 118 | ), 119 | SizedBox( 120 | height: 10, 121 | ), 122 | Text( 123 | "- You can do it anytime, anywhere. No one will know you are doing it.", 124 | style: Theme.of(context).textTheme.headline6, 125 | ), 126 | SizedBox( 127 | height: 40, 128 | ), 129 | Center( 130 | child: Image.asset( 131 | 'assets/img/ic_tip_4.png', 132 | width: 100, 133 | ), 134 | ), 135 | SizedBox( 136 | height: 60, 137 | ), 138 | TextButton( 139 | onPressed: () { 140 | Navigator.pop(context); 141 | }, 142 | child: Container( 143 | decoration: BoxDecoration( 144 | borderRadius: BorderRadius.circular(40), 145 | color: Color(0xFFFFF2F0), 146 | ), 147 | padding: const EdgeInsets.all(10.0), 148 | child: SizedBox( 149 | width: 340, 150 | height: 40, 151 | child: Center( 152 | child: Text( 153 | 'Got it', 154 | ), 155 | ), 156 | ), 157 | ), 158 | ), 159 | SizedBox( 160 | height: 30, 161 | ), 162 | ], 163 | ), 164 | ), 165 | ); 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /lib/pages/WhatBenefitsForWoman.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WhatBenefitsForWomanWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const WhatBenefitsForWomanWidget({Key key, this.parentScaffoldKey}) 7 | : super(key: key); 8 | @override 9 | _WhatBenefitsForWomanWidget createState() => _WhatBenefitsForWomanWidget(); 10 | } 11 | 12 | class _WhatBenefitsForWomanWidget extends State { 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | appBar: AppBar( 17 | backgroundColor: Colors.transparent, 18 | iconTheme: IconThemeData( 19 | color: Colors.black.withOpacity(0.5), //change your color here 20 | ), 21 | elevation: 0, 22 | ), 23 | body: Stack( 24 | alignment: Alignment.center, 25 | children: [ 26 | SingleChildScrollView( 27 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 28 | child: Column( 29 | crossAxisAlignment: CrossAxisAlignment.start, 30 | children: [ 31 | Text( 32 | "Benefits for women", 33 | style: Theme.of(context).textTheme.headline1, 34 | ), 35 | SizedBox( 36 | height: 40, 37 | ), 38 | Text( 39 | "Sex life", 40 | style: Theme.of(context).textTheme.headline5, 41 | ), 42 | SizedBox( 43 | height: 10, 44 | ), 45 | Text( 46 | "- Improve blood circulation to your vagina, tighten your vagina and increase vaginal lubrication.", 47 | style: Theme.of(context).textTheme.headline6, 48 | ), 49 | SizedBox( 50 | height: 40, 51 | ), 52 | Text( 53 | "- Increase sexual arousal, more pleasure during sex and make it easier for you to reach orgasm.", 54 | style: Theme.of(context).textTheme.headline6, 55 | ), 56 | SizedBox( 57 | height: 40, 58 | ), 59 | Center( 60 | child: Image.asset( 61 | 'assets/img/ic_tip_2.png', 62 | width: 120, 63 | ), 64 | ), 65 | SizedBox( 66 | height: 40, 67 | ), 68 | Text( 69 | "Pregnancy", 70 | style: Theme.of(context).textTheme.headline5, 71 | ), 72 | SizedBox( 73 | height: 10, 74 | ), 75 | Text( 76 | "- Prevent urinary incontinence by improving bladder control.", 77 | style: Theme.of(context).textTheme.headline6, 78 | ), 79 | SizedBox( 80 | height: 40, 81 | ), 82 | Text( 83 | "- Reduce labor pain and shorten the time of labor by developing the ability to relax and control pelvic floor muscles.", 84 | style: Theme.of(context).textTheme.headline6, 85 | ), 86 | SizedBox( 87 | height: 40, 88 | ), 89 | Text( 90 | "- Speed the postpartum recovery. Help heal perineal tissues, which are stretched during vaginal birth.", 91 | style: Theme.of(context).textTheme.headline6, 92 | ), 93 | SizedBox( 94 | height: 40, 95 | ), 96 | Center( 97 | child: Image.asset( 98 | 'assets/img/ic_tip_3.png', 99 | width: 120, 100 | ), 101 | ), 102 | SizedBox( 103 | height: 40, 104 | ), 105 | Text( 106 | "Self-care", 107 | style: Theme.of(context).textTheme.headline5, 108 | ), 109 | SizedBox( 110 | height: 10, 111 | ), 112 | Text( 113 | "- It can prevent urinary incontinence, uterine and vaginal prolapse caused by increased pressure in the abdomen.", 114 | style: Theme.of(context).textTheme.headline6, 115 | ), 116 | SizedBox( 117 | height: 40, 118 | ), 119 | Center( 120 | child: Image.asset( 121 | 'assets/img/ic_tip_5.png', 122 | width: 100, 123 | ), 124 | ), 125 | SizedBox( 126 | height: 40, 127 | ), 128 | Text( 129 | "Privacy", 130 | style: Theme.of(context).textTheme.headline5, 131 | ), 132 | SizedBox( 133 | height: 10, 134 | ), 135 | Text( 136 | "- You can do it anytime, anywhere. No one will know you are doing it.", 137 | style: Theme.of(context).textTheme.headline6, 138 | ), 139 | SizedBox( 140 | height: 40, 141 | ), 142 | Center( 143 | child: Image.asset( 144 | 'assets/img/ic_tip_4.png', 145 | width: 100, 146 | ), 147 | ), 148 | SizedBox( 149 | height: 60, 150 | ), 151 | TextButton( 152 | onPressed: () {}, 153 | child: Container( 154 | decoration: BoxDecoration( 155 | borderRadius: BorderRadius.circular(40), 156 | color: Color(0xFFFFF2F0), 157 | ), 158 | padding: const EdgeInsets.all(10.0), 159 | child: SizedBox( 160 | width: 340, 161 | height: 40, 162 | child: Center( 163 | child: Text( 164 | 'Got it', 165 | ), 166 | ), 167 | ), 168 | ), 169 | ), 170 | SizedBox( 171 | height: 30, 172 | ), 173 | ], 174 | ), 175 | ), 176 | Positioned( 177 | bottom: 35, 178 | child: TextButton( 179 | onPressed: () {}, 180 | child: Container( 181 | decoration: BoxDecoration( 182 | borderRadius: BorderRadius.circular(40), 183 | color: Color(0xFFFD7A5A), 184 | ), 185 | padding: const EdgeInsets.all(10.0), 186 | child: SizedBox( 187 | width: 340, 188 | height: 40, 189 | child: Center( 190 | child: Text( 191 | 'Share to her', 192 | style: TextStyle( 193 | color: Colors.white, 194 | fontWeight: FontWeight.bold, 195 | ), 196 | ), 197 | ), 198 | ), 199 | ), 200 | ), 201 | ), 202 | ], 203 | ), 204 | ); 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /lib/pages/WhatsKegel.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WhatsKegelWidget extends StatefulWidget { 4 | final GlobalKey parentScaffoldKey; 5 | 6 | const WhatsKegelWidget({Key key, this.parentScaffoldKey}) : super(key: key); 7 | @override 8 | _WhatsKegelWidget createState() => _WhatsKegelWidget(); 9 | } 10 | 11 | class _WhatsKegelWidget extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | backgroundColor: Colors.transparent, 17 | iconTheme: IconThemeData( 18 | color: Colors.black.withOpacity(0.5), //change your color here 19 | ), 20 | elevation: 0, 21 | ), 22 | body: SingleChildScrollView( 23 | padding: EdgeInsets.only(left: 30, top: 20, right: 30), 24 | child: Column( 25 | crossAxisAlignment: CrossAxisAlignment.start, 26 | children: [ 27 | Text( 28 | "What's Kegel?", 29 | style: Theme.of(context).textTheme.headline1, 30 | ), 31 | SizedBox( 32 | height: 40, 33 | ), 34 | Text( 35 | "Kegel is a form of exercise. It strengthens your pelvic floor muscles that support and control your bladder to prevent or control urinary incontinence.", 36 | style: Theme.of(context).textTheme.headline6, 37 | ), 38 | SizedBox( 39 | height: 40, 40 | ), 41 | Text( 42 | "Kegel exercises have proven to help men last longer in bed. They strengthen pelvic floor muscles (PC muscles) to help improve your sexual performance and bring you more intense orgasms.", 43 | style: Theme.of(context).textTheme.headline6, 44 | ), 45 | SizedBox( 46 | height: 40, 47 | ), 48 | TextButton( 49 | onPressed: () { 50 | Navigator.of(context).pushNamed( 51 | '/WhatBenefits', 52 | ); 53 | }, 54 | child: Container( 55 | decoration: BoxDecoration( 56 | borderRadius: BorderRadius.circular(40), 57 | color: Color(0xFFFFF2F0), 58 | ), 59 | padding: const EdgeInsets.all(10.0), 60 | child: SizedBox( 61 | width: 340, 62 | height: 40, 63 | child: Center( 64 | child: Text( 65 | 'What are the benefits?', 66 | ), 67 | ), 68 | ), 69 | ), 70 | ), 71 | SizedBox( 72 | height: 10, 73 | ), 74 | TextButton( 75 | onPressed: () { 76 | Navigator.of(context).pushNamed( 77 | '/HowKegel', 78 | ); 79 | }, 80 | child: Container( 81 | decoration: BoxDecoration( 82 | borderRadius: BorderRadius.circular(40), 83 | color: Color(0xFFFFF2F0), 84 | ), 85 | padding: const EdgeInsets.all(10.0), 86 | child: SizedBox( 87 | width: 340, 88 | height: 40, 89 | child: Center( 90 | child: Text( 91 | 'How to do Kegel?', 92 | ), 93 | ), 94 | ), 95 | ), 96 | ), 97 | SizedBox( 98 | height: 10, 99 | ), 100 | TextButton( 101 | onPressed: () { 102 | Navigator.of(context).pushNamed( 103 | '/CanKegel', 104 | ); 105 | }, 106 | child: Container( 107 | decoration: BoxDecoration( 108 | borderRadius: BorderRadius.circular(40), 109 | color: Color(0xFFFFF2F0), 110 | ), 111 | padding: const EdgeInsets.all(10.0), 112 | child: SizedBox( 113 | width: 340, 114 | height: 40, 115 | child: Center( 116 | child: Text( 117 | 'Can I do Kegel?', 118 | ), 119 | ), 120 | ), 121 | ), 122 | ), 123 | SizedBox( 124 | height: 30, 125 | ), 126 | ], 127 | ), 128 | ), 129 | ); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /lib/pages/pages.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../models/route_argument.dart'; 3 | import '../pages/KegelWidget.dart'; 4 | import '../pages/LearnWidget.dart'; 5 | import '../pages/MineWidget.dart'; 6 | import '../pages/SettingWidget.dart'; 7 | 8 | // ignore: must_be_immutable 9 | class PagesWidget extends StatefulWidget { 10 | dynamic currentTab; 11 | RouteArgument routeArgument; 12 | Widget currentPage = KegelWidget(); 13 | final GlobalKey scaffoldKey = new GlobalKey(); 14 | 15 | PagesWidget({ 16 | Key key, 17 | this.currentTab, 18 | }) { 19 | if (currentTab != null) { 20 | if (currentTab is RouteArgument) { 21 | routeArgument = currentTab; 22 | currentTab = int.parse(currentTab.id); 23 | } 24 | } else { 25 | currentTab = 0; 26 | } 27 | } 28 | 29 | @override 30 | _PagesWidgetState createState() => _PagesWidgetState(); 31 | } 32 | 33 | class _PagesWidgetState extends State { 34 | @override 35 | void initState() { 36 | super.initState(); 37 | _selectTab(widget.currentTab); 38 | } 39 | 40 | void _selectTab(int tabItem) { 41 | setState(() { 42 | widget.currentTab = tabItem; 43 | switch (tabItem) { 44 | case 0: 45 | widget.currentPage = KegelWidget( 46 | parentScaffoldKey: widget.scaffoldKey, 47 | ); 48 | break; 49 | case 1: 50 | widget.currentPage = LearnWidget( 51 | parentScaffoldKey: widget.scaffoldKey, 52 | ); 53 | break; 54 | case 2: 55 | widget.currentPage = MineWidget( 56 | parentScaffoldKey: widget.scaffoldKey, 57 | ); 58 | 59 | break; 60 | case 3: 61 | widget.currentPage = SettingWidget( 62 | parentScaffoldKey: widget.scaffoldKey, 63 | ); 64 | break; 65 | } 66 | }); 67 | } 68 | 69 | @override 70 | Widget build(BuildContext context) { 71 | return Scaffold( 72 | body: widget.currentPage, 73 | bottomNavigationBar: BottomNavigationBar( 74 | type: BottomNavigationBarType.fixed, 75 | selectedItemColor: Theme.of(context).accentColor, 76 | selectedFontSize: 0, 77 | unselectedFontSize: 0, 78 | iconSize: 22, 79 | elevation: 0, 80 | backgroundColor: Colors.white, 81 | selectedIconTheme: IconThemeData(size: 28), 82 | unselectedItemColor: Theme.of(context).focusColor.withOpacity(1), 83 | currentIndex: widget.currentTab, 84 | onTap: (int i) { 85 | this._selectTab(i); 86 | }, 87 | items: [ 88 | BottomNavigationBarItem( 89 | icon: Column( 90 | children: [ 91 | Icon( 92 | Icons.notifications, 93 | color: Theme.of(context).primaryColor.withOpacity(0.5), 94 | ), 95 | Text( 96 | "Kegel", 97 | style: TextStyle( 98 | fontSize: 11.0, 99 | fontWeight: FontWeight.bold, 100 | color: Theme.of(context).primaryColor.withOpacity(0.5), 101 | ), 102 | ), 103 | ], 104 | ), 105 | activeIcon: Column( 106 | children: [ 107 | Icon( 108 | Icons.notifications, 109 | color: Theme.of(context).primaryColor, 110 | ), 111 | Text( 112 | "Kegel", 113 | style: TextStyle( 114 | fontSize: 11.0, 115 | fontWeight: FontWeight.bold, 116 | color: Theme.of(context).primaryColor, 117 | ), 118 | ), 119 | ], 120 | ), 121 | label: 'Kegel', 122 | ), 123 | BottomNavigationBarItem( 124 | icon: Column( 125 | children: [ 126 | Icon( 127 | Icons.announcement, 128 | color: Theme.of(context).primaryColor.withOpacity(0.5), 129 | ), 130 | Text( 131 | "Learn", 132 | style: TextStyle( 133 | fontSize: 11.0, 134 | fontWeight: FontWeight.bold, 135 | color: Theme.of(context).primaryColor.withOpacity(0.5), 136 | ), 137 | ), 138 | ], 139 | ), 140 | activeIcon: Column( 141 | children: [ 142 | Icon( 143 | Icons.announcement, 144 | color: Theme.of(context).primaryColor, 145 | ), 146 | Text( 147 | "Learn", 148 | style: TextStyle( 149 | fontSize: 11.0, 150 | fontWeight: FontWeight.bold, 151 | color: Theme.of(context).primaryColor, 152 | ), 153 | ), 154 | ], 155 | ), 156 | label: 'Learn', 157 | ), 158 | BottomNavigationBarItem( 159 | icon: Column( 160 | children: [ 161 | Icon( 162 | Icons.person, 163 | color: Theme.of(context).primaryColor.withOpacity(0.5), 164 | ), 165 | Text( 166 | "Mine", 167 | style: TextStyle( 168 | fontSize: 11.0, 169 | fontWeight: FontWeight.bold, 170 | color: Theme.of(context).primaryColor.withOpacity(0.5), 171 | ), 172 | ), 173 | ], 174 | ), 175 | activeIcon: Column( 176 | children: [ 177 | Icon( 178 | Icons.person, 179 | color: Theme.of(context).primaryColor, 180 | ), 181 | Text( 182 | "Mine", 183 | style: TextStyle( 184 | fontSize: 11.0, 185 | fontWeight: FontWeight.bold, 186 | color: Theme.of(context).primaryColor, 187 | ), 188 | ), 189 | ], 190 | ), 191 | label: 'Mine', 192 | ), 193 | BottomNavigationBarItem( 194 | icon: Column( 195 | children: [ 196 | Icon( 197 | Icons.settings, 198 | color: Theme.of(context).primaryColor.withOpacity(0.5), 199 | ), 200 | Text( 201 | "Settings", 202 | style: TextStyle( 203 | fontSize: 11.0, 204 | fontWeight: FontWeight.bold, 205 | color: Theme.of(context).primaryColor.withOpacity(0.5), 206 | ), 207 | ), 208 | ], 209 | ), 210 | activeIcon: Column( 211 | children: [ 212 | Icon( 213 | Icons.settings, 214 | color: Theme.of(context).primaryColor, 215 | ), 216 | Text( 217 | "Settings", 218 | style: TextStyle( 219 | fontSize: 11.0, 220 | fontWeight: FontWeight.bold, 221 | color: Theme.of(context).primaryColor, 222 | ), 223 | ), 224 | ], 225 | ), 226 | label: 'Settings', 227 | ), 228 | ], 229 | ), 230 | ); 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /lib/pages/splash_screen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class SplashScreen extends StatefulWidget { 6 | @override 7 | _SplashScreenState createState() => _SplashScreenState(); 8 | } 9 | 10 | class _SplashScreenState extends State 11 | with TickerProviderStateMixin { 12 | @override 13 | void initState() { 14 | super.initState(); 15 | loadData(); 16 | } 17 | 18 | @override 19 | void dispose() { 20 | super.dispose(); 21 | } 22 | 23 | void loadData() { 24 | Timer(Duration(seconds: 3), () { 25 | Navigator.of(context).pushReplacementNamed('/Pages', arguments: 0); 26 | }); 27 | } 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | final width = MediaQuery.of(context).size.width; 32 | final height = MediaQuery.of(context).size.height; 33 | return Scaffold( 34 | body: Container( 35 | width: width, 36 | height: height, 37 | decoration: BoxDecoration( 38 | image: DecorationImage( 39 | image: AssetImage( 40 | "assets/img/bg_splash.jpg", 41 | ), 42 | fit: BoxFit.fill, 43 | ), 44 | ), 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/repository/settings_repository.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | // import 'dart:convert'; 3 | // import 'dart:io'; 4 | 5 | import 'package:flutter/cupertino.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter/services.dart'; 8 | // import 'package:global_configuration/global_configuration.dart'; 9 | // import 'package:http/http.dart' as http; 10 | // import 'package:location/location.dart'; 11 | import 'package:shared_preferences/shared_preferences.dart'; 12 | 13 | import '../models/setting.dart'; 14 | 15 | ValueNotifier setting = new ValueNotifier(new Setting()); 16 | final navigatorKey = GlobalKey(); 17 | 18 | Future initSettings() async { 19 | Setting _setting; 20 | try { 21 | SharedPreferences prefs = await SharedPreferences.getInstance(); 22 | 23 | _setting = Setting.fromJSON({}); 24 | if (prefs.containsKey('language')) { 25 | _setting.mobileLanguage.value = Locale(prefs.get('language'), ''); 26 | } 27 | print(prefs.get('themeColor')); 28 | if (prefs.containsKey('themeColor')) { 29 | _setting.mainColor.value = prefs.get('themeColor'); 30 | } else { 31 | _setting.mainColor.value = 0; 32 | } 33 | 34 | setting.value = _setting; 35 | 36 | setting.notifyListeners(); 37 | } catch (e) { 38 | print(e); 39 | } 40 | 41 | return setting.value; 42 | } 43 | 44 | void setBrightness(Brightness brightness) async { 45 | SharedPreferences prefs = await SharedPreferences.getInstance(); 46 | if (brightness == Brightness.dark) { 47 | prefs.setBool("isDark", true); 48 | brightness = Brightness.dark; 49 | } else { 50 | prefs.setBool("isDark", false); 51 | brightness = Brightness.light; 52 | } 53 | } 54 | 55 | Future setDefaultLanguage(String language) async { 56 | if (language != null) { 57 | SharedPreferences prefs = await SharedPreferences.getInstance(); 58 | await prefs.setString('language', language); 59 | } 60 | } 61 | 62 | Future getDefaultLanguage(String defaultLanguage) async { 63 | SharedPreferences prefs = await SharedPreferences.getInstance(); 64 | if (prefs.containsKey('language')) { 65 | defaultLanguage = await prefs.get('language'); 66 | } 67 | return defaultLanguage; 68 | } 69 | 70 | Future setTheme(int themeColor) async { 71 | if (themeColor != null) { 72 | SharedPreferences prefs = await SharedPreferences.getInstance(); 73 | await prefs.setInt('themeColor', themeColor); 74 | } 75 | } 76 | 77 | Future getTheme(int themeColor) async { 78 | SharedPreferences prefs = await SharedPreferences.getInstance(); 79 | if (prefs.containsKey('themeColor')) { 80 | themeColor = await prefs.get('themeColor'); 81 | } 82 | return themeColor; 83 | } 84 | 85 | Future saveMessageId(String messageId) async { 86 | if (messageId != null) { 87 | SharedPreferences prefs = await SharedPreferences.getInstance(); 88 | await prefs.setString('google.message_id', messageId); 89 | } 90 | } 91 | 92 | Future getMessageId() async { 93 | SharedPreferences prefs = await SharedPreferences.getInstance(); 94 | return await prefs.get('google.message_id'); 95 | } 96 | -------------------------------------------------------------------------------- /lib/route_generator.dart: -------------------------------------------------------------------------------- 1 | import 'package:exercise_app/pages/ExerciseWidget.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'pages/CompleteExerciseWidget.dart'; 4 | import 'pages/pages.dart'; 5 | import 'pages/splash_screen.dart'; 6 | import 'pages/DayExercise.dart'; 7 | import 'pages/WhatsKegel.dart'; 8 | import 'pages/WhatBenefits.dart'; 9 | import 'pages/CanKegel.dart'; 10 | import 'pages/HowKegel.dart'; 11 | import 'pages/FindMuscles.dart'; 12 | import 'pages/PleaseNote.dart'; 13 | import 'pages/Disclaimer.dart'; 14 | import 'pages/WhatBenefitsForWoman.dart'; 15 | 16 | class RouteGenerator { 17 | static Route generateRoute(RouteSettings settings) { 18 | // Getting arguments passed in while calling Navigator.pushNamed 19 | final args = settings.arguments; 20 | switch (settings.name) { 21 | case '/Splash': 22 | return MaterialPageRoute(builder: (_) => SplashScreen()); 23 | case '/DayExercise': 24 | return MaterialPageRoute(builder: (_) => DayExerciseWidget()); 25 | case '/WhatsKegel': 26 | return MaterialPageRoute(builder: (_) => WhatsKegelWidget()); 27 | case '/WhatBenefits': 28 | return MaterialPageRoute(builder: (_) => WhatBenefitsWidget()); 29 | case '/WhatBenefitsForWoman': 30 | return MaterialPageRoute(builder: (_) => WhatBenefitsForWomanWidget()); 31 | case '/CanKegel': 32 | return MaterialPageRoute(builder: (_) => CanKegelWidget()); 33 | case '/HowKegel': 34 | return MaterialPageRoute(builder: (_) => HowKegelWidget()); 35 | case '/FindMuscles': 36 | return MaterialPageRoute(builder: (_) => FindMusclesWidget()); 37 | case '/PleaseNote': 38 | return MaterialPageRoute(builder: (_) => PleaseNoteWidget()); 39 | case '/Disclaimer': 40 | return MaterialPageRoute(builder: (_) => DisclaimerWidget()); 41 | case '/Pages': 42 | return MaterialPageRoute(builder: (_) => PagesWidget(currentTab: args)); 43 | case '/Exercise': 44 | return MaterialPageRoute(builder: (_) => ExerciseWidget()); 45 | case '/Complete': 46 | return MaterialPageRoute(builder: (_) => CompleteExerciseWidget()); 47 | default: 48 | // If there is no such named route in the switch statement, e.g. /third 49 | return MaterialPageRoute( 50 | builder: (_) => 51 | Scaffold(body: SafeArea(child: Text('Route Error')))); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: exercise_app 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | flutter_localizations: 27 | sdk: flutter 28 | 29 | # The following adds the Cupertino Icons font to your application. 30 | # Use with the CupertinoIcons class for iOS style icons. 31 | cupertino_icons: ^1.0.0 32 | mvc_pattern: 6.3.0 33 | carousel_slider: ^3.0.0 34 | dots_indicator: ^1.2.0 35 | flutter_svg: ^0.19.0 36 | percent_indicator: ^2.1.9+1 37 | 38 | intl: ^0.16.1 39 | global_configuration: ^1.6.0 40 | table_calendar: ^2.3.3 41 | fl_chart: ^0.12.2 42 | location: ^3.2.4 43 | shared_preferences: ^0.5.12+4 44 | device_preview: ^0.4.5 45 | audioplayers: ^0.14.1 46 | sqflite: 47 | path: 48 | 49 | 50 | 51 | dev_dependencies: 52 | flutter_test: 53 | sdk: flutter 54 | 55 | # For information on the generic Dart part of this file, see the 56 | # following page: https://dart.dev/tools/pub/pubspec 57 | 58 | # The following section is specific to Flutter. 59 | flutter: 60 | 61 | # The following line ensures that the Material Icons font is 62 | # included with your application, so that you can use the icons in 63 | # the material Icons class. 64 | uses-material-design: true 65 | 66 | # To add assets to your application, add an assets section, like this: 67 | # assets: 68 | # - images/a_dot_burr.jpeg 69 | # - images/a_dot_ham.jpeg 70 | 71 | assets: 72 | - assets/cfg/ 73 | - assets/img/ 74 | - assets/db/kegel.db 75 | # An image asset can refer to one or more resolution-specific "variants", see 76 | # https://flutter.dev/assets-and-images/#resolution-aware. 77 | 78 | # For details regarding adding assets from package dependencies, see 79 | # https://flutter.dev/assets-and-images/#from-packages 80 | 81 | # To add custom fonts to your application, add a fonts section here, 82 | # in this "flutter" section. Each entry in this list should have a 83 | # "family" key with the font family name, and a "fonts" key with a 84 | # list giving the asset and other descriptors for the font. For 85 | # example: 86 | # fonts: 87 | # - family: Schyler 88 | # fonts: 89 | # - asset: fonts/Schyler-Regular.ttf 90 | # - asset: fonts/Schyler-Italic.ttf 91 | # style: italic 92 | # - family: Trajan Pro 93 | # fonts: 94 | # - asset: fonts/TrajanPro.ttf 95 | # - asset: fonts/TrajanPro_Bold.ttf 96 | # weight: 700 97 | # 98 | # For details regarding fonts from package dependencies, 99 | # see https://flutter.dev/custom-fonts/#from-packages 100 | --------------------------------------------------------------------------------