├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── android
├── .project
├── .settings
│ └── org.eclipse.buildship.core.prefs
├── app
│ ├── .classpath
│ ├── .project
│ ├── .settings
│ │ └── org.eclipse.buildship.core.prefs
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── healthoui
│ │ │ │ └── MainActivity.java
│ │ └── 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
├── fonts
│ ├── Poppins-Black.ttf
│ ├── Poppins-BlackItalic.ttf
│ ├── Poppins-Bold.ttf
│ ├── Poppins-BoldItalic.ttf
│ ├── Poppins-ExtraBold.ttf
│ ├── Poppins-ExtraBoldItalic.ttf
│ ├── Poppins-ExtraLight.ttf
│ ├── Poppins-ExtraLightItalic.ttf
│ ├── Poppins-Italic.ttf
│ ├── Poppins-Light.ttf
│ ├── Poppins-LightItalic.ttf
│ ├── Poppins-Medium.ttf
│ ├── Poppins-MediumItalic.ttf
│ ├── Poppins-Regular.ttf
│ ├── Poppins-SemiBold.ttf
│ ├── Poppins-SemiBoldItalic.ttf
│ ├── Poppins-Thin.ttf
│ └── Poppins-ThinItalic.ttf
├── icons
│ └── menu.png
├── images
│ ├── exercises
│ │ ├── 1.png
│ │ ├── 2.png
│ │ ├── 3.png
│ │ ├── 4.png
│ │ ├── 5.png
│ │ ├── 6.png
│ │ ├── 7.png
│ │ └── 8.png
│ ├── facebook_logo.png
│ ├── google_logo.png
│ ├── healtho.png
│ ├── login_health.png
│ ├── onboard1.png
│ ├── onboard2.png
│ ├── onboard3.png
│ └── personal_trainer.png
└── langs
│ ├── en-US.json
│ └── tr-TR.json
├── github
├── healtoui2.gif
└── onboard.png
├── ios
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── flutter_export_environment.sh
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── 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
│ └── main.m
├── lib
├── core
│ ├── form_helper.dart
│ └── model
│ │ ├── onboard.dart
│ │ ├── physique.dart
│ │ └── tips.dart
├── main.dart
└── ui
│ ├── shared
│ ├── constants.dart
│ ├── text_style.dart
│ ├── theme.dart
│ ├── ui_helper.dart
│ └── widget
│ │ ├── button
│ │ └── rounded_text_button.dart
│ │ ├── card
│ │ ├── circle_card.dart
│ │ ├── icon_label_card.dart
│ │ └── rounded_rectange_card.dart
│ │ ├── dropdown
│ │ └── custom_dropdown_button.dart
│ │ ├── header
│ │ └── listview_header.dart
│ │ ├── icon
│ │ └── grey_icon.dart
│ │ ├── listview
│ │ └── padding_listview.dart
│ │ ├── onboard_widget.dart
│ │ ├── padding
│ │ ├── base_padding.dart
│ │ └── base_padding_enum.dart
│ │ ├── rounded_button_widget.dart
│ │ ├── settings_card_widget.dart
│ │ ├── space
│ │ └── empty_space.dart
│ │ ├── tabbar
│ │ └── padding_text_tab.dart
│ │ └── text
│ │ ├── colum_text.dart
│ │ ├── column_text_reverse.dart
│ │ └── subtitle.dart
│ └── views
│ ├── home
│ ├── exercise_tab
│ │ ├── find_workout_plan
│ │ │ ├── find_workout_plan.dart
│ │ │ ├── find_workout_plan_view.dart
│ │ │ └── find_workout_plan_view_model.dart
│ │ ├── introduction
│ │ │ ├── introduction.dart
│ │ │ ├── introduction_view.dart
│ │ │ └── introduction_view_model.dart
│ │ ├── muscle_binding
│ │ │ ├── muscle_binding.dart
│ │ │ ├── muscle_binding_view.dart
│ │ │ └── muscle_binding_view_model.dart
│ │ ├── tab
│ │ │ └── exercise_tab
│ │ │ │ ├── exercise_tab.dart
│ │ │ │ ├── exercise_tab_view.dart
│ │ │ │ └── exercise_tab_view_model.dart
│ │ └── workout_plan
│ │ │ ├── workout_plan.dart
│ │ │ ├── workout_plan_view.dart
│ │ │ └── workout_plan_view_model.dart
│ ├── home_tab_view.dart
│ ├── notifcation
│ │ └── notification_view.dart
│ ├── physiques
│ │ ├── pysiques_view.dart
│ │ └── radio_view.dart
│ ├── reminder
│ │ └── reminder_view.dart
│ ├── settings
│ │ └── profile_view.dart
│ ├── settings_view.dart
│ └── tips
│ │ ├── sub
│ │ ├── exercise_view.dart
│ │ ├── health_tips_detail_view.dart
│ │ └── health_tips_view.dart
│ │ └── user_programs_view.dart
│ └── login
│ ├── login_view.dart
│ ├── onboarding_view.dart
│ ├── phone_view.dart
│ ├── register_goal_view.dart
│ ├── register_view.dart
│ ├── splash_view.dart
│ ├── verify_phone.view.dart
│ └── verify_view.dart
├── pubspec.lock
├── pubspec.yaml
└── test
├── ui
└── login.dart
└── unit
└── login.dart
/.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 | # Visual Studio Code related
19 | .vscode/
20 |
21 | # Flutter/Dart/Pub related
22 | **/doc/api/
23 | .dart_tool/
24 | .flutter-plugins
25 | .packages
26 | .pub-cache/
27 | .pub/
28 | /build/
29 |
30 | # Android related
31 | **/android/**/gradle-wrapper.jar
32 | **/android/.gradle
33 | **/android/captures/
34 | **/android/gradlew
35 | **/android/gradlew.bat
36 | **/android/local.properties
37 | **/android/**/GeneratedPluginRegistrant.java
38 |
39 | # iOS/XCode related
40 | **/ios/**/*.mode1v3
41 | **/ios/**/*.mode2v3
42 | **/ios/**/*.moved-aside
43 | **/ios/**/*.pbxuser
44 | **/ios/**/*.perspectivev3
45 | **/ios/**/*sync/
46 | **/ios/**/.sconsign.dblite
47 | **/ios/**/.tags*
48 | **/ios/**/.vagrant/
49 | **/ios/**/DerivedData/
50 | **/ios/**/Icon?
51 | **/ios/**/Pods/
52 | **/ios/**/.symlinks/
53 | **/ios/**/profile
54 | **/ios/**/xcuserdata
55 | **/ios/.generated/
56 | **/ios/Flutter/App.framework
57 | **/ios/Flutter/Flutter.framework
58 | **/ios/Flutter/Generated.xcconfig
59 | **/ios/Flutter/app.flx
60 | **/ios/Flutter/app.zip
61 | **/ios/Flutter/flutter_assets/
62 | **/ios/ServiceDefinitions.json
63 | **/ios/Runner/GeneratedPluginRegistrant.*
64 |
65 | # Exceptions to above rules.
66 | !**/ios/**/default.mode1v3
67 | !**/ios/**/default.mode2v3
68 | !**/ios/**/default.pbxuser
69 | !**/ios/**/default.perspectivev3
70 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
71 |
--------------------------------------------------------------------------------
/.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: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b
8 | channel: stable
9 |
10 | project_type: app
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [2021] [Veli Bacik]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # healthoui
2 |
3 | [](https://app.codacy.com/app/VB10/HealthoUI?utm_source=github.com&utm_medium=referral&utm_content=VB10/HealthoUI&utm_campaign=Badge_Grade_Dashboard)
4 |
5 | A Flutter Project for ui.
6 |
7 | [](https://codemagic.io/apps/5d5c9c096722395cf808f810/5d5c9c096722395cf808f80f/latest_build)
8 |
9 | ## Getting Started
10 |
11 | Look at youtube/hardwareandro or twitter/10VBacik
12 |
13 | > Medium series [HeatlhoUIMediumPost](https://medium.com/flutter-t%C3%BCrkiye/flutter-healtho-ui-ad72c823e8b2)
14 |
15 | ## Images
16 |
17 | Login | Part Gif
18 | :-------------------------:|:-------------------------:
19 |  | 
20 |
21 | ## Thanks
22 |
23 | Healthou ui kit it's free.Thanks for share @Ashish Chutake
24 |
25 | > Detail [HealthoKit]([https://link](https://www.behance.net/gallery/79867353/Healtho-Self-Trainer-Gym-and-Fitness-App))
26 |
--------------------------------------------------------------------------------
/android/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | android
4 | Project android created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.buildship.core.gradleprojectbuilder
10 |
11 |
12 |
13 |
14 |
15 | org.eclipse.buildship.core.gradleprojectnature
16 |
17 |
18 |
--------------------------------------------------------------------------------
/android/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | connection.project.dir=
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/android/app/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/android/app/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | app
4 | Project app created by Buildship.
5 |
6 |
7 |
8 |
9 | org.eclipse.jdt.core.javabuilder
10 |
11 |
12 |
13 |
14 | org.eclipse.buildship.core.gradleprojectbuilder
15 |
16 |
17 |
18 |
19 |
20 | org.eclipse.jdt.core.javanature
21 | org.eclipse.buildship.core.gradleprojectnature
22 |
23 |
24 |
--------------------------------------------------------------------------------
/android/app/.settings/org.eclipse.buildship.core.prefs:
--------------------------------------------------------------------------------
1 | connection.project.dir=..
2 | eclipse.preferences.version=1
3 |
--------------------------------------------------------------------------------
/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 from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
26 |
27 | android {
28 | compileSdkVersion 28
29 |
30 | lintOptions {
31 | disable 'InvalidPackage'
32 | }
33 |
34 | defaultConfig {
35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
36 | applicationId "com.example.healthoui"
37 | minSdkVersion 16
38 | targetSdkVersion 28
39 | versionCode flutterVersionCode.toInteger()
40 | versionName flutterVersionName
41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
42 | }
43 |
44 | buildTypes {
45 | release {
46 | // TODO: Add your own signing config for the release build.
47 | // Signing with the debug keys for now, so `flutter run --release` works.
48 | signingConfig signingConfigs.debug
49 | }
50 | }
51 | }
52 |
53 | flutter {
54 | source '../..'
55 | }
56 |
57 | dependencies {
58 | testImplementation 'junit:junit:4.12'
59 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
61 | }
62 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
9 |
13 |
20 |
24 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/example/healthoui/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.example.healthoui;
2 |
3 | import android.os.Bundle;
4 | import io.flutter.app.FlutterActivity;
5 | import io.flutter.plugins.GeneratedPluginRegistrant;
6 |
7 | public class MainActivity extends FlutterActivity {
8 | @Override
9 | protected void onCreate(Bundle savedInstanceState) {
10 | super.onCreate(savedInstanceState);
11 | GeneratedPluginRegistrant.registerWith(this);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.2.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | }
18 |
19 | rootProject.buildDir = '../build'
20 | subprojects {
21 | project.buildDir = "${rootProject.buildDir}/${project.name}"
22 | }
23 | subprojects {
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.enableR8=true
3 |
--------------------------------------------------------------------------------
/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-4.10.2-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Black.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-BlackItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-BlackItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-BoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-ExtraBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-ExtraLight.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-ExtraLightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-ExtraLightItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Italic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Light.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-LightItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-MediumItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-MediumItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Regular.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-Thin.ttf
--------------------------------------------------------------------------------
/assets/fonts/Poppins-ThinItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/fonts/Poppins-ThinItalic.ttf
--------------------------------------------------------------------------------
/assets/icons/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/icons/menu.png
--------------------------------------------------------------------------------
/assets/images/exercises/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/1.png
--------------------------------------------------------------------------------
/assets/images/exercises/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/2.png
--------------------------------------------------------------------------------
/assets/images/exercises/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/3.png
--------------------------------------------------------------------------------
/assets/images/exercises/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/4.png
--------------------------------------------------------------------------------
/assets/images/exercises/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/5.png
--------------------------------------------------------------------------------
/assets/images/exercises/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/6.png
--------------------------------------------------------------------------------
/assets/images/exercises/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/7.png
--------------------------------------------------------------------------------
/assets/images/exercises/8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/exercises/8.png
--------------------------------------------------------------------------------
/assets/images/facebook_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/facebook_logo.png
--------------------------------------------------------------------------------
/assets/images/google_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/google_logo.png
--------------------------------------------------------------------------------
/assets/images/healtho.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/healtho.png
--------------------------------------------------------------------------------
/assets/images/login_health.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/login_health.png
--------------------------------------------------------------------------------
/assets/images/onboard1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/onboard1.png
--------------------------------------------------------------------------------
/assets/images/onboard2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/onboard2.png
--------------------------------------------------------------------------------
/assets/images/onboard3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/onboard3.png
--------------------------------------------------------------------------------
/assets/images/personal_trainer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/images/personal_trainer.png
--------------------------------------------------------------------------------
/assets/langs/en-US.json:
--------------------------------------------------------------------------------
1 | {
2 | "title": "Healtho",
3 | "verify": "VERIFY ",
4 | "phoneViewTitle": "Enter your Mobile Number2",
5 | "clickMe": "Click me",
6 | "profile": {
7 | "reset_password": {
8 | "title": "Reset Password only lang code",
9 | "username": "Username",
10 | "password": "password"
11 | }
12 | },
13 | "clicked": {
14 | "zero": "You clicked {} times!",
15 | "one": "You clicked {} time!",
16 | "other": "You clicked {} times!"
17 | }
18 | }
--------------------------------------------------------------------------------
/assets/langs/tr-TR.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/assets/langs/tr-TR.json
--------------------------------------------------------------------------------
/github/healtoui2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/github/healtoui2.gif
--------------------------------------------------------------------------------
/github/onboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/github/onboard.png
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 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/Flutter/flutter_export_environment.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # This is a generated file; do not edit or check into version control.
3 | export "FLUTTER_ROOT=/Users/a02484320/flutter"
4 | export "FLUTTER_APPLICATION_PATH=/Users/a02484320/Desktop/flutter/HealthoUI"
5 | export "FLUTTER_TARGET=lib/main.dart"
6 | export "FLUTTER_BUILD_DIR=build"
7 | export "SYMROOT=${SOURCE_ROOT}/../build/ios"
8 | export "FLUTTER_FRAMEWORK_DIR=/Users/a02484320/flutter/bin/cache/artifacts/engine/ios"
9 | export "FLUTTER_BUILD_NAME=1.0.0"
10 | export "FLUTTER_BUILD_NUMBER=1"
11 |
--------------------------------------------------------------------------------
/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 parse_KV_file(file, separator='=')
14 | file_abs_path = File.expand_path(file)
15 | if !File.exists? file_abs_path
16 | return [];
17 | end
18 | pods_ary = []
19 | skip_line_start_symbols = ["#", "/"]
20 | File.foreach(file_abs_path) { |line|
21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
22 | plugin = line.split(pattern=separator)
23 | if plugin.length == 2
24 | podname = plugin[0].strip()
25 | path = plugin[1].strip()
26 | podpath = File.expand_path("#{path}", file_abs_path)
27 | pods_ary.push({:name => podname, :path => podpath});
28 | else
29 | puts "Invalid plugin specification: #{line}"
30 | end
31 | }
32 | return pods_ary
33 | end
34 |
35 | target 'Runner' do
36 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
37 | # referring to absolute paths on developers' machines.
38 | system('rm -rf .symlinks')
39 | system('mkdir -p .symlinks/plugins')
40 |
41 | # Flutter Pods
42 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
43 | if generated_xcode_build_settings.empty?
44 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first."
45 | end
46 | generated_xcode_build_settings.map { |p|
47 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
48 | symlink = File.join('.symlinks', 'flutter')
49 | File.symlink(File.dirname(p[:path]), symlink)
50 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
51 | end
52 | }
53 |
54 | # Plugin Pods
55 | plugin_pods = parse_KV_file('../.flutter-plugins')
56 | plugin_pods.map { |p|
57 | symlink = File.join('.symlinks', 'plugins', p[:name])
58 | File.symlink(p[:path], symlink)
59 | pod p[:name], :path => File.join(symlink, 'ios')
60 | }
61 | end
62 |
63 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
64 | install! 'cocoapods', :disable_input_output_paths => true
65 |
66 | post_install do |installer|
67 | installer.pods_project.targets.each do |target|
68 | target.build_configurations.each do |config|
69 | config.build_settings['ENABLE_BITCODE'] = 'NO'
70 | end
71 | end
72 | end
73 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Flutter (1.0.0)
3 | - shared_preferences (0.0.1):
4 | - Flutter
5 |
6 | DEPENDENCIES:
7 | - Flutter (from `.symlinks/flutter/ios`)
8 | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
9 |
10 | EXTERNAL SOURCES:
11 | Flutter:
12 | :path: ".symlinks/flutter/ios"
13 | shared_preferences:
14 | :path: ".symlinks/plugins/shared_preferences/ios"
15 |
16 | SPEC CHECKSUMS:
17 | Flutter: 58dd7d1b27887414a370fcccb9e645c08ffd7a6a
18 | shared_preferences: 1feebfa37bb57264736e16865e7ffae7fc99b523
19 |
20 | PODFILE CHECKSUM: 7fb83752f59ead6285236625b82473f90b1cb932
21 |
22 | COCOAPODS: 1.6.2
23 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
14 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
15 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
16 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
17 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
18 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
22 | B9C4824FC3CB118066EB2A0E /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C55945B13D4060CA0AB545BE /* libPods-Runner.a */; };
23 | /* End PBXBuildFile section */
24 |
25 | /* Begin PBXCopyFilesBuildPhase section */
26 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
27 | isa = PBXCopyFilesBuildPhase;
28 | buildActionMask = 2147483647;
29 | dstPath = "";
30 | dstSubfolderSpec = 10;
31 | files = (
32 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
33 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
34 | );
35 | name = "Embed Frameworks";
36 | runOnlyForDeploymentPostprocessing = 0;
37 | };
38 | /* End PBXCopyFilesBuildPhase section */
39 |
40 | /* Begin PBXFileReference section */
41 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
42 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
43 | 2280AA3A849B20B2162A9298 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
44 | 35C5CB12C2E3C7498FCDD04E /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
45 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
46 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; };
47 | 60239B2AC3608F6B6D0A26E4 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
48 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
49 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
50 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
51 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
52 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
53 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; };
54 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
55 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
56 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
57 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
58 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
59 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
60 | C55945B13D4060CA0AB545BE /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
61 | /* End PBXFileReference section */
62 |
63 | /* Begin PBXFrameworksBuildPhase section */
64 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
65 | isa = PBXFrameworksBuildPhase;
66 | buildActionMask = 2147483647;
67 | files = (
68 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
69 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
70 | B9C4824FC3CB118066EB2A0E /* libPods-Runner.a in Frameworks */,
71 | );
72 | runOnlyForDeploymentPostprocessing = 0;
73 | };
74 | /* End PBXFrameworksBuildPhase section */
75 |
76 | /* Begin PBXGroup section */
77 | 1A4B8AA98BDE9F8E6471C620 /* Pods */ = {
78 | isa = PBXGroup;
79 | children = (
80 | 60239B2AC3608F6B6D0A26E4 /* Pods-Runner.debug.xcconfig */,
81 | 2280AA3A849B20B2162A9298 /* Pods-Runner.release.xcconfig */,
82 | 35C5CB12C2E3C7498FCDD04E /* Pods-Runner.profile.xcconfig */,
83 | );
84 | name = Pods;
85 | path = Pods;
86 | sourceTree = "";
87 | };
88 | 21E163A54D90256F519C349C /* Frameworks */ = {
89 | isa = PBXGroup;
90 | children = (
91 | C55945B13D4060CA0AB545BE /* libPods-Runner.a */,
92 | );
93 | name = Frameworks;
94 | sourceTree = "";
95 | };
96 | 9740EEB11CF90186004384FC /* Flutter */ = {
97 | isa = PBXGroup;
98 | children = (
99 | 3B80C3931E831B6300D905FE /* App.framework */,
100 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
101 | 9740EEBA1CF902C7004384FC /* Flutter.framework */,
102 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
103 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
104 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
105 | );
106 | name = Flutter;
107 | sourceTree = "";
108 | };
109 | 97C146E51CF9000F007C117D = {
110 | isa = PBXGroup;
111 | children = (
112 | 9740EEB11CF90186004384FC /* Flutter */,
113 | 97C146F01CF9000F007C117D /* Runner */,
114 | 97C146EF1CF9000F007C117D /* Products */,
115 | 1A4B8AA98BDE9F8E6471C620 /* Pods */,
116 | 21E163A54D90256F519C349C /* Frameworks */,
117 | );
118 | sourceTree = "";
119 | };
120 | 97C146EF1CF9000F007C117D /* Products */ = {
121 | isa = PBXGroup;
122 | children = (
123 | 97C146EE1CF9000F007C117D /* Runner.app */,
124 | );
125 | name = Products;
126 | sourceTree = "";
127 | };
128 | 97C146F01CF9000F007C117D /* Runner */ = {
129 | isa = PBXGroup;
130 | children = (
131 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
132 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
133 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
134 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
135 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
136 | 97C147021CF9000F007C117D /* Info.plist */,
137 | 97C146F11CF9000F007C117D /* Supporting Files */,
138 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
139 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
140 | );
141 | path = Runner;
142 | sourceTree = "";
143 | };
144 | 97C146F11CF9000F007C117D /* Supporting Files */ = {
145 | isa = PBXGroup;
146 | children = (
147 | 97C146F21CF9000F007C117D /* main.m */,
148 | );
149 | name = "Supporting Files";
150 | sourceTree = "";
151 | };
152 | /* End PBXGroup section */
153 |
154 | /* Begin PBXNativeTarget section */
155 | 97C146ED1CF9000F007C117D /* Runner */ = {
156 | isa = PBXNativeTarget;
157 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
158 | buildPhases = (
159 | DF227648A1722B09C8C70930 /* [CP] Check Pods Manifest.lock */,
160 | 9740EEB61CF901F6004384FC /* Run Script */,
161 | 97C146EA1CF9000F007C117D /* Sources */,
162 | 97C146EB1CF9000F007C117D /* Frameworks */,
163 | 97C146EC1CF9000F007C117D /* Resources */,
164 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
165 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
166 | 994DBA5E5132AAE1FA28168B /* [CP] Embed Pods Frameworks */,
167 | );
168 | buildRules = (
169 | );
170 | dependencies = (
171 | );
172 | name = Runner;
173 | productName = Runner;
174 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
175 | productType = "com.apple.product-type.application";
176 | };
177 | /* End PBXNativeTarget section */
178 |
179 | /* Begin PBXProject section */
180 | 97C146E61CF9000F007C117D /* Project object */ = {
181 | isa = PBXProject;
182 | attributes = {
183 | LastUpgradeCheck = 0910;
184 | ORGANIZATIONNAME = "The Chromium Authors";
185 | TargetAttributes = {
186 | 97C146ED1CF9000F007C117D = {
187 | CreatedOnToolsVersion = 7.3.1;
188 | };
189 | };
190 | };
191 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
192 | compatibilityVersion = "Xcode 3.2";
193 | developmentRegion = English;
194 | hasScannedForEncodings = 0;
195 | knownRegions = (
196 | en,
197 | Base,
198 | );
199 | mainGroup = 97C146E51CF9000F007C117D;
200 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
201 | projectDirPath = "";
202 | projectRoot = "";
203 | targets = (
204 | 97C146ED1CF9000F007C117D /* Runner */,
205 | );
206 | };
207 | /* End PBXProject section */
208 |
209 | /* Begin PBXResourcesBuildPhase section */
210 | 97C146EC1CF9000F007C117D /* Resources */ = {
211 | isa = PBXResourcesBuildPhase;
212 | buildActionMask = 2147483647;
213 | files = (
214 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
215 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
216 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
217 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
218 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
219 | );
220 | runOnlyForDeploymentPostprocessing = 0;
221 | };
222 | /* End PBXResourcesBuildPhase section */
223 |
224 | /* Begin PBXShellScriptBuildPhase section */
225 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
226 | isa = PBXShellScriptBuildPhase;
227 | buildActionMask = 2147483647;
228 | files = (
229 | );
230 | inputPaths = (
231 | );
232 | name = "Thin Binary";
233 | outputPaths = (
234 | );
235 | runOnlyForDeploymentPostprocessing = 0;
236 | shellPath = /bin/sh;
237 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
238 | };
239 | 9740EEB61CF901F6004384FC /* Run Script */ = {
240 | isa = PBXShellScriptBuildPhase;
241 | buildActionMask = 2147483647;
242 | files = (
243 | );
244 | inputPaths = (
245 | );
246 | name = "Run Script";
247 | outputPaths = (
248 | );
249 | runOnlyForDeploymentPostprocessing = 0;
250 | shellPath = /bin/sh;
251 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
252 | };
253 | 994DBA5E5132AAE1FA28168B /* [CP] Embed Pods Frameworks */ = {
254 | isa = PBXShellScriptBuildPhase;
255 | buildActionMask = 2147483647;
256 | files = (
257 | );
258 | inputFileListPaths = (
259 | );
260 | inputPaths = (
261 | );
262 | name = "[CP] Embed Pods Frameworks";
263 | outputFileListPaths = (
264 | );
265 | outputPaths = (
266 | );
267 | runOnlyForDeploymentPostprocessing = 0;
268 | shellPath = /bin/sh;
269 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
270 | showEnvVarsInLog = 0;
271 | };
272 | DF227648A1722B09C8C70930 /* [CP] Check Pods Manifest.lock */ = {
273 | isa = PBXShellScriptBuildPhase;
274 | buildActionMask = 2147483647;
275 | files = (
276 | );
277 | inputFileListPaths = (
278 | );
279 | inputPaths = (
280 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
281 | "${PODS_ROOT}/Manifest.lock",
282 | );
283 | name = "[CP] Check Pods Manifest.lock";
284 | outputFileListPaths = (
285 | );
286 | outputPaths = (
287 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
288 | );
289 | runOnlyForDeploymentPostprocessing = 0;
290 | shellPath = /bin/sh;
291 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
292 | showEnvVarsInLog = 0;
293 | };
294 | /* End PBXShellScriptBuildPhase section */
295 |
296 | /* Begin PBXSourcesBuildPhase section */
297 | 97C146EA1CF9000F007C117D /* Sources */ = {
298 | isa = PBXSourcesBuildPhase;
299 | buildActionMask = 2147483647;
300 | files = (
301 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
302 | 97C146F31CF9000F007C117D /* main.m in Sources */,
303 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
304 | );
305 | runOnlyForDeploymentPostprocessing = 0;
306 | };
307 | /* End PBXSourcesBuildPhase section */
308 |
309 | /* Begin PBXVariantGroup section */
310 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
311 | isa = PBXVariantGroup;
312 | children = (
313 | 97C146FB1CF9000F007C117D /* Base */,
314 | );
315 | name = Main.storyboard;
316 | sourceTree = "";
317 | };
318 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
319 | isa = PBXVariantGroup;
320 | children = (
321 | 97C147001CF9000F007C117D /* Base */,
322 | );
323 | name = LaunchScreen.storyboard;
324 | sourceTree = "";
325 | };
326 | /* End PBXVariantGroup section */
327 |
328 | /* Begin XCBuildConfiguration section */
329 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
330 | isa = XCBuildConfiguration;
331 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
332 | buildSettings = {
333 | ALWAYS_SEARCH_USER_PATHS = NO;
334 | CLANG_ANALYZER_NONNULL = YES;
335 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
336 | CLANG_CXX_LIBRARY = "libc++";
337 | CLANG_ENABLE_MODULES = YES;
338 | CLANG_ENABLE_OBJC_ARC = YES;
339 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
340 | CLANG_WARN_BOOL_CONVERSION = YES;
341 | CLANG_WARN_COMMA = YES;
342 | CLANG_WARN_CONSTANT_CONVERSION = YES;
343 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
344 | CLANG_WARN_EMPTY_BODY = YES;
345 | CLANG_WARN_ENUM_CONVERSION = YES;
346 | CLANG_WARN_INFINITE_RECURSION = YES;
347 | CLANG_WARN_INT_CONVERSION = YES;
348 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
349 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
350 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
351 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
352 | CLANG_WARN_STRICT_PROTOTYPES = YES;
353 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
354 | CLANG_WARN_UNREACHABLE_CODE = YES;
355 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
356 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
357 | COPY_PHASE_STRIP = NO;
358 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
359 | ENABLE_NS_ASSERTIONS = NO;
360 | ENABLE_STRICT_OBJC_MSGSEND = YES;
361 | GCC_C_LANGUAGE_STANDARD = gnu99;
362 | GCC_NO_COMMON_BLOCKS = YES;
363 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
364 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
365 | GCC_WARN_UNDECLARED_SELECTOR = YES;
366 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
367 | GCC_WARN_UNUSED_FUNCTION = YES;
368 | GCC_WARN_UNUSED_VARIABLE = YES;
369 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
370 | MTL_ENABLE_DEBUG_INFO = NO;
371 | SDKROOT = iphoneos;
372 | TARGETED_DEVICE_FAMILY = "1,2";
373 | VALIDATE_PRODUCT = YES;
374 | };
375 | name = Profile;
376 | };
377 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
378 | isa = XCBuildConfiguration;
379 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
380 | buildSettings = {
381 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
382 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
383 | DEVELOPMENT_TEAM = S8QB4VV633;
384 | ENABLE_BITCODE = NO;
385 | FRAMEWORK_SEARCH_PATHS = (
386 | "$(inherited)",
387 | "$(PROJECT_DIR)/Flutter",
388 | );
389 | INFOPLIST_FILE = Runner/Info.plist;
390 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
391 | LIBRARY_SEARCH_PATHS = (
392 | "$(inherited)",
393 | "$(PROJECT_DIR)/Flutter",
394 | );
395 | PRODUCT_BUNDLE_IDENTIFIER = com.example.healthoui;
396 | PRODUCT_NAME = "$(TARGET_NAME)";
397 | VERSIONING_SYSTEM = "apple-generic";
398 | };
399 | name = Profile;
400 | };
401 | 97C147031CF9000F007C117D /* Debug */ = {
402 | isa = XCBuildConfiguration;
403 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
404 | buildSettings = {
405 | ALWAYS_SEARCH_USER_PATHS = NO;
406 | CLANG_ANALYZER_NONNULL = YES;
407 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
408 | CLANG_CXX_LIBRARY = "libc++";
409 | CLANG_ENABLE_MODULES = YES;
410 | CLANG_ENABLE_OBJC_ARC = YES;
411 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
412 | CLANG_WARN_BOOL_CONVERSION = YES;
413 | CLANG_WARN_COMMA = YES;
414 | CLANG_WARN_CONSTANT_CONVERSION = YES;
415 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
416 | CLANG_WARN_EMPTY_BODY = YES;
417 | CLANG_WARN_ENUM_CONVERSION = YES;
418 | CLANG_WARN_INFINITE_RECURSION = YES;
419 | CLANG_WARN_INT_CONVERSION = YES;
420 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
421 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
422 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
423 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
424 | CLANG_WARN_STRICT_PROTOTYPES = YES;
425 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
426 | CLANG_WARN_UNREACHABLE_CODE = YES;
427 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
428 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
429 | COPY_PHASE_STRIP = NO;
430 | DEBUG_INFORMATION_FORMAT = dwarf;
431 | ENABLE_STRICT_OBJC_MSGSEND = YES;
432 | ENABLE_TESTABILITY = YES;
433 | GCC_C_LANGUAGE_STANDARD = gnu99;
434 | GCC_DYNAMIC_NO_PIC = NO;
435 | GCC_NO_COMMON_BLOCKS = YES;
436 | GCC_OPTIMIZATION_LEVEL = 0;
437 | GCC_PREPROCESSOR_DEFINITIONS = (
438 | "DEBUG=1",
439 | "$(inherited)",
440 | );
441 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
442 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
443 | GCC_WARN_UNDECLARED_SELECTOR = YES;
444 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
445 | GCC_WARN_UNUSED_FUNCTION = YES;
446 | GCC_WARN_UNUSED_VARIABLE = YES;
447 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
448 | MTL_ENABLE_DEBUG_INFO = YES;
449 | ONLY_ACTIVE_ARCH = YES;
450 | SDKROOT = iphoneos;
451 | TARGETED_DEVICE_FAMILY = "1,2";
452 | };
453 | name = Debug;
454 | };
455 | 97C147041CF9000F007C117D /* Release */ = {
456 | isa = XCBuildConfiguration;
457 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
458 | buildSettings = {
459 | ALWAYS_SEARCH_USER_PATHS = NO;
460 | CLANG_ANALYZER_NONNULL = YES;
461 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
462 | CLANG_CXX_LIBRARY = "libc++";
463 | CLANG_ENABLE_MODULES = YES;
464 | CLANG_ENABLE_OBJC_ARC = YES;
465 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
466 | CLANG_WARN_BOOL_CONVERSION = YES;
467 | CLANG_WARN_COMMA = YES;
468 | CLANG_WARN_CONSTANT_CONVERSION = YES;
469 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
470 | CLANG_WARN_EMPTY_BODY = YES;
471 | CLANG_WARN_ENUM_CONVERSION = YES;
472 | CLANG_WARN_INFINITE_RECURSION = YES;
473 | CLANG_WARN_INT_CONVERSION = YES;
474 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
475 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
476 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
477 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
478 | CLANG_WARN_STRICT_PROTOTYPES = YES;
479 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
480 | CLANG_WARN_UNREACHABLE_CODE = YES;
481 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
482 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
483 | COPY_PHASE_STRIP = NO;
484 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
485 | ENABLE_NS_ASSERTIONS = NO;
486 | ENABLE_STRICT_OBJC_MSGSEND = YES;
487 | GCC_C_LANGUAGE_STANDARD = gnu99;
488 | GCC_NO_COMMON_BLOCKS = YES;
489 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
490 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
491 | GCC_WARN_UNDECLARED_SELECTOR = YES;
492 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
493 | GCC_WARN_UNUSED_FUNCTION = YES;
494 | GCC_WARN_UNUSED_VARIABLE = YES;
495 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
496 | MTL_ENABLE_DEBUG_INFO = NO;
497 | SDKROOT = iphoneos;
498 | TARGETED_DEVICE_FAMILY = "1,2";
499 | VALIDATE_PRODUCT = YES;
500 | };
501 | name = Release;
502 | };
503 | 97C147061CF9000F007C117D /* Debug */ = {
504 | isa = XCBuildConfiguration;
505 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
506 | buildSettings = {
507 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
508 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
509 | ENABLE_BITCODE = NO;
510 | FRAMEWORK_SEARCH_PATHS = (
511 | "$(inherited)",
512 | "$(PROJECT_DIR)/Flutter",
513 | );
514 | INFOPLIST_FILE = Runner/Info.plist;
515 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
516 | LIBRARY_SEARCH_PATHS = (
517 | "$(inherited)",
518 | "$(PROJECT_DIR)/Flutter",
519 | );
520 | PRODUCT_BUNDLE_IDENTIFIER = com.example.healthoui;
521 | PRODUCT_NAME = "$(TARGET_NAME)";
522 | VERSIONING_SYSTEM = "apple-generic";
523 | };
524 | name = Debug;
525 | };
526 | 97C147071CF9000F007C117D /* Release */ = {
527 | isa = XCBuildConfiguration;
528 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
529 | buildSettings = {
530 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
531 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
532 | ENABLE_BITCODE = NO;
533 | FRAMEWORK_SEARCH_PATHS = (
534 | "$(inherited)",
535 | "$(PROJECT_DIR)/Flutter",
536 | );
537 | INFOPLIST_FILE = Runner/Info.plist;
538 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
539 | LIBRARY_SEARCH_PATHS = (
540 | "$(inherited)",
541 | "$(PROJECT_DIR)/Flutter",
542 | );
543 | PRODUCT_BUNDLE_IDENTIFIER = com.example.healthoui;
544 | PRODUCT_NAME = "$(TARGET_NAME)";
545 | VERSIONING_SYSTEM = "apple-generic";
546 | };
547 | name = Release;
548 | };
549 | /* End XCBuildConfiguration section */
550 |
551 | /* Begin XCConfigurationList section */
552 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
553 | isa = XCConfigurationList;
554 | buildConfigurations = (
555 | 97C147031CF9000F007C117D /* Debug */,
556 | 97C147041CF9000F007C117D /* Release */,
557 | 249021D3217E4FDB00AE95B9 /* Profile */,
558 | );
559 | defaultConfigurationIsVisible = 0;
560 | defaultConfigurationName = Release;
561 | };
562 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
563 | isa = XCConfigurationList;
564 | buildConfigurations = (
565 | 97C147061CF9000F007C117D /* Debug */,
566 | 97C147071CF9000F007C117D /* Release */,
567 | 249021D4217E4FDB00AE95B9 /* Profile */,
568 | );
569 | defaultConfigurationIsVisible = 0;
570 | defaultConfigurationName = Release;
571 | };
572 | /* End XCConfigurationList section */
573 | };
574 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
575 | }
576 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
56 |
58 |
64 |
65 |
66 |
67 |
68 |
69 |
75 |
77 |
83 |
84 |
85 |
86 |
88 |
89 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | BuildSystemType
6 | Original
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application
7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
8 | [GeneratedPluginRegistrant registerWithRegistry:self];
9 | // Override point for customization after application launch.
10 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
11 | }
12 |
13 | @end
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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/VB10/HealthoUI/9fca7db8941f58f1020a99ddab88ae37f78f6254/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 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | healthoui
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | $(FLUTTER_BUILD_NAME)
19 | CFBundleSignature
20 | ????
21 | io.flutter.embedded_views_preview
22 |
23 | CFBundleVersion
24 | $(FLUTTER_BUILD_NUMBER)
25 | LSRequiresIPhoneOS
26 |
27 | UILaunchStoryboardName
28 | LaunchScreen
29 | UIMainStoryboardFile
30 | Main
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | UIViewControllerBasedStatusBarAppearance
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char* argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/lib/core/form_helper.dart:
--------------------------------------------------------------------------------
1 | import 'package:healthoui/ui/shared/constants.dart';
2 |
3 | class FormHelper {
4 | /// Validate Phone Number(Temp Regx)
5 | /// @param [phone]
6 | ///
7 | /// @result
8 | /// if empty phone number return [Must be write number]
9 | /// if [phone] for match regx [Constants.phoneRegexp] format return null so it's true
10 | /// or return correct [phone] for [Constants.phoneRegexp]
11 | ///
12 | /// [phone] not empty must be required
13 | static String checkPhoneNumber(String phone) {
14 | if (phone.isEmpty) {
15 | return "Must be write number";
16 | } else {
17 | final _phoneRegex = Constants.phoneRegexp;
18 | if (!_phoneRegex.hasMatch(phone)) {
19 | return "Pls try to follow format.(12345)";
20 | }
21 | //if all state true
22 | return null;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/lib/core/model/onboard.dart:
--------------------------------------------------------------------------------
1 | class OnBoard {
2 | final String title;
3 | final String subTitle;
4 | final String imagePath;
5 |
6 | OnBoard(this.title, this.subTitle, this.imagePath);
7 | }
8 |
--------------------------------------------------------------------------------
/lib/core/model/physique.dart:
--------------------------------------------------------------------------------
1 | class Physique {
2 | String age;
3 | String height;
4 | String weight;
5 | String level;
6 |
7 | Physique({this.age, this.height, this.weight, this.level});
8 | }
9 |
--------------------------------------------------------------------------------
/lib/core/model/tips.dart:
--------------------------------------------------------------------------------
1 | class HealthTips {
2 | final String title;
3 | final String subTitle;
4 | final String image;
5 |
6 | HealthTips({this.title, this.subTitle, this.image});
7 | }
8 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:easy_localization/easy_localization.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter/services.dart';
4 | import 'package:healthoui/ui/views/home/exercise_tab/find_workout_plan/find_workout_plan.dart';
5 | import 'package:healthoui/ui/views/home/exercise_tab/introduction/introduction.dart';
6 | import 'package:healthoui/ui/views/home/exercise_tab/muscle_binding/muscle_binding.dart';
7 | import 'package:healthoui/ui/views/home/exercise_tab/tab/exercise_tab/exercise_tab_view.dart';
8 | import 'package:healthoui/ui/views/home/exercise_tab/workout_plan/workout_plan.dart';
9 |
10 | import 'ui/shared/theme.dart';
11 | import 'ui/views/home/exercise_tab/tab/exercise_tab/exercise_tab.dart';
12 | import 'ui/views/home/home_tab_view.dart';
13 | import 'ui/views/home/physiques/pysiques_view.dart';
14 | import 'ui/views/home/settings/profile_view.dart';
15 | import 'ui/views/home/tips/sub/health_tips_detail_view.dart';
16 | import 'ui/views/login/login_view.dart';
17 | import 'ui/views/login/onboarding_view.dart';
18 | import 'ui/views/login/phone_view.dart';
19 | import 'ui/views/login/register_goal_view.dart';
20 | import 'ui/views/login/register_view.dart';
21 | import 'ui/views/login/verify_phone.view.dart';
22 | import 'ui/views/login/verify_view.dart';
23 |
24 | void main() {
25 | // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
26 | // systemNavigationBarColor: Colors.blue, // navigation bar color
27 | // statusBarColor: Colors.pink, // status bar color
28 | // ));
29 | runApp(EasyLocalization(child: MyApp()));
30 | }
31 |
32 | class MyApp extends StatelessWidget {
33 | @override
34 | Widget build(BuildContext context) {
35 | var data = EasyLocalizationProvider.of(context).data;
36 | // SystemChrome.setSystemUIOverlayStyle(
37 | // SystemUiOverlayStyle(statusBarColor: Colors.white));
38 | return EasyLocalizationProvider(
39 | data: data,
40 | child: MaterialApp(
41 | localizationsDelegates: [
42 | EasylocaLizationDelegate(locale: data.locale, path: 'assets/langs'),
43 | ],
44 | supportedLocales: [Locale('en', 'US'), Locale('tr', 'TR')],
45 | title: 'Material App',
46 | initialRoute: "/exerciseTab",
47 | locale: data.savedLocale,
48 | theme: healthoTheme,
49 | routes: {
50 | // "/": (context) => SplashView(),
51 | "/": (context) => PhoneView(),
52 | "/onboard": (context) => OnBoardingView(),
53 | "/login": (context) => LoginView(),
54 | "/phone": (context) => PhoneView(),
55 | "/verify": (context) => VerifyView(),
56 | "/verifyPhone": (context) => VerifyPhoneView(),
57 | "/userRegister": (context) => UserRegisterView(),
58 | "/userGoal": (context) => UserRegisterGoalView(),
59 | "/hometab": (context) => HomeTabView(),
60 | "/profile": (context) => ProfileView(),
61 | "/healthTipsDetail": (context) => HealthTipsDetailView(),
62 | "/physiques": (context) => PysiquesView(),
63 | "/workout": (_) => WorkoutPlan(),
64 | "/exerciseTab": (_) => ExerciseTab(),
65 | },
66 | ),
67 | );
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/lib/ui/shared/constants.dart:
--------------------------------------------------------------------------------
1 | class Constants {
2 | static const String PROFILE_IMAGE =
3 | "https://avatars0.githubusercontent.com/u/17102578?s=460&v=4";
4 |
5 | static final RegExp phoneRegexp = RegExp(r"^\d{5}$");
6 | static const int REMINDER_COUNT = 5;
7 | static const int TABBAR_COUNT = 4;
8 |
9 | static const String SETTINGS_TITLE = "Settings";
10 | static const String REMINDER_TITLE = "Reminder";
11 | static const String NOTIFICATION_TITLE = "Notification";
12 | static const String TIPS = "Tips";
13 |
14 | static const String LANGUAGE_OPTIONS = "Language Options";
15 | static const String HEALTH_DATA = "Health Data";
16 | static const String NOTIFICATIONS = "Notifications";
17 | static const String REFER_FRIEND = "Refer a Friend";
18 | static const String FEEDBACK = "FeedBack";
19 | static const String RATE_US = "Rate Us";
20 | static const String LOG_OUT = "Log Out";
21 |
22 | static const String HEALTH_TIPS = "Health Tips";
23 | static const String HEALTH_EXERCISES = "Exercises";
24 | static const String HEALTH_WORKOUT_PLAN = "Health Workout Plan";
25 |
26 |
27 | static const List LANGUAGES = ["Eng", "Tr"];
28 | }
29 |
--------------------------------------------------------------------------------
/lib/ui/shared/text_style.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'ui_helper.dart';
4 |
5 | final phoneInputFieldBorderColor = Color.fromRGBO(212, 212, 212, 1);
6 | final phoneInputTextColor = Color.fromRGBO(148, 165, 166, 1);
7 | final phoneInputBackgroundColor = Color.fromRGBO(212, 212, 212, 0.5);
8 | final phoneVerifyButtonColor = Color.fromRGBO(241, 196, 14, 1);
9 | final phoneVerifyResendTextColor = Color.fromRGBO(142, 68, 173, 1);
10 | final goalCardRaisedColor = Color.fromRGBO(252, 251, 251, 1);
11 |
12 | final onBoardingNextButtonStyle = TextStyle(fontWeight: FontWeight.w600);
13 | final onBoardingTitleTextStyle =
14 | TextStyle(fontWeight: FontWeight.bold, fontSize: UIHelper.Space25);
15 |
16 | final profileHeaderCardTitle =
17 | TextStyle(fontSize: 18, color: Colors.black, fontWeight: FontWeight.w700);
18 | final profileHeaderCardSubTitle =
19 | TextStyle(fontSize: 15, color: Colors.black, fontWeight: FontWeight.w600);
20 | final profileHeaderCardNormalTitle =
21 | TextStyle(fontSize: 12, color: Colors.black, fontWeight: FontWeight.w400);
22 | final profileHeaderCardNormalYellowTitle =
23 | TextStyle(fontSize: 12, color: Colors.yellow[600], fontWeight: FontWeight.w600);
24 |
25 |
26 |
27 |
28 |
29 | final onBoardingSubTitleTextStyle =
30 | TextStyle(fontWeight: FontWeight.w400, fontSize: UIHelper.Space15);
31 | final phoneTextInputHintTextStyle = TextStyle(
32 | fontSize: UIHelper.Space14,
33 | fontWeight: FontWeight.w600,
34 | color: phoneInputTextColor);
35 | final phoneTitleTextStyle =
36 | TextStyle(fontSize: 14, fontWeight: FontWeight.w600);
37 | final phoneTitleTextRegularStyle =
38 | TextStyle(fontSize: 14, fontWeight: FontWeight.w400);
39 | final phoneVerifyCodeText =
40 | TextStyle(fontSize: UIHelper.dynamicSp(50), fontWeight: FontWeight.w700);
41 | final userRegisterPageTitleStyle =
42 | TextStyle(fontWeight: FontWeight.bold, fontSize: UIHelper.Space20);
43 |
44 | final circleTextInputDecoration = OutlineInputBorder(
45 | borderSide: BorderSide(width: 2, color: phoneInputFieldBorderColor),
46 | borderRadius: BorderRadius.circular(UIHelper.Space50));
47 | final goalCardInputDecoration = OutlineInputBorder(
48 | borderRadius: BorderRadius.circular(UIHelper.Space35),
49 | borderSide: BorderSide(color: Colors.grey[300]));
50 |
--------------------------------------------------------------------------------
/lib/ui/shared/theme.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final yellowSearchCardColor = Color.fromRGBO(241, 196, 14, 1);
4 | final greyCardColor = Color.fromRGBO(240, 240, 243, 1);
5 |
6 | final healthoTheme = ThemeData(
7 | fontFamily: "Poppins",
8 | textTheme: TextTheme(
9 | subhead: TextStyle(
10 | fontSize: 14, color: Colors.black, fontWeight: FontWeight.w700),
11 | body1: TextStyle(
12 | fontSize: 18, color: Colors.black, fontWeight: FontWeight.w600),
13 | ),
14 | );
15 |
--------------------------------------------------------------------------------
/lib/ui/shared/ui_helper.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:flutter_screenutil/flutter_screenutil.dart';
5 |
6 | class UIHelper {
7 | static const String HEALTHO_ICON = "assets/images/healtho.png";
8 | static const String LOGIN_HEALTH_IMAGE = "assets/images/login_health.png";
9 | static const String FACEBOOK_ICON = "assets/images/facebook_logo.png";
10 | static const String GOOGLE_ICON = "assets/images/google_logo.png";
11 | static const String MENU_ICON = "assets/icons/menu.png";
12 |
13 | static const String PERSONAL_TRAINER = "assets/images/personal_trainer.png";
14 |
15 | static const Color SETTINGS_APP_BAR_COLOR = Color.fromRGBO(16, 43, 70, 1);
16 | static const Color REMINDER_CARD_YELLOW = Color.fromRGBO(241, 196, 14, 100);
17 | static const Color SETTINGS_CARD_BACKGROUND_COLOR =
18 | Color.fromRGBO(252, 252, 251, 1);
19 | static const Color EXERCISES_CARD_BOTTOM = Color.fromRGBO(241, 196, 14, 1);
20 |
21 | static dynamicHeight(double height) => ScreenUtil.instance.setHeight(height);
22 | static dynamicWidth(double width) => ScreenUtil.instance.setWidth(width);
23 | static dynamicSp(double fontsize) => ScreenUtil.instance.setSp(fontsize);
24 |
25 | static const int SPLASH_DURATION = 500;
26 | static const int ONBOARD_NEXT_DURATION = 1000;
27 |
28 | static const int ONBOARD_PAGE_COUNT = 3;
29 |
30 | static const double Space0 = 0;
31 | static const double Space5 = 5;
32 | static const double Space10 = 10;
33 | static const double Space14 = 14;
34 | static const double Space15 = 15;
35 | static const double Space20 = 20;
36 | static const double Space25 = 25;
37 | static const double Space30 = 30;
38 | static const double Space35 = 35;
39 | static const double Space50 = 50;
40 | static const double Space80 = 80;
41 | static const double Space100 = 100;
42 | static const double Space200 = 200;
43 | static const double Space250 = 250;
44 | static const double Space500 = 500;
45 | static const double Space300 = 300;
46 |
47 | static Widget get verticalSpace => SizedBox(
48 | height: dynamicHeight(Space35),
49 | );
50 | static Widget get verticalSpaceLarge => SizedBox(
51 | height: dynamicHeight(Space35 * 5),
52 | );
53 |
54 | static Widget get horizontalSpace => SizedBox(
55 | width: dynamicWidth(Space35),
56 | );
57 |
58 | static AppBar appBar(String text) => AppBar(
59 | title: text == null ? text : Text(text),
60 | brightness: Platform.isAndroid ? Brightness.light : Brightness.dark,
61 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
62 | );
63 | }
64 |
65 | class FontSizeValue {
66 | static const double NORMAL = 25;
67 | static const double HIGH = 20;
68 | static const double MEDIUM = 15;
69 | static const double LOW = 13;
70 | static const double VERY_LOW = 10;
71 | }
72 |
73 | class SpaceValue {
74 | static const double NORMAL = 40;
75 | static const double HIGH = 60;
76 | static const double MEDIUM = 30;
77 | static const double LOW = 20;
78 | static const double VERY_LOW = 15;
79 | static const double VERY_LOW_HALF = 8;
80 | }
81 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/button/rounded_text_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/widget/padding/base_padding_enum.dart';
3 |
4 | class RoundedTextButton extends StatelessWidget {
5 | final Color color;
6 | final VoidCallback onPressed;
7 | final String title;
8 | final BasePaddingLevel spaceLevel;
9 |
10 | const RoundedTextButton(
11 | {Key key,
12 | this.color,
13 | @required this.onPressed,
14 | @required this.title,
15 | this.spaceLevel})
16 | : super(key: key);
17 | @override
18 | Widget build(BuildContext context) {
19 | return RaisedButton(
20 | padding: EdgeInsets.all(_spaceValue),
21 | color: color,
22 | shape: StadiumBorder(),
23 | child: Text(
24 | title,
25 | style: Theme.of(context)
26 | .textTheme
27 | .subhead
28 | .copyWith(fontWeight: FontWeight.w600),
29 | ),
30 | onPressed: onPressed,
31 | );
32 | }
33 |
34 | double get _spaceValue {
35 | switch (spaceLevel) {
36 | case BasePaddingLevel.VERY_LOW:
37 | return 15;
38 | case BasePaddingLevel.LOW:
39 | return 20;
40 | case BasePaddingLevel.MIDDLE:
41 | return 40;
42 | case BasePaddingLevel.HIGH:
43 | return 60;
44 | default:
45 | return 10;
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/card/circle_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CircleCard extends StatelessWidget {
4 | final Widget child;
5 | final Color borderColor;
6 | final Color backgroundColour;
7 |
8 | const CircleCard(
9 | {Key key,
10 | @required this.borderColor,
11 | this.backgroundColour,
12 | @required this.child})
13 | : super(key: key);
14 | @override
15 | Widget build(BuildContext context) {
16 | return Card(
17 | color: backgroundColour ?? Colors.white,
18 | shape: CircleBorder(side: BorderSide(color: borderColor)),
19 | child: child,
20 | );
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/card/icon_label_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../theme.dart';
4 | import '../../ui_helper.dart';
5 | import '../padding/base_padding.dart';
6 | import '../padding/base_padding_enum.dart';
7 | import '../text/subtitle.dart';
8 | import 'circle_card.dart';
9 | import 'rounded_rectange_card.dart';
10 |
11 | class IconLabelCard extends StatelessWidget {
12 | final String title;
13 | final String decription;
14 | final IconData icon;
15 | final VoidCallback onPressed;
16 | IconLabelCard({
17 | Key key,
18 | @required this.title,
19 | @required this.decription,
20 | @required this.icon,
21 | @required this.onPressed,
22 | }) : super(key: key);
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | return RoundedRectangleCard(
27 | color: greyCardColor,
28 | child: InkWell(onTap: onPressed, child: _listTile),
29 | );
30 | }
31 |
32 | Widget get _listTile => ListTile(
33 | contentPadding: EdgeInsets.all(SpaceValue.VERY_LOW),
34 | title: Text(title),
35 | subtitle: SubTitleText(decription),
36 | leading: CircleCard(borderColor: yellowSearchCardColor, child: _icon),
37 | );
38 |
39 | Widget get _icon => BasePadding(
40 | level: BasePaddingLevel.LOW,
41 | child: Icon(icon, color: yellowSearchCardColor),
42 | );
43 | }
44 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/card/rounded_rectange_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../theme.dart';
4 |
5 | class RoundedRectangleCard extends StatelessWidget {
6 | final Color color;
7 | final Widget child;
8 | final double marginValue;
9 |
10 | const RoundedRectangleCard(
11 | {Key key, this.color, @required this.child, this.marginValue})
12 | : super(key: key);
13 |
14 | @override
15 | Widget build(BuildContext context) {
16 | return Card(
17 | color: color ?? greyCardColor,
18 | margin: EdgeInsets.all(marginValue ?? 0),
19 | shape: RoundedRectangleBorder(borderRadius: _radius(context)),
20 | child: child,
21 | );
22 | }
23 |
24 | BorderRadius _radius(BuildContext context) {
25 | final aspectRatio = MediaQuery.of(context).size.aspectRatio;
26 | return BorderRadius.circular(aspectRatio * 20);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/dropdown/custom_dropdown_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CustomDropDownButton extends StatefulWidget {
4 | final List values;
5 | final String selectedValue;
6 |
7 | const CustomDropDownButton({Key key, this.values, this.selectedValue})
8 | : super(key: key);
9 |
10 | @override
11 | _CustomDropDownButtonState createState() => _CustomDropDownButtonState();
12 | }
13 |
14 | class _CustomDropDownButtonState extends State {
15 | String _selectedValue;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return DropdownButtonHideUnderline(
20 | child: DropdownButton(
21 | isExpanded: true,
22 | onChanged: (val) {
23 | _selectedValue = val;
24 | setState(() {});
25 | },
26 | value: _selectedValue ?? widget.values.first,
27 | items: dropdownMenuItems,
28 | ),
29 | );
30 | }
31 |
32 | List> get dropdownMenuItems => widget.values
33 | .map((item) => _item(item))
34 | .cast>()
35 | .toList();
36 |
37 | DropdownMenuItem _item(String val) {
38 | return DropdownMenuItem(
39 | value: val,
40 | child: Text(val),
41 | );
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/header/listview_header.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/widget/text/subtitle.dart';
3 |
4 | class ListViewHeader extends StatelessWidget {
5 | final String leftText;
6 | final String righText;
7 | final Color rightColor;
8 | final Color leftColor;
9 | final VoidCallback onPressed;
10 |
11 | const ListViewHeader(
12 | {Key key,
13 | @required this.leftText,
14 | @required this.righText,
15 | this.rightColor,
16 | this.leftColor,
17 | this.onPressed})
18 | : super(key: key);
19 | @override
20 | Widget build(BuildContext context) {
21 | return InkWell(
22 | onTap: onPressed,
23 | child: Row(
24 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
25 | children: [
26 | Text(leftText),
27 | SubTitleText(righText, color: rightColor),
28 | ],
29 | ),
30 | );
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/icon/grey_icon.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/theme.dart';
3 |
4 | class GreyIcon extends StatelessWidget {
5 | final IconData icon;
6 | final double size;
7 |
8 | const GreyIcon({Key key, this.icon, this.size}) : super(key: key);
9 | @override
10 | Widget build(BuildContext context) {
11 | return Icon(
12 | icon,
13 | color: greyCardColor,
14 | size: size,
15 | );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/listview/padding_listview.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 | import 'package:healthoui/ui/shared/widget/padding/base_padding_enum.dart';
4 |
5 | class PaddingListView extends StatelessWidget {
6 | final BasePaddingLevel spaceLevel;
7 | final List widgets;
8 |
9 | const PaddingListView(
10 | {Key key, @required this.spaceLevel, @required this.widgets})
11 | : super(key: key);
12 | @override
13 | Widget build(BuildContext context) {
14 | return ListView.builder(
15 | padding: EdgeInsets.all(SpaceValue.LOW),
16 | itemCount: widgets.length,
17 | itemBuilder: (context, index) {
18 | return Container(
19 | margin: EdgeInsets.only(bottom: _spaceValue),
20 | child: widgets[index],
21 | );
22 | },
23 | );
24 | }
25 |
26 | double get _spaceValue {
27 | switch (spaceLevel) {
28 | case BasePaddingLevel.VERY_LOW:
29 | return 10;
30 | case BasePaddingLevel.LOW:
31 | return 15;
32 | case BasePaddingLevel.MIDDLE:
33 | return 25;
34 | case BasePaddingLevel.HIGH:
35 | return 50;
36 | default:
37 | return 20;
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/onboard_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 |
4 | import '../text_style.dart';
5 |
6 | class OnBoardWidget extends StatelessWidget {
7 | const OnBoardWidget(
8 | {Key key,
9 | @required this.title,
10 | @required this.subTitle,
11 | @required this.imagePath})
12 | : super(key: key);
13 |
14 | final String title;
15 | final String subTitle;
16 | final String imagePath;
17 | @override
18 | Widget build(BuildContext context) {
19 | return Column(
20 | mainAxisAlignment: MainAxisAlignment.center,
21 | children: [
22 | Expanded(child: _header),
23 | Expanded(child: _placeImage),
24 | Spacer()
25 | ],
26 | );
27 | }
28 |
29 | Widget get _header => Wrap(
30 | direction: Axis.vertical,
31 | crossAxisAlignment: WrapCrossAlignment.center,
32 | alignment: WrapAlignment.center,
33 | spacing: UIHelper.Space10,
34 | children: [_title, _subTitle],
35 | );
36 |
37 | Widget get _title => Text(
38 | this.title,
39 | style: onBoardingTitleTextStyle,
40 | );
41 |
42 | Widget get _subTitle => Text(
43 | this.subTitle,
44 | style: onBoardingSubTitleTextStyle,
45 | );
46 |
47 | Widget get _placeImage => Image.asset("assets/images/$imagePath.png");
48 | }
49 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/padding/base_padding.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'base_padding_enum.dart';
4 |
5 | class BasePadding extends StatelessWidget {
6 | final BasePaddingLevel level;
7 | final Widget child;
8 | const BasePadding({Key key, this.level, @required this.child})
9 | : super(key: key);
10 | @override
11 | Widget build(BuildContext context) {
12 | return Padding(
13 | padding: EdgeInsets.all(paddingValue(context)),
14 | child: child,
15 | );
16 | }
17 |
18 | double paddingValue(BuildContext context) {
19 | final value = MediaQuery.of(context).size.aspectRatio;
20 | print(value);
21 | switch (level) {
22 | case BasePaddingLevel.HIGH:
23 | return value * 100;
24 | case BasePaddingLevel.MIDDLE:
25 | return value * 50;
26 | case BasePaddingLevel.LOW:
27 | return value * 20;
28 | case BasePaddingLevel.VERY_LOW:
29 | return value * 10;
30 | default:
31 | return value;
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/padding/base_padding_enum.dart:
--------------------------------------------------------------------------------
1 | enum BasePaddingLevel { VERY_LOW, LOW, MIDDLE, HIGH }
2 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/rounded_button_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 |
4 | class RoundedButtonWidget extends StatelessWidget {
5 | const RoundedButtonWidget(
6 | {Key key, @required this.child, @required this.onPress, this.color})
7 | : super(key: key);
8 |
9 | final Widget child;
10 | final VoidCallback onPress;
11 | final Color color;
12 | @override
13 | Widget build(BuildContext context) {
14 | return RaisedButton(
15 | color: color,
16 | child: this.child,
17 | shape: OutlineInputBorder(
18 | borderRadius: BorderRadius.circular(UIHelper.Space25),
19 | borderSide: BorderSide(color: Colors.white10)),
20 | onPressed: this.onPress,
21 | );
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/settings_card_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 |
4 | class SettingsCardWidget extends StatelessWidget {
5 | const SettingsCardWidget(
6 | {Key key, @required this.title, @required this.icon, this.trailing})
7 | : super(key: key);
8 |
9 | final String title;
10 | final IconData icon;
11 | final Widget trailing;
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | return Card(
16 | elevation: UIHelper.Space0,
17 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
18 | shape: RoundedRectangleBorder(
19 | borderRadius: BorderRadius.circular(UIHelper.Space10)),
20 | child: ListTile(
21 | title: Text(title),
22 | leading: Icon(
23 | icon,
24 | color: Colors.yellow,
25 | ),
26 | trailing: trailing
27 | ),
28 | );
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/space/empty_space.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/widget/padding/base_padding_enum.dart';
3 |
4 | class EmptySpace extends StatelessWidget {
5 | final BasePaddingLevel level;
6 | final bool isWidth;
7 | const EmptySpace({Key key, this.level, this.isWidth = false})
8 | : super(key: key);
9 | @override
10 | Widget build(BuildContext context) {
11 | return SizedBox(
12 | height: isWidth ? 0 : spaceValue(context),
13 | width: !isWidth ? 0 : spaceValue(context),
14 | );
15 | }
16 |
17 | double spaceValue(BuildContext context) {
18 | final value = MediaQuery.of(context).size.aspectRatio;
19 | switch (level) {
20 | case BasePaddingLevel.HIGH:
21 | return value * 100;
22 | case BasePaddingLevel.MIDDLE:
23 | return value * 50;
24 | case BasePaddingLevel.LOW:
25 | return value * 20;
26 | case BasePaddingLevel.VERY_LOW:
27 | return value * 10;
28 | default:
29 | return value;
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/tabbar/padding_text_tab.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 |
4 | class PaddingTextTab extends StatelessWidget {
5 | final String text;
6 |
7 | const PaddingTextTab(this.text, {Key key}) : super(key: key);
8 | @override
9 | Widget build(BuildContext context) {
10 | return Tab(
11 | child: Padding(
12 | padding: EdgeInsets.only(top: SpaceValue.VERY_LOW),
13 | child: Text(text),
14 | ),
15 | // text: "Exercises",
16 | );
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/text/colum_text.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/ui_helper.dart';
3 | import 'package:healthoui/ui/shared/widget/text/subtitle.dart';
4 |
5 | class ColumnText extends StatelessWidget {
6 | final List values;
7 |
8 | const ColumnText({Key key, this.values}) : super(key: key);
9 | @override
10 | Widget build(BuildContext context) {
11 | return Wrap(
12 | direction: Axis.vertical,
13 | children: values
14 | .map((item) => SubTitleText(
15 | item,
16 | size: FontSizeValue.LOW,
17 | ))
18 | .toList(),
19 | );
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/text/column_text_reverse.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'subtitle.dart';
4 |
5 | class BoldSoftColumntText extends StatelessWidget {
6 | final String title;
7 | final String description;
8 |
9 | const BoldSoftColumntText({Key key, this.title, this.description})
10 | : super(key: key);
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return Wrap(
15 | direction: Axis.vertical,
16 | spacing: 10,
17 | children: [
18 | SubTitleText(
19 | title,
20 | color: Colors.grey,
21 | ),
22 | Text(description)
23 | ],
24 | );
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/ui/shared/widget/text/subtitle.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import '../../ui_helper.dart';
4 |
5 | class SubTitleText extends StatelessWidget {
6 | final String value;
7 | final Color color;
8 | final double size;
9 |
10 | const SubTitleText(this.value, {this.color, this.size});
11 | @override
12 | Widget build(BuildContext context) {
13 | return Text(
14 | value,
15 | style: Theme.of(context).textTheme.subhead.copyWith(
16 | color: color,
17 | fontWeight: FontWeight.normal,
18 | fontSize: size ?? FontSizeValue.VERY_LOW),
19 | );
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/find_workout_plan/find_workout_plan.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './find_workout_plan_view.dart';
3 |
4 | class FindWorkoutPlan extends StatefulWidget {
5 |
6 | @override
7 | FindWorkoutPlanView createState() => new FindWorkoutPlanView();
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/find_workout_plan/find_workout_plan_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/theme.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 | import 'package:healthoui/ui/shared/widget/button/rounded_text_button.dart';
5 | import 'package:healthoui/ui/shared/widget/card/rounded_rectange_card.dart';
6 | import 'package:healthoui/ui/shared/widget/dropdown/custom_dropdown_button.dart';
7 | import 'package:healthoui/ui/shared/widget/padding/base_padding_enum.dart';
8 | import './find_workout_plan_view_model.dart';
9 |
10 | class FindWorkoutPlanView extends FindWorkoutPlanViewModel {
11 | @override
12 | Widget build(BuildContext context) {
13 | // Replace this with your build function
14 | return Scaffold(
15 | appBar: UIHelper.appBar("Find a Workout Plan"),
16 | body: Padding(
17 | padding: EdgeInsets.all(SpaceValue.LOW),
18 | child: Center(
19 | child: Wrap(
20 | alignment: WrapAlignment.center,
21 | runSpacing: 20,
22 | children: [
23 | goalDropDown,
24 | levelDropDown,
25 | weeksDropDown,
26 | goalDropDown,
27 | findWorkoutButton
28 | ],
29 | ),
30 | ),
31 | ),
32 | );
33 | }
34 |
35 | Widget get findWorkoutButton => RoundedTextButton(
36 | spaceLevel: BasePaddingLevel.LOW,
37 | title: "Find Workout Plan",
38 | color: yellowSearchCardColor,
39 | onPressed: () {},
40 | );
41 |
42 | Widget paddingDropDown(Widget child) {
43 | return Padding(
44 | padding: EdgeInsets.symmetric(
45 | vertical: SpaceValue.VERY_LOW_HALF, horizontal: SpaceValue.MEDIUM),
46 | child: child,
47 | );
48 | }
49 |
50 | Widget get goalDropDown => RoundedRectangleCard(
51 | child: paddingDropDown(
52 | CustomDropDownButton(
53 | values: ["Choose Level", "1", "2"],
54 | ),
55 | ));
56 |
57 | Widget get levelDropDown => RoundedRectangleCard(
58 | child: paddingDropDown(
59 | CustomDropDownButton(
60 | values: ["No of week", "1", "2"],
61 | ),
62 | ),
63 | );
64 |
65 | Widget get weeksDropDown => RoundedRectangleCard(
66 | child: paddingDropDown(
67 | CustomDropDownButton(
68 | values: ["Days per Week", "1", "2"],
69 | ),
70 | ),
71 | );
72 |
73 | Widget get daysDropDown => RoundedRectangleCard(
74 | child: paddingDropDown(
75 | CustomDropDownButton(
76 | values: ["Choose Goal", "1", "2"],
77 | ),
78 | ),
79 | );
80 | }
81 |
82 | // before dropdown
83 | // DropdownButton(
84 | // isExpanded: true,
85 | // onChanged: (val) {},
86 | // value: "Choose Goal",
87 | // items: [
88 | // DropdownMenuItem(
89 | // child: Text("1"),
90 | // value: "Choose Goal",
91 | // ),
92 | // DropdownMenuItem(
93 | // child: Text("1"),
94 | // value: "1",
95 | // )
96 | // ],
97 | // )
98 |
99 | // before dropdown
100 |
101 | // Widget get findWorkoutButton => RoundedTextButton(
102 | // spaceLevel: BasePaddingLevel.LOW,
103 | // title: "Find Workout Plan",
104 | // color: yellowSearchCardColor,
105 | // onPressed: () {},
106 | // );
107 |
108 | // Widget get goalDropDown => RoundedRectangleCard(
109 | // child: Padding(
110 | // padding: EdgeInsets.symmetric(
111 | // vertical: SpaceValue.VERY_LOW_HALF,
112 | // horizontal: SpaceValue.MEDIUM),
113 | // child: CustomDropDownButton(
114 | // values: ["Choose Level", "1", "2"],
115 | // ),
116 | // ),
117 | // );
118 |
119 | // Widget get levelDropDown => RoundedRectangleCard(
120 | // child: Padding(
121 | // padding: EdgeInsets.symmetric(
122 | // vertical: SpaceValue.VERY_LOW_HALF, horizontal: SpaceValue.MEDIUM),
123 | // child: CustomDropDownButton(
124 | // values: ["No of week", "1", "2"],
125 | // ),
126 | // ),
127 | // );
128 |
129 | // Widget get weeksDropDown => RoundedRectangleCard(
130 | // child: Padding(
131 | // padding: EdgeInsets.symmetric(
132 | // vertical: SpaceValue.VERY_LOW_HALF, horizontal: SpaceValue.MEDIUM),
133 | // child: CustomDropDownButton(
134 | // values: ["Days per Week", "1", "2"],
135 | // ),
136 | // ),
137 | // );
138 |
139 | // Widget get daysDropDown => RoundedRectangleCard(
140 | // child: Padding(
141 | // padding: EdgeInsets.symmetric(
142 | // vertical: SpaceValue.VERY_LOW_HALF, horizontal: SpaceValue.MEDIUM),
143 | // child: CustomDropDownButton(
144 | // values: ["Choose Goal", "1", "2"],
145 | // ),
146 | // ),
147 | // );
148 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/find_workout_plan/find_workout_plan_view_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './find_workout_plan.dart';
3 |
4 | abstract class FindWorkoutPlanViewModel extends State {
5 | // Add your state and logic here
6 | }
7 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/introduction/introduction.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './introduction_view.dart';
3 |
4 | class Introduction extends StatefulWidget {
5 |
6 | @override
7 | IntroductionView createState() => new IntroductionView();
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/introduction/introduction_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import './introduction_view_model.dart';
4 | import '../../../../shared/ui_helper.dart';
5 | import '../../../../shared/widget/padding/base_padding_enum.dart';
6 | import '../../../../shared/widget/space/empty_space.dart';
7 | import '../../../../shared/widget/text/subtitle.dart';
8 |
9 | class IntroductionView extends IntroductionViewModel {
10 | @override
11 | Widget build(BuildContext context) {
12 | // Replace this with your build function
13 | return Scaffold(
14 | appBar: UIHelper.appBar("Introduction"),
15 | body: Padding(
16 | padding: EdgeInsets.all(SpaceValue.LOW),
17 | child: Column(
18 | crossAxisAlignment: CrossAxisAlignment.start,
19 | children: [
20 | Text(completeText),
21 | space,
22 | Text("Dscription"),
23 | space,
24 | SubTitleText(
25 | description,
26 | size: FontSizeValue.LOW,
27 | ),
28 | space,
29 | ...items()
30 | ],
31 | ),
32 | ),
33 | );
34 | }
35 |
36 | Widget get space => EmptySpace(
37 | level: BasePaddingLevel.MIDDLE,
38 | );
39 | }
40 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/introduction/introduction_view_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/widget/text/column_text_reverse.dart';
3 | import './introduction.dart';
4 |
5 | abstract class IntroductionViewModel extends State {
6 | // Add your state and logic here
7 | final String completeText = "Complete the Beginner Program";
8 | final String description = "This is a beginner quick start guide that will"
9 | "move you from day 1 to day 60, providing"
10 | "you with starting training and instructions...";
11 |
12 | List items() {
13 | return [
14 | BoldSoftColumntText(
15 | title: "Duration",
16 | description: "5 Weeks",
17 | ),
18 | BoldSoftColumntText(
19 | title: "Goal",
20 | description: "5 Weeks",
21 | ),
22 | BoldSoftColumntText(
23 | title: "Training Level",
24 | description: "5 Weeks",
25 | ),
26 | BoldSoftColumntText(
27 | title: "Days per Week",
28 | description: "5 Weeks",
29 | ),
30 | BoldSoftColumntText(
31 | title: "Target Gender",
32 | description: "5 Weeks",
33 | ),
34 | ];
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/muscle_binding/muscle_binding.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './muscle_binding_view.dart';
3 |
4 | class MuscleBinding extends StatefulWidget {
5 |
6 | @override
7 | MuscleBindingView createState() => new MuscleBindingView();
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/muscle_binding/muscle_binding_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/widget/listview/padding_listview.dart';
3 | import 'package:healthoui/ui/shared/widget/padding/base_padding_enum.dart';
4 |
5 | import './muscle_binding_view_model.dart';
6 | import '../../../../shared/theme.dart';
7 | import '../../../../shared/ui_helper.dart';
8 | import '../../../../shared/widget/text/colum_text.dart';
9 | import '../../../../shared/widget/text/subtitle.dart';
10 |
11 | class MuscleBindingView extends MuscleBindingViewModel {
12 | @override
13 | Widget build(BuildContext context) {
14 | // Replace this with your build function
15 | return Scaffold(
16 | appBar: UIHelper.appBar("Muscle Building"),
17 | body: PaddingListView(
18 | spaceLevel: BasePaddingLevel.VERY_LOW,
19 | widgets: [
20 | photoCard,
21 | introCard,
22 | progressCard,
23 | progressText,
24 | ...subCards
25 | ],
26 | ),
27 | );
28 | }
29 |
30 | List get subCards {
31 | List _cards = [];
32 | for (var i = 0; i < 10; i++) {
33 | _cards.add(
34 | Card(
35 | color: greyCardColor,
36 | shape: RoundedRectangleBorder(
37 | borderRadius: BorderRadius.circular(SpaceValue.LOW)),
38 | child: cardItem("${i < 10 ? 0 : ""}$i"),
39 | ),
40 | );
41 | }
42 | return _cards;
43 | }
44 |
45 | Widget cardItem(String text) {
46 | return ListTile(
47 | leading: AspectRatio(
48 | aspectRatio: 90 / 100,
49 | child: Container(
50 | alignment: Alignment.topRight,
51 | child: SubTitleText(
52 | text,
53 | color: Colors.grey,
54 | size: FontSizeValue.HIGH,
55 | ),
56 | ),
57 | ),
58 | dense: true,
59 | title: Text("Week"),
60 | subtitle: SubTitleText("This is a beginner quick start....."),
61 | trailing: Icon(
62 | Icons.chevron_right,
63 | ),
64 | );
65 | }
66 |
67 | Widget get progressText => Align(
68 | alignment: Alignment.centerRight,
69 | child: SubTitleText("${(progressValue * 100).toInt()}% Complete"),
70 | );
71 | Widget get progressCard => Card(
72 | child: LinearProgressIndicator(
73 | value: progressValue,
74 | backgroundColor: greyCardColor,
75 | valueColor: AlwaysStoppedAnimation(Colors.green),
76 | ),
77 | );
78 |
79 | Widget get photoCard => AspectRatio(
80 | aspectRatio: 7 / 4,
81 | child: Stack(
82 | children: [photo, aspectAlignPhotoCardInner],
83 | ),
84 | );
85 |
86 | Widget get introCard => ListTile(
87 | onTap: onPressed,
88 | trailing: Icon(Icons.chevron_right),
89 | title: Wrap(
90 | children: [Text("Introduction"), SubTitleText(text)],
91 | ),
92 | );
93 |
94 | Widget get photo => Placeholder();
95 |
96 | Widget get aspectAlignPhotoCardInner => Align(
97 | alignment: Alignment.bottomCenter,
98 | child: AspectRatio(
99 | aspectRatio: 10 / 1.5,
100 | child: photoInnerContainer,
101 | ),
102 | );
103 |
104 | Widget get photoInnerContainer => Container(
105 | child: photoInnerChild,
106 | margin: EdgeInsets.symmetric(horizontal: 20),
107 | decoration: BoxDecoration(
108 | color: yellowSearchCardColor,
109 | borderRadius: BorderRadius.vertical(top: Radius.circular(30)),
110 | ),
111 | );
112 | Widget get photoInnerChild => Row(
113 | mainAxisAlignment: MainAxisAlignment.spaceAround,
114 | crossAxisAlignment: CrossAxisAlignment.center,
115 | children: [
116 | ColumnText(
117 | values: ["Goal", "Muscle Building"],
118 | ),
119 | ColumnText(
120 | values: ["Duration", "5 Weeks"],
121 | ),
122 | ColumnText(
123 | values: ["Level", "Beginner"],
124 | ),
125 | ],
126 | );
127 | }
128 | // before widget
129 |
130 | // AspectRatio(
131 | // aspectRatio: 7 / 3,
132 | // child: Stack(
133 | // children: [
134 | // Placeholder(),
135 | // Align(
136 | // alignment: Alignment.bottomCenter,
137 | // child: AspectRatio(
138 | // aspectRatio: 10 / 1.5,
139 | // child: Container(
140 | // child: Row(
141 | // mainAxisAlignment: MainAxisAlignment.spaceAround,
142 | // crossAxisAlignment: CrossAxisAlignment.end,
143 | // children: [
144 | // Wrap(
145 | // direction: Axis.vertical,
146 | // children: [
147 | // Text("Goal"),
148 | // Text("Muscle Building"),
149 | // ],
150 | // ),
151 | // Wrap(
152 | // direction: Axis.vertical,
153 | // children: [
154 | // Text("a"),
155 | // Text("b"),
156 | // ],
157 | // ),
158 | // Wrap(
159 | // direction: Axis.vertical,
160 | // children: [
161 | // Text("a"),
162 | // Text("b"),
163 | // ],
164 | // )
165 | // ],
166 | // ),
167 | // margin: EdgeInsets.symmetric(horizontal: 20),
168 | // decoration: BoxDecoration(
169 | // color: yellowSearchCardColor,
170 | // borderRadius:
171 | // BorderRadius.vertical(top: Radius.circular(30)),
172 | // ),
173 | // ),
174 | // ),
175 |
176 | // before atomic
177 | // ListTile(
178 | // trailing: Icon(Icons.chevron_right),
179 | // title: Wrap(
180 | // children: [
181 | // Text("Introduction"),
182 | // SubTitleText("data" * 10)
183 | // ],
184 | // ),
185 | // )
186 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/muscle_binding/muscle_binding_view_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/views/home/exercise_tab/introduction/introduction.dart';
3 | import './muscle_binding.dart';
4 |
5 | abstract class MuscleBindingViewModel extends State {
6 | // Add your state and logic here
7 | final double progressValue = 0.3;
8 | String text = "This is a beginner quick start guide that will" +
9 | "move you from day 1 to day 60, providing " +
10 | "you with starting training and instructions...";
11 |
12 | void onPressed() {
13 | Navigator.of(context)
14 | .push(MaterialPageRoute(builder: (_) => Introduction()));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/tab/exercise_tab/exercise_tab.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './exercise_tab_view.dart';
3 |
4 | class ExerciseTab extends StatefulWidget {
5 |
6 | @override
7 | ExerciseTabView createState() => new ExerciseTabView();
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/tab/exercise_tab/exercise_tab_view.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:healthoui/ui/shared/theme.dart';
5 | import 'package:healthoui/ui/shared/widget/tabbar/padding_text_tab.dart';
6 | import 'package:healthoui/ui/views/home/exercise_tab/workout_plan/workout_plan.dart';
7 |
8 | import './exercise_tab_view_model.dart';
9 | import '../../../../../shared/ui_helper.dart';
10 |
11 | class ExerciseTabView extends ExerciseTabViewModel {
12 | @override
13 | Widget build(BuildContext context) {
14 | return DefaultTabController(
15 | length: 4,
16 | initialIndex: workoutPlanIndex,
17 | child: Scaffold(
18 | appBar: _appBar,
19 | body: Column(
20 | children: [_tabbarContainer, _tabbarView],
21 | ),
22 | ),
23 | );
24 | }
25 |
26 | AppBar get _appBar {
27 | return AppBar(
28 | brightness: Platform.isAndroid ? Brightness.light : Brightness.dark,
29 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
30 | elevation: 2,
31 | leading: Image.asset(UIHelper.MENU_ICON),
32 | title: Text("Healtho"),
33 | centerTitle: false,
34 | actions: [IconButton(icon: Icon(Icons.search), onPressed: () {})],
35 | );
36 | }
37 |
38 | Widget get _tabbarContainer => Stack(
39 | children: [_background, _tabbar],
40 | );
41 |
42 | Widget get _background => Positioned.fill(
43 | bottom: indicatorWeight / 2,
44 | child: Container(
45 | color: UIHelper.SETTINGS_APP_BAR_COLOR,
46 | ),
47 | );
48 |
49 | Widget get _tabbar => TabBar(
50 | isScrollable: true,
51 | labelColor: yellowSearchCardColor,
52 | unselectedLabelColor: Colors.white70,
53 | indicatorColor: yellowSearchCardColor,
54 | indicatorWeight: indicatorWeight,
55 | indicatorSize: TabBarIndicatorSize.tab,
56 | tabs: [
57 | PaddingTextTab(" Dummy "),
58 | PaddingTextTab("Exercises"),
59 | PaddingTextTab("Workout Plan"),
60 | PaddingTextTab("Challenges"),
61 | ],
62 | );
63 |
64 | Widget get _tabbarView => Expanded(
65 | child: TabBarView(
66 | children: [
67 | Container(),
68 | Container(),
69 | WorkoutPlan(),
70 | Container(),
71 | ],
72 | ),
73 | );
74 | }
75 |
76 | extension _ExerciseTabView on ExerciseTabView {
77 | int get workoutPlanIndex => 2;
78 | int get exerciseIndex => 1;
79 | int get challangesIndex => 3;
80 | int get tabCount => 4;
81 | double get indicatorWeight => 5;
82 | }
83 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/tab/exercise_tab/exercise_tab_view_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './exercise_tab.dart';
3 |
4 | abstract class ExerciseTabViewModel extends State {
5 | // Add your state and logic here
6 | }
7 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/workout_plan/workout_plan.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import './workout_plan_view.dart';
3 |
4 | class WorkoutPlan extends StatefulWidget {
5 |
6 | @override
7 | WorkoutPlanView createState() => new WorkoutPlanView();
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/workout_plan/workout_plan_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import './workout_plan_view_model.dart';
4 | import '../../../../shared/theme.dart';
5 | import '../../../../shared/ui_helper.dart';
6 | import '../../../../shared/widget/button/rounded_text_button.dart';
7 | import '../../../../shared/widget/card/icon_label_card.dart';
8 | import '../../../../shared/widget/header/listview_header.dart';
9 | import '../../../../shared/widget/listview/padding_listview.dart';
10 | import '../../../../shared/widget/padding/base_padding_enum.dart';
11 |
12 | class WorkoutPlanView extends WorkoutPlanViewModel {
13 | @override
14 | Widget build(BuildContext context) {
15 | // Replace this with your build function
16 | return _listView;
17 | }
18 |
19 | Widget get _listView {
20 | return PaddingListView(
21 | spaceLevel: BasePaddingLevel.LOW,
22 | widgets: [
23 | findWorkoutCard,
24 | myPlanCard,
25 | createNewCard,
26 | listViewHeader,
27 | aspectHorizontalList,
28 | listViewSecondHeader,
29 | aspectHorizontalListSecond
30 | ],
31 | );
32 | }
33 |
34 | Widget get findWorkoutCard => IconLabelCard(
35 | title: "Find a Workout Plan",
36 | decription: "Perfect Workout plan that fulfill your fitness goal",
37 | icon: Icons.search,
38 | onPressed: onNavigate,
39 | );
40 |
41 | Widget get myPlanCard => RoundedTextButton(
42 | color: yellowSearchCardColor,
43 | title: "My Plan",
44 | onPressed: onNavigate,
45 | );
46 |
47 | Widget get createNewCard => IconLabelCard(
48 | title: "Creat New Plan",
49 | decription: "Customise workout plans as per your",
50 | icon: Icons.add,
51 | onPressed: () {},
52 | );
53 |
54 | Widget get listViewHeader => ListViewHeader(
55 | onPressed: onNavigateMuscle,
56 | righText: "More",
57 | leftText: "Muscle Building",
58 | rightColor: yellowSearchCardColor,
59 | );
60 |
61 | Widget get aspectHorizontalList => AspectRatio(
62 | aspectRatio: 5 / 2,
63 | child: ListView.builder(
64 | itemCount: 5,
65 | shrinkWrap: true,
66 | scrollDirection: Axis.horizontal,
67 | itemBuilder: (context, index) {
68 | return Padding(
69 | padding: EdgeInsets.only(right: SpaceValue.MEDIUM),
70 | child: Card(
71 | child: AspectRatio(
72 | aspectRatio: 3 / 2,
73 | child: Placeholder(),
74 | ),
75 | ),
76 | );
77 | },
78 | ),
79 | );
80 |
81 | Widget get listViewSecondHeader => ListViewHeader(
82 | righText: "More",
83 | leftText: "Gain Strength",
84 | rightColor: yellowSearchCardColor,
85 | );
86 |
87 | Widget get aspectHorizontalListSecond => AspectRatio(
88 | aspectRatio: 5 / 2,
89 | child: ListView.builder(
90 | itemCount: 5,
91 | shrinkWrap: true,
92 | scrollDirection: Axis.horizontal,
93 | itemBuilder: (context, index) {
94 | return Padding(
95 | padding: EdgeInsets.only(right: SpaceValue.MEDIUM),
96 | child: Card(
97 | child: AspectRatio(
98 | aspectRatio: 3 / 2,
99 | child: Placeholder(),
100 | ),
101 | ),
102 | );
103 | },
104 | ),
105 | );
106 | }
107 |
108 | // Before Atamoc
109 | // Card(
110 | // color: Color.fromRGBO(240, 240, 243, 1),
111 | // child: ListTile(
112 | // title: Text("Find Workout Plan"),
113 | // subtitle: SubTitleText(
114 | // "Perfect Workout plan that fulfill your fitness goal"),
115 | // leading: Card(
116 | // color: Colors.white,
117 | // shape: CircleBorder(
118 | // side: BorderSide(color: Color.fromRGBO(241, 196, 14, 1))),
119 | // child: Padding(
120 | // padding: EdgeInsets.all(8.0),
121 | // child: Icon(
122 | // Icons.search,
123 | // color: Color.fromRGBO(241, 196, 14, 1),
124 | // ),
125 | // ),
126 | // ),
127 | // ),
128 | // )
129 |
130 | // rasied button before
131 |
132 | // RaisedButton(
133 | // color: yellowSearchCardColor,
134 | // shape: StadiumBorder(),
135 | // child: Text("My Plan"),
136 | // onPressed: () {},
137 | // )
138 |
139 | // atomic before
140 | // Row(
141 | // mainAxisAlignment: MainAxisAlignment.spaceBetween,
142 | // children: [
143 | // Text("Muscle Building"),
144 | // SubTitleText("More", color: yellowSearchCardColor),
145 | // ],
146 | // ),
147 |
148 | // Base Padding List View
149 | // ListView get listView {
150 | // return ListView(padding: EdgeInsets.all(10), children: [
151 | // findWorkoutCard,
152 | // EmptySpace(level: BasePaddingLevel.LOW),
153 | // myPlanCard,
154 | // EmptySpace(level: BasePaddingLevel.LOW),
155 | // createNewCard,
156 | // EmptySpace(level: BasePaddingLevel.LOW),
157 | // listViewHeader,
158 | // EmptySpace(level: BasePaddingLevel.LOW),
159 | // aspectHorizontalList,
160 | // EmptySpace(level: BasePaddingLevel.LOW),
161 | // listViewSecondHeader,
162 | // EmptySpace(level: BasePaddingLevel.LOW),
163 | // aspectHorizontalListSecond
164 | // ]);
165 | // }
166 |
--------------------------------------------------------------------------------
/lib/ui/views/home/exercise_tab/workout_plan/workout_plan_view_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/views/home/exercise_tab/find_workout_plan/find_workout_plan.dart';
3 | import 'package:healthoui/ui/views/home/exercise_tab/muscle_binding/muscle_binding.dart';
4 | import './workout_plan.dart';
5 |
6 | abstract class WorkoutPlanViewModel extends State {
7 | // Add your state and logic here
8 | void onNavigate() {
9 | Navigator.of(context)
10 | .push(MaterialPageRoute(builder: (_) => FindWorkoutPlan()));
11 | }
12 |
13 | void onNavigateMuscle() {
14 | Navigator.of(context)
15 | .push(MaterialPageRoute(builder: (_) => MuscleBinding()));
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/ui/views/home/home_tab_view.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:healthoui/ui/shared/constants.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 | import 'package:healthoui/ui/views/home/notifcation/notification_view.dart';
7 | import 'package:healthoui/ui/views/home/reminder/reminder_view.dart';
8 | import 'package:healthoui/ui/views/home/settings_view.dart';
9 | import 'package:healthoui/ui/views/home/tips/user_programs_view.dart';
10 |
11 | class HomeTabView extends StatefulWidget {
12 | @override
13 | _HomeTabViewState createState() => _HomeTabViewState();
14 | }
15 |
16 | class _HomeTabViewState extends State {
17 | /// save current page state
18 | int _currentPageIndex = 0;
19 |
20 | AppBar get _appBar {
21 | return AppBar(
22 | /// [StatusBar] color light
23 | brightness: Platform.isAndroid ? Brightness.light : Brightness.dark,
24 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
25 | elevation: 0,
26 | leading: Image.asset(UIHelper.MENU_ICON),
27 | title: Text(_appBarTitle),
28 | centerTitle: false,
29 | actions: [_rigtActionItem],
30 | );
31 | }
32 |
33 | /// get [AppBar] title
34 | String get _appBarTitle {
35 | switch (_currentPageIndex) {
36 | case 0:
37 | return Constants.NOTIFICATION_TITLE;
38 | case 1:
39 | return Constants.REMINDER_TITLE;
40 | case 2:
41 | return Constants.REMINDER_TITLE;
42 | default:
43 | return Constants.TIPS;
44 | }
45 | }
46 |
47 | /// get [SearchBar] icon
48 | Widget get _rigtActionItem => Chip(
49 | label: Icon(Icons.search),
50 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
51 | shape: Border(),
52 | );
53 |
54 | @override
55 | Widget build(BuildContext context) {
56 | return DefaultTabController(
57 | length: Constants.TABBAR_COUNT,
58 | child: Scaffold(
59 | appBar: _appBar,
60 | bottomNavigationBar: BottomAppBar(
61 | child: TabBar(
62 | labelPadding: EdgeInsets.all(0),
63 | indicatorColor: Colors.transparent,
64 | labelColor: Colors.black,
65 | onTap: (int index) {
66 | /// [TabBar] item ontab reload view.
67 | setState(() {
68 | _currentPageIndex = index;
69 | });
70 | },
71 | tabs: [
72 | _tabBarItem(icon: Icons.notifications),
73 | _tabBarItem(icon: Icons.access_time),
74 | _tabBarItem(icon: Icons.settings),
75 | _tabProfileIcon(url: Constants.PROFILE_IMAGE)
76 | ],
77 | ),
78 | ),
79 | body: TabBarView(
80 | physics: NeverScrollableScrollPhysics(),
81 | children: [
82 | NotifiactionView(),
83 | ReminderView(),
84 | SettingsView(),
85 | UserProgramsView(),
86 | ],
87 | ),
88 | ),
89 | );
90 | }
91 |
92 | /// Default [Tab] item
93 | Widget _tabBarItem({IconData icon}) {
94 | return Tab(
95 | icon: Icon(icon, color: Colors.grey),
96 | );
97 | }
98 |
99 | Widget _tabProfileIcon({String url}) {
100 | return Tab(
101 | child: FlatButton(
102 | highlightColor: Colors.transparent,
103 | splashColor: Colors.transparent,
104 |
105 | // onPressed: () {},
106 | child: Center(
107 | child: CircleAvatar(
108 | backgroundImage: NetworkImage(url),
109 | ),
110 | ),
111 | ),
112 | );
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/lib/ui/views/home/notifcation/notification_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/text_style.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 |
5 | class NotifiactionView extends StatefulWidget {
6 | @override
7 | _NotifiactionViewState createState() => _NotifiactionViewState();
8 | }
9 |
10 | class _NotifiactionViewState extends State {
11 | List _notificationList = [
12 | "New Exercises and Plans Updated",
13 | "You Just Consulted with our Nutritioni….",
14 | "Your Mobile Number is Updated",
15 | "Health Tips - why Breathing is important",
16 | "You Just Complete the Pushups Ch..."
17 | ];
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | return Scaffold(
22 | backgroundColor: Colors.white,
23 | body: ListView.builder(
24 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space10),
25 | itemCount: _notificationList.length,
26 | itemBuilder: (context, index) {
27 | return _cardItem(index);
28 | },
29 | ));
30 | }
31 |
32 | Widget _cardItem(int index) => Card(
33 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
34 | margin: EdgeInsets.only(top: UIHelper.Space20),
35 | child: ListTile(
36 | title: Text(
37 | _notificationList[index],
38 | style: profileHeaderCardSubTitle,
39 | ),
40 | ),
41 | );
42 | }
43 |
--------------------------------------------------------------------------------
/lib/ui/views/home/physiques/pysiques_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/core/model/physique.dart';
3 | import 'package:healthoui/ui/shared/text_style.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
6 | import 'package:numberpicker/numberpicker.dart';
7 |
8 | import 'radio_view.dart';
9 |
10 | class PysiquesView extends StatefulWidget {
11 | @override
12 | _PysiquesViewState createState() => _PysiquesViewState();
13 | }
14 |
15 | class _PysiquesViewState extends State {
16 | Physique _physique;
17 |
18 | @override
19 | void initState() {
20 | super.initState();
21 | _physique = Physique(age: "", height: "", weight: "", level: "");
22 | }
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | return Scaffold(
27 | body: Column(
28 | mainAxisSize: MainAxisSize.min,
29 | children: [
30 | Spacer(flex: 2),
31 | Text("Enter Your Physiques", style: profileHeaderCardTitle),
32 | Expanded(
33 | flex: 6,
34 | child: Container(
35 | alignment: Alignment.center,
36 | margin: EdgeInsets.symmetric(horizontal: 20),
37 | child: Column(
38 | children: [
39 | UIHelper.verticalSpace,
40 | _roundedButton(
41 | text: "Age",
42 | rightText: _physique.age,
43 | onPress: showAgeDialog),
44 | _roundedButton(
45 | text: "Height",
46 | rightText: _physique.height,
47 | onPress: showHeightDialog),
48 | _roundedButton(
49 | text: "Weight",
50 | rightText: _physique.weight,
51 | onPress: showWeightDialog),
52 | _roundedButton(
53 | text: "Level",
54 | rightText: _physique.level,
55 | onPress: showLevelDialog),
56 | UIHelper.verticalSpaceLarge,
57 | RoundedButtonWidget(
58 | color: UIHelper.EXERCISES_CARD_BOTTOM,
59 | onPress: () {},
60 | child: ListTile(
61 | title: Text(
62 | "Confirm Detail",
63 | textAlign: TextAlign.center,
64 | style: profileHeaderCardTitle,
65 | ),
66 | ),
67 | ),
68 | ],
69 | ),
70 | ),
71 | ),
72 | ],
73 | ),
74 | );
75 | }
76 |
77 | double _currentDoubleValue = 3.0;
78 | Future showHeightDialog() async {
79 | var value = await showDialog(
80 | context: context,
81 | builder: (BuildContext context) {
82 | return NumberPickerDialog.decimal(
83 |
84 | minValue: 1,
85 | maxValue: 5,
86 | decimalPlaces: 2,
87 | initialDoubleValue: _currentDoubleValue,
88 | title: Text("Pick a height number"),
89 | );
90 | },
91 | );
92 | if (value != null) {
93 | _physique.height = _currentDoubleValue.toString();
94 | setState(() {});
95 | }
96 | }
97 |
98 | void showWeightDialog() {
99 | showDialog(
100 | context: context,
101 | builder: (context) => Dialog(
102 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
103 | child: ListTile(
104 | title: Text(
105 | "Select your Weight",
106 | textAlign: TextAlign.center,
107 | style: profileHeaderCardSubTitle,
108 | ),
109 | subtitle: Container(
110 | height: 200,
111 | child: Row(
112 | mainAxisSize: MainAxisSize.min,
113 | children: [
114 | Spacer(),
115 | Expanded(
116 | child: ListView.builder(
117 | shrinkWrap: false,
118 | itemCount: 100,
119 | itemBuilder: (context, index) {
120 | return InkWell(
121 | onTap: () {
122 | setState(() {
123 | _physique.weight = index.toString();
124 | });
125 | Navigator.pop(context);
126 | },
127 | child: Text(
128 | "$index",
129 | textAlign: TextAlign.center,
130 | ),
131 | );
132 | },
133 | ),
134 | ),
135 | Center(
136 | child: Text(
137 | "kg",
138 | style: profileHeaderCardTitle,
139 | ),
140 | ),
141 | Spacer(),
142 | ],
143 | )),
144 | ),
145 | ),
146 | );
147 | }
148 |
149 | void showAgeDialog() {
150 | showDialog(
151 | context: context,
152 | builder: (context) => Dialog(
153 | shape:
154 | RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
155 | child: _ageDialog),
156 | );
157 | }
158 |
159 | void showLevelDialog() {
160 | showDialog(
161 | context: context,
162 | builder: (context) => Dialog(
163 | shape: RoundedRectangleBorder(
164 | borderRadius: BorderRadius.circular(20)),
165 | child: RadioView(
166 | onPress: (text) {
167 | setState(() {
168 | _physique.level = "$text";
169 | });
170 | Navigator.pop(context);
171 | },
172 | ),
173 | ));
174 | }
175 |
176 | Widget get _ageDialog {
177 | return ListTile(
178 | title: Text(
179 | "Select your Age",
180 | textAlign: TextAlign.center,
181 | style: profileHeaderCardSubTitle,
182 | ),
183 | subtitle: Container(
184 | height: 200,
185 | child: ListView.builder(
186 | itemCount: 100,
187 | itemBuilder: (context, index) {
188 | return InkWell(
189 | onTap: () {
190 | setState(() {
191 | _physique.age = index.toString();
192 | });
193 | Navigator.pop(context);
194 | },
195 | child: Text(
196 | "$index",
197 | textAlign: TextAlign.center,
198 | ),
199 | );
200 | },
201 | ),
202 | ),
203 | );
204 | }
205 |
206 | Widget _roundedButton({String text, String rightText, VoidCallback onPress}) {
207 | return Padding(
208 | padding: EdgeInsets.all(8.0),
209 | child: SizedBox(
210 | width: rightText.isEmpty ? 200 : null,
211 | child: RoundedButtonWidget(
212 | color: Colors.grey[100],
213 | onPress: onPress,
214 | child: ListTile(
215 | title: rightText.isEmpty
216 | ? Text(text, textAlign: TextAlign.center)
217 | : null,
218 | leading: rightText.isEmpty ? null : Text(text),
219 | trailing: rightText.isEmpty
220 | ? null
221 | : Text(rightText,
222 | textAlign: rightText.isEmpty
223 | ? TextAlign.center
224 | : TextAlign.start)),
225 | ),
226 | ),
227 | );
228 | }
229 | }
230 |
--------------------------------------------------------------------------------
/lib/ui/views/home/physiques/radio_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/text_style.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 |
5 | class RadioView extends StatefulWidget {
6 | final Function(String text) onPress;
7 |
8 | const RadioView({Key key, this.onPress}) : super(key: key);
9 | @override
10 | _RadioViewState createState() => _RadioViewState();
11 | }
12 |
13 | class _RadioViewState extends State {
14 | int _currValue = 1;
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | return ListTile(
19 | title: Text(
20 | "Select your level",
21 | textAlign: TextAlign.center,
22 | style: profileHeaderCardSubTitle,
23 | ),
24 | subtitle: Column(
25 | mainAxisSize: MainAxisSize.min,
26 | children: [
27 | _radioItem("Biginner", 1),
28 | _radioItem("Intermediate", 2),
29 | _radioItem("Advance", 3),
30 | ],
31 | ),
32 | );
33 | }
34 |
35 | Widget _radioItem(String text, int value) {
36 | return Row(
37 | children: [
38 | Radio(
39 | activeColor: UIHelper.EXERCISES_CARD_BOTTOM,
40 | groupValue: _currValue,
41 | value: value,
42 | onChanged: (index) {
43 | setState(() {
44 | _currValue = index;
45 | });
46 | widget.onPress("$text");
47 | },
48 | ),
49 | Text(text)
50 | ],
51 | );
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/ui/views/home/reminder/reminder_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/constants.dart';
3 | import 'package:healthoui/ui/shared/text_style.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 |
6 | class ReminderView extends StatefulWidget {
7 | @override
8 | _ReminderViewState createState() => _ReminderViewState();
9 | }
10 |
11 | class _ReminderViewState extends State {
12 | @override
13 | Widget build(BuildContext context) {
14 | return Scaffold(
15 | backgroundColor: Colors.white,
16 | floatingActionButton: FloatingActionButton(
17 | onPressed: () {},
18 | backgroundColor: Colors.transparent,
19 | elevation: 0,
20 | shape: CircleBorder(
21 | side: BorderSide(color: Colors.yellow[600], width: 3)),
22 | child: Icon(
23 | Icons.add,
24 | color: Colors.yellow[600],
25 | size: UIHelper.Space30,
26 | ),
27 | ),
28 | body: ListView.builder(
29 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space10),
30 | itemCount: Constants.REMINDER_COUNT,
31 | itemBuilder: (context, index) {
32 | /// Set listview both [FloatingActionButton] space
33 | return index == Constants.REMINDER_COUNT - 1
34 | ? SizedBox(height: UIHelper.Space100)
35 | : _cardItem;
36 | },
37 | ));
38 | }
39 |
40 | Widget get _cardItem => Card(
41 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
42 | margin: EdgeInsets.only(top: UIHelper.Space20),
43 | child: Container(
44 | height: UIHelper.dynamicHeight(UIHelper.Space300),
45 | padding: EdgeInsets.all(UIHelper.Space10),
46 | child: Row(
47 | children: [
48 | Expanded(
49 | child: Column(
50 | mainAxisAlignment: MainAxisAlignment.spaceAround,
51 | crossAxisAlignment: CrossAxisAlignment.start,
52 | children: [
53 | Text("Workout Reminder", style: profileHeaderCardSubTitle),
54 | Text("06 : 00 AM", style: profileHeaderCardSubTitle),
55 | RichText(
56 | text: TextSpan(children: [
57 | TextSpan(
58 | text: "Repeat",
59 | style: profileHeaderCardNormalYellowTitle),
60 | TextSpan(text: " -- ", style: profileHeaderCardSubTitle),
61 | TextSpan(
62 | text: "Mon, Tue, fri",
63 | style: profileHeaderCardNormalTitle)
64 | ]),
65 | ),
66 | ],
67 | )),
68 | Column(
69 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
70 | crossAxisAlignment: CrossAxisAlignment.end,
71 | children: [
72 | SizedBox(
73 | width: UIHelper.Space25 * 3,
74 | child: Switch(
75 | materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
76 | value: false,
77 | activeColor: Colors.yellow[600],
78 | inactiveTrackColor: Colors.yellow[600],
79 | activeTrackColor: Colors.yellow[600],
80 | inactiveThumbColor: Colors.yellow[600],
81 | onChanged: (val) {},
82 | ),
83 | ),
84 | Icon(
85 | Icons.delete_outline,
86 | color: Colors.yellow[600],
87 | size: UIHelper.Space30,
88 | )
89 | ],
90 | ),
91 | ],
92 | ),
93 | ),
94 | );
95 | }
96 |
--------------------------------------------------------------------------------
/lib/ui/views/home/settings/profile_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/constants.dart';
3 | import 'package:healthoui/ui/shared/text_style.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 | import 'package:healthoui/ui/shared/widget/settings_card_widget.dart';
6 |
7 | class ProfileView extends StatefulWidget {
8 | ProfileView({Key key}) : super(key: key);
9 |
10 | _ProfileViewState createState() => _ProfileViewState();
11 | }
12 |
13 | class _ProfileViewState extends State {
14 | @override
15 | Widget build(BuildContext context) {
16 | return Scaffold(
17 | backgroundColor: Colors.white,
18 | appBar: _appBar,
19 | body: ListView(
20 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
21 | children: [
22 | UIHelper.verticalSpace,
23 | _profileCard,
24 | _settingsNormalCard(
25 | title: "Completed Task",
26 | icon: Icons.done_outline,
27 | rightWidget: Text(
28 | "3",
29 | style: profileHeaderCardSubTitle,
30 | )),
31 | _settingsNormalCard(
32 | title: "Level",
33 | icon: Icons.battery_charging_full,
34 | rightWidget: Text(
35 | "Beginner",
36 | style: profileHeaderCardSubTitle,
37 | )),
38 | _settingsNormalCard(
39 | title: "Goals",
40 | icon: Icons.track_changes,
41 | rightWidget: Text(
42 | "Mass Gain",
43 | style: profileHeaderCardSubTitle,
44 | )),
45 | _settingsNormalCard(
46 | title: "Challanges",
47 | icon: Icons.track_changes,
48 | rightWidget: Text(
49 | "4",
50 | style: profileHeaderCardSubTitle,
51 | )),
52 | _settingsNormalCard(
53 | title: "Plans",
54 | icon: Icons.track_changes,
55 | rightWidget: Text(
56 | "2",
57 | style: profileHeaderCardSubTitle,
58 | )),
59 | _settingsNormalCard(
60 | title: "Fitness Device",
61 | icon: Icons.devices,
62 | rightWidget: Text(
63 | "MI",
64 | style: profileHeaderCardSubTitle,
65 | )),
66 | _settingsNormalCard(icon: Icons.share, title: Constants.REFER_FRIEND),
67 | ],
68 | ),
69 | );
70 | }
71 |
72 | Widget get _appBar => AppBar(
73 | elevation: 0,
74 | centerTitle: false,
75 | title: Text("Profile"),
76 | brightness: Brightness.light,
77 | leading: IconButton(
78 | icon: Icon(Icons.arrow_back),
79 | onPressed: () => Navigator.of(context).pop(),
80 | ),
81 | iconTheme: IconThemeData(color: Colors.black),
82 | textTheme: TextTheme(title: profileHeaderCardTitle),
83 | backgroundColor: Colors.white,
84 | );
85 |
86 | Widget _settingsNormalCard(
87 | {String title, IconData icon, Widget rightWidget}) =>
88 | SettingsCardWidget(
89 | title: title,
90 | icon: icon,
91 | trailing: rightWidget,
92 | );
93 |
94 | Widget get _profileCard => Card(
95 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
96 | elevation: 0,
97 | child: Row(
98 | children: [
99 | Expanded(
100 | child: Container(
101 | height: UIHelper.Space100,
102 | child: ClipRRect(
103 | borderRadius: BorderRadius.circular(UIHelper.Space15),
104 | child:
105 | Image.network(Constants.PROFILE_IMAGE, fit: BoxFit.cover),
106 | ),
107 | ),
108 | ),
109 | UIHelper.horizontalSpace,
110 | Expanded(
111 | flex: 2,
112 | child: Column(
113 | mainAxisAlignment: MainAxisAlignment.start,
114 | crossAxisAlignment: CrossAxisAlignment.start,
115 | children: [
116 | Text("Veli Bacik", style: profileHeaderCardTitle),
117 | Text("7219796607", style: profileHeaderCardSubTitle),
118 | Text("vbacik.10@gmail.com",
119 | style: profileHeaderCardNormalTitle),
120 | Row(
121 | mainAxisAlignment: MainAxisAlignment.start,
122 | children: [
123 | Icon(Icons.place, size: UIHelper.Space15),
124 | Text("Kartal", style: profileHeaderCardNormalTitle)
125 | ],
126 | )
127 | ],
128 | ),
129 | )
130 | ],
131 | ),
132 | );
133 | }
134 |
--------------------------------------------------------------------------------
/lib/ui/views/home/settings_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:healthoui/ui/shared/constants.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 | import 'package:healthoui/ui/shared/widget/settings_card_widget.dart';
6 |
7 | class SettingsView extends StatefulWidget {
8 | @override
9 | _SettingsViewState createState() => _SettingsViewState();
10 | }
11 |
12 | class _SettingsViewState extends State {
13 | int _selectedLangIndex = 0;
14 | int _tempSelectedIndex = 0;
15 | bool _notification = false;
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return SafeArea(
20 | child: Scaffold(
21 | backgroundColor: Colors.white,
22 | body: ListView(
23 | children: [
24 | UIHelper.verticalSpace,
25 | _settingsProfileCard(),
26 | _settingsLangOptionsCard(
27 | icon: Icons.language, title: Constants.LANGUAGE_OPTIONS),
28 | _settingsNormalCard(
29 | icon: Icons.healing, title: Constants.HEALTH_DATA),
30 | _settingsNotificationsCard(
31 | icon: Icons.notifications, title: Constants.NOTIFICATIONS),
32 | _settingsNormalCard(
33 | icon: Icons.share, title: Constants.REFER_FRIEND),
34 | _settingsNormalCard(
35 | icon: Icons.rate_review, title: Constants.FEEDBACK),
36 | _settingsNormalCard(icon: Icons.star, title: Constants.RATE_US),
37 | _settingsNormalCard(
38 | icon: Icons.exit_to_app, title: Constants.LOG_OUT),
39 | ],
40 | ),
41 | ),
42 | );
43 | }
44 |
45 | Widget get _rigtActionItem => Chip(
46 | label: Icon(Icons.search),
47 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
48 | shape: Border(),
49 | );
50 |
51 | Widget get _profileIcon => CircleAvatar(
52 | backgroundImage: NetworkImage(Constants.PROFILE_IMAGE),
53 | );
54 |
55 | Widget _settingsProfileCard() {
56 | return Card(
57 | elevation: UIHelper.Space5,
58 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
59 | shape: RoundedRectangleBorder(
60 | borderRadius: BorderRadius.circular(UIHelper.Space10)),
61 | child: ListTile(
62 | title: Text("Profile"),
63 | leading: _profileIcon,
64 | onTap: () => Navigator.of(context).pushNamed("/profile"),
65 | ),
66 | );
67 | }
68 |
69 | Widget _settingsNormalCard({String title, IconData icon}) =>
70 | SettingsCardWidget(
71 | title: title,
72 | icon: icon,
73 | );
74 |
75 | Widget _settingsNotificationsCard({String title, IconData icon}) =>
76 | SettingsCardWidget(
77 | title: title,
78 | icon: icon,
79 | trailing: FlatButton(
80 | child: Text(_notification ? "On" : "Off"),
81 | onPressed: () {
82 | setState(() {
83 | _notification = !_notification;
84 | });
85 | },
86 | ),
87 | );
88 |
89 | Widget _settingsLangOptionsCard({String title, IconData icon}) =>
90 | SettingsCardWidget(
91 | title: title,
92 | icon: icon,
93 | trailing: FlatButton(
94 | child: Text(Constants.LANGUAGES[_selectedLangIndex]),
95 | onPressed: () async {
96 | await showCupertinoModalPopup(
97 | context: context,
98 | builder: (BuildContext context) {
99 | return _buildBottomPicker(
100 | CupertinoPicker(
101 | itemExtent: UIHelper.Space50,
102 | backgroundColor: CupertinoColors.white,
103 | onSelectedItemChanged: (int index) {
104 | _tempSelectedIndex = index;
105 | },
106 | children: List.generate(Constants.LANGUAGES.length,
107 | (int index) {
108 | return Center(
109 | child: Text(Constants.LANGUAGES[index]),
110 | );
111 | }),
112 | ),
113 | );
114 | },
115 | );
116 | },
117 | ),
118 | );
119 |
120 | //
121 |
122 | Widget _buildBottomPicker(Widget picker) {
123 | return Container(
124 | height: UIHelper.dynamicHeight(UIHelper.Space500),
125 | color: CupertinoColors.white,
126 | child: SafeArea(
127 | top: false,
128 | child: Column(
129 | children: [
130 | Expanded(child: picker),
131 | FlatButton.icon(
132 | icon: Icon(Icons.check),
133 | label: Text("Save"),
134 | onPressed: () {
135 | /// Check changes [_tempSelectedIndex] & [_selectedLangIndex]
136 | if (_tempSelectedIndex != _selectedLangIndex) {
137 | setState(() {
138 | _selectedLangIndex = _tempSelectedIndex;
139 | });
140 | }
141 | },
142 | ),
143 | ],
144 | ),
145 | ),
146 | );
147 | }
148 | }
149 |
--------------------------------------------------------------------------------
/lib/ui/views/home/tips/sub/exercise_view.dart:
--------------------------------------------------------------------------------
1 | import 'dart:collection';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:healthoui/ui/shared/text_style.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 |
7 | class ExerciseView extends StatefulWidget {
8 | ExerciseView({Key key}) : super(key: key);
9 |
10 | _ExerciseViewState createState() => _ExerciseViewState();
11 | }
12 |
13 | class _ExerciseViewState extends State {
14 | List exercises = [];
15 | UnmodifiableListView get items => UnmodifiableListView(exercises);
16 |
17 | @override
18 | void initState() {
19 | super.initState();
20 | for (var i = 0; i < 8; i++) {
21 | exercises.add("$i");
22 | }
23 | }
24 |
25 | @override
26 | Widget build(BuildContext context) {
27 | return Scaffold(
28 | body: GridView.count(
29 | crossAxisCount: 2,
30 | children: List.generate(items.length, (index) {
31 | return _card(index + 1);
32 | }),
33 | ),
34 | );
35 | }
36 |
37 | Widget _card(int index) {
38 | return Card(
39 | color: Colors.green,
40 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
41 | child: Stack(
42 | children: [
43 | _images(index.toString()),
44 | _aligmentWidget(
45 | child: ListTile(
46 | title: Wrap(
47 | alignment: WrapAlignment.center,
48 | children: [
49 | Text("Biceps", style: profileHeaderCardTitle),
50 | Text("16 Exercises", style: profileHeaderCardNormalTitle),
51 | ],
52 | ),
53 | )),
54 | ],
55 | ),
56 | );
57 | }
58 |
59 | Widget _images(String index) {
60 | return Positioned.fill(
61 | child: Image.asset(
62 | "assets/images/exercises/$index.png",
63 | fit: BoxFit.fill,
64 | ),
65 | );
66 | }
67 |
68 | Widget _aligmentWidget({Widget child}) {
69 | return Align(
70 | alignment: Alignment.bottomCenter,
71 | child: Container(
72 | margin: EdgeInsets.only(right: 20),
73 | decoration: BoxDecoration(
74 | color: UIHelper.EXERCISES_CARD_BOTTOM,
75 | borderRadius: BorderRadius.only(
76 | bottomLeft: Radius.circular(15), topRight: Radius.circular(50)),
77 | ),
78 | child: child),
79 | );
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/lib/ui/views/home/tips/sub/health_tips_detail_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/core/model/tips.dart';
3 | import 'package:healthoui/ui/shared/constants.dart';
4 | import 'package:healthoui/ui/shared/text_style.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 |
7 | class HealthTipsDetailView extends StatelessWidget {
8 | @override
9 | Widget build(BuildContext context) {
10 | HealthTips tipItem = ModalRoute.of(context).settings.arguments;
11 | return Scaffold(
12 | appBar: AppBar(
13 | centerTitle: false,
14 | title: Text(Constants.HEALTH_TIPS),
15 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
16 | ),
17 | body: Column(
18 | children: [
19 | UIHelper.verticalSpace,
20 | Image.asset(tipItem.image),
21 | UIHelper.verticalSpace,
22 | Text(
23 | tipItem.title,
24 | style: profileHeaderCardSubTitle,
25 | ),
26 | Expanded(
27 | child: ListView.builder(
28 | itemCount: 6,
29 | shrinkWrap: true,
30 | itemBuilder: (context, index) {
31 | return ListTile(
32 | title: RichText(
33 | text: TextSpan(children: [
34 | TextSpan(
35 | text: "$index) ", style: profileHeaderCardSubTitle),
36 | TextSpan(
37 | text: "${tipItem.subTitle})",
38 | style: profileHeaderCardNormalTitle),
39 | ]),
40 | ),
41 | // title: Text("$index) ${tipItem.subTitle}",
42 | // style: profileHeaderCardNormalTitle),
43 | );
44 | },
45 | ),
46 | )
47 | ],
48 | ),
49 | );
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/ui/views/home/tips/sub/health_tips_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/core/model/tips.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 |
5 | class HealthTipsView extends StatefulWidget {
6 | @override
7 | _HealthTipsViewState createState() => _HealthTipsViewState();
8 | }
9 |
10 | class _HealthTipsViewState extends State {
11 | List listHealthTips = [];
12 | @override
13 | void initState() {
14 | super.initState();
15 |
16 | listHealthTips.add(HealthTips(
17 | title: "A Diet Without Exercise is Useless. ",
18 | subTitle: " Interval Training is a form of exercise in which"
19 | "you alternate between two or more different "
20 | "exercise . This Consist of doing an exercise at"
21 | "a very high level intensity for a short bursts.",
22 | image: UIHelper.PERSONAL_TRAINER));
23 | }
24 |
25 | @override
26 | Widget build(BuildContext context) {
27 | return ListView.builder(
28 | itemCount: 5,
29 | padding: EdgeInsets.all(10),
30 | shrinkWrap: true,
31 | //We have single value so set just zero.
32 | itemBuilder: (context, index) => _card(listHealthTips[0]),
33 | );
34 | }
35 |
36 | Widget _card(HealthTips tips) => InkWell(
37 | onTap: () => Navigator.of(context)
38 | .pushNamed("/healthTipsDetail", arguments: tips),
39 | child: Card(
40 | margin: EdgeInsets.only(top: UIHelper.Space20),
41 | shape: RoundedRectangleBorder(
42 | borderRadius: BorderRadius.only(
43 | bottomLeft: Radius.circular(UIHelper.Space20),
44 | bottomRight: Radius.circular(UIHelper.Space20))),
45 | child: Container(
46 | height: UIHelper.Space250,
47 | child: Stack(
48 | children: [
49 | Positioned.fill(
50 | // Container height - 20
51 | top: UIHelper.Space80,
52 | child: Image.asset(tips.image, fit: BoxFit.fill)),
53 | Container(
54 | height: UIHelper.Space100,
55 | decoration: BoxDecoration(
56 | color: UIHelper.SETTINGS_CARD_BACKGROUND_COLOR,
57 | borderRadius: BorderRadius.vertical(
58 | bottom: Radius.circular(UIHelper.Space10),
59 | top: Radius.circular(UIHelper.Space10),
60 | ),
61 | ),
62 | child: ListTile(
63 | title: Text(tips.title),
64 | subtitle: Text(tips.subTitle, maxLines: 2),
65 | ),
66 | )
67 | ],
68 | ),
69 | ),
70 | ),
71 | );
72 | }
73 |
--------------------------------------------------------------------------------
/lib/ui/views/home/tips/user_programs_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:healthoui/ui/shared/constants.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 |
5 | import 'sub/exercise_view.dart';
6 | import 'sub/health_tips_view.dart';
7 |
8 | class UserProgramsView extends StatefulWidget {
9 | UserProgramsView({Key key}) : super(key: key);
10 |
11 | _UserProgramsViewState createState() => _UserProgramsViewState();
12 | }
13 |
14 | class _UserProgramsViewState extends State {
15 | @override
16 | Widget build(BuildContext context) {
17 | return DefaultTabController(
18 | length: 3,
19 | child: Scaffold(
20 | appBar: AppBar(
21 | backgroundColor: UIHelper.SETTINGS_APP_BAR_COLOR,
22 | automaticallyImplyLeading: false,
23 | elevation: 10,
24 | flexibleSpace: FlexibleSpaceBar(
25 | titlePadding: EdgeInsets.all(0),
26 | centerTitle: false,
27 | title: TabBar(
28 | indicatorColor: Colors.yellow,
29 | indicatorWeight: 1,
30 | indicatorSize: TabBarIndicatorSize.label,
31 | indicatorPadding: EdgeInsets.only(bottom: 0),
32 | labelColor: Colors.yellow,
33 | unselectedLabelColor: Colors.white,
34 | isScrollable: true,
35 | tabs: [
36 | Tab(text: Constants.HEALTH_TIPS),
37 | Tab(text: Constants.HEALTH_EXERCISES),
38 | Tab(text: Constants.HEALTH_WORKOUT_PLAN),
39 | ],
40 | ),
41 | ),
42 | ),
43 | body: TabBarView(
44 | children: [
45 | HealthTipsView(),
46 | ExerciseView(),
47 | Icon(Icons.directions_bike),
48 | ],
49 | ),
50 | ),
51 | );
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/ui/views/login/login_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_screenutil/flutter_screenutil.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
5 |
6 | class LoginView extends StatefulWidget {
7 | LoginView({Key key}) : super(key: key);
8 |
9 | _LoginViewState createState() => _LoginViewState();
10 | }
11 |
12 | class _LoginViewState extends State {
13 | @override
14 | Widget build(BuildContext context) {
15 | return Scaffold(
16 | body: Padding(
17 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space10),
18 | child: Column(
19 | mainAxisAlignment: MainAxisAlignment.center,
20 | crossAxisAlignment: CrossAxisAlignment.center,
21 | children: [_headerImages, Spacer(), _bodyItems],
22 | ),
23 | ),
24 | );
25 | }
26 |
27 | Widget get _headerImages => Expanded(
28 | flex: 4,
29 | child: Column(
30 | children: [
31 | Expanded(
32 | child: Image.asset(UIHelper.LOGIN_HEALTH_IMAGE),
33 | ),
34 | Image.asset(UIHelper.HEALTHO_ICON),
35 | ],
36 | ),
37 | );
38 |
39 | Widget get _bodyItems => Expanded(
40 | flex: 3,
41 | child: Column(
42 | children: [
43 | _mobileNumberButton,
44 | _spaceHorizontal,
45 | _socialIconsBody
46 | ],
47 | ),
48 | );
49 |
50 | Widget get _mobileNumberButton => Row(
51 | children: [
52 | Spacer(),
53 | Expanded(
54 | flex: 5,
55 | child: RoundedButtonWidget(
56 | color: Colors.grey[100],
57 | onPress: () {},
58 | child: ListTile(
59 | leading: Icon(Icons.keyboard),
60 | title: Text(
61 | "Mobile Number",
62 | style: TextStyle(fontSize: 14),
63 | ),
64 | ),
65 | ),
66 | ),
67 | Spacer(),
68 | ],
69 | );
70 |
71 | Widget get _spaceHorizontal => SizedBox(
72 | height: ScreenUtil.instance.setHeight(UIHelper.Space35),
73 | );
74 |
75 | Widget get _socialIconsBody => Row(
76 | children: [
77 | Expanded(
78 | flex: 4,
79 | child: _socialButton(
80 | color: Colors.blue[400],
81 | textColor: Colors.white,
82 | image: Image.asset(UIHelper.FACEBOOK_ICON),
83 | text: "Facebook"),
84 | ),
85 | Spacer(),
86 | Expanded(
87 | flex: 4,
88 | child: _socialButton(
89 | color: Colors.white,
90 | image: Image.asset(UIHelper.GOOGLE_ICON),
91 | text: "Google"),
92 | ),
93 | ],
94 | );
95 |
96 | Widget _socialButton(
97 | {@required String text,
98 | @required Image image,
99 | Color color,
100 | Color textColor}) {
101 | return RoundedButtonWidget(
102 | color: color,
103 | child: Row(
104 | children: [
105 | Spacer(),
106 | image,
107 | _verticalSpace,
108 | _socialButtonText(text, textColor)
109 | ],
110 | ),
111 | onPress: () {},
112 | );
113 | }
114 |
115 | Widget get _verticalSpace => SizedBox(
116 | width: UIHelper.Space15,
117 | );
118 |
119 | Widget _socialButtonText(String text, Color textColor) => Expanded(
120 | flex: 5,
121 | child: Text(
122 | text,
123 | style: TextStyle(color: textColor),
124 | ),
125 | );
126 | }
127 |
--------------------------------------------------------------------------------
/lib/ui/views/login/onboarding_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter/rendering.dart';
3 | import 'package:healthoui/ui/shared/text_style.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 | import 'package:healthoui/ui/shared/widget/onboard_widget.dart';
6 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
7 |
8 | class OnBoardingView extends StatefulWidget {
9 | OnBoardingView({Key key}) : super(key: key);
10 |
11 | _OnBoardingViewState createState() => _OnBoardingViewState();
12 | }
13 |
14 | class _OnBoardingViewState extends State {
15 | PageController _pageController;
16 | double _currentPageIndex = 0;
17 | @override
18 | void initState() {
19 | super.initState();
20 | _pageController = new PageController();
21 | }
22 |
23 | _navigateLoginPage() {
24 | Navigator.of(context)
25 | .pushNamedAndRemoveUntil("/login", (Route route) => false);
26 | }
27 |
28 | void _onPageChangeEvent(double number) {
29 | if (number == UIHelper.ONBOARD_PAGE_COUNT) {
30 | //end page
31 | _navigateLoginPage();
32 | return;
33 | } else {
34 | setState(() {
35 | _currentPageIndex = number;
36 | });
37 | }
38 | }
39 |
40 | @override
41 | Widget build(BuildContext context) {
42 | return Scaffold(
43 | appBar: _appBar,
44 | body: SafeArea(
45 | child: Column(
46 | children: [
47 | Expanded(child: _pageView),
48 | _indicatorPageView,
49 | _nextButtonWrap
50 | ],
51 | ),
52 | ),
53 | );
54 | }
55 |
56 | Widget get _appBar => AppBar(
57 | backgroundColor: Theme.of(context).scaffoldBackgroundColor,
58 | elevation: UIHelper.Space0,
59 | iconTheme: IconThemeData(color: Colors.black),
60 | actions: [
61 | ActionChip(
62 | label: Text(
63 | "skip",
64 | style: TextStyle(letterSpacing: 2),
65 | ),
66 | elevation: UIHelper.Space10,
67 | onPressed: _navigateLoginPage,
68 | ),
69 | SizedBox(
70 | width: UIHelper.Space15,
71 | ),
72 | ],
73 | );
74 |
75 | Widget get _indicatorPageView => SizedBox(
76 | height: UIHelper.Space50, width: UIHelper.dynamicWidth(300), child: _pageIndicator);
77 |
78 | Widget get _nextButtonWrap => SizedBox(
79 | width: UIHelper.dynamicHeight(UIHelper.Space200), child: _nextButton);
80 |
81 | Widget get _pageView => PageView(
82 | onPageChanged: (page) {
83 | _onPageChangeEvent(page.toDouble());
84 | },
85 | controller: _pageController,
86 | children: [_onBoardFirst, _onBoardSecond, _onBoardSecond],
87 | );
88 |
89 | Widget get _onBoardFirst => OnBoardWidget(
90 | title: "Exercises",
91 | subTitle: "To Your Personalized Profile",
92 | imagePath: "onboard1",
93 | );
94 |
95 | Widget get _onBoardSecond => OnBoardWidget(
96 | title: "Keep Eye On Health Tracking",
97 | subTitle: "Log & reminder your activities",
98 | imagePath: "onboard2",
99 | );
100 | Widget get _onBoardThird => OnBoardWidget(
101 | title: "Check Your Progress",
102 | subTitle: "An tracking calendar",
103 | imagePath: "onboard3",
104 | );
105 |
106 | Widget get _pageIndicator => ListView.builder(
107 | itemCount: UIHelper.ONBOARD_PAGE_COUNT,
108 | scrollDirection: Axis.horizontal,
109 | itemBuilder: (context, index) {
110 | return Padding(
111 | padding: EdgeInsets.all(8.0),
112 | child: CircleAvatar(
113 | radius: 5,
114 | backgroundColor:
115 | index == _currentPageIndex ? Colors.yellow : Colors.grey,
116 | ),
117 | );
118 | },
119 | );
120 |
121 | void _nextButtonOnPress() {
122 | _onPageChangeEvent(_currentPageIndex);
123 | _pageController.nextPage(
124 | duration: Duration(milliseconds: UIHelper.ONBOARD_NEXT_DURATION),
125 | curve: Curves.easeIn);
126 | }
127 |
128 | Widget get _nextButton => RoundedButtonWidget(
129 | onPress: _nextButtonOnPress,
130 | child: Text(
131 | "NEXT",
132 | style: onBoardingNextButtonStyle,
133 | ),
134 | );
135 | }
136 |
--------------------------------------------------------------------------------
/lib/ui/views/login/phone_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:easy_localization/easy_localization.dart';
2 | import 'package:flutter/cupertino.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:flutter_screenutil/flutter_screenutil.dart';
5 | import 'package:healthoui/core/form_helper.dart';
6 | import 'package:healthoui/ui/shared/text_style.dart';
7 | import 'package:healthoui/ui/shared/ui_helper.dart';
8 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
9 |
10 | class PhoneView extends StatefulWidget {
11 | PhoneView({Key key}) : super(key: key);
12 |
13 | _PhoneViewState createState() => _PhoneViewState();
14 | }
15 |
16 | class _PhoneViewState extends State {
17 | final _formKey = GlobalKey();
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | ScreenUtil().init(context);
22 | return Scaffold(
23 | body: Padding(
24 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
25 | child: Form(key: _formKey, child: _phoneViewColumn)),
26 | );
27 | }
28 |
29 | Widget get _phoneViewColumn => Column(
30 | mainAxisAlignment: MainAxisAlignment.center,
31 | crossAxisAlignment: CrossAxisAlignment.start,
32 | children: [
33 | _titleTextStyle,
34 | UIHelper.verticalSpace,
35 | _textField,
36 | UIHelper.verticalSpace,
37 | _nextButtonWrapFilled
38 | ],
39 | );
40 |
41 | Widget get _titleTextStyle => Text(
42 | AppLocalizations.of(context).tr('phoneViewTitle'),
43 | style: phoneTitleTextStyle,
44 | );
45 |
46 | Widget get _textField => TextFormField(
47 | keyboardType: TextInputType.phone,
48 | validator: FormHelper.checkPhoneNumber,
49 | decoration: InputDecoration(
50 | hintText: "i.e +91 9730627087",
51 | hintStyle: phoneTextInputHintTextStyle,
52 | filled: true,
53 | prefixText: "+90",
54 | fillColor: phoneInputBackgroundColor,
55 | enabledBorder: circleTextInputDecoration,
56 | border: circleTextInputDecoration,
57 | ),
58 | );
59 |
60 | Widget get _nextButtonWrapFilled => Container(
61 | height: UIHelper.Space50,
62 | child: SizedBox.expand(child: _nextButton),
63 | );
64 |
65 | Widget get _nextButton => RoundedButtonWidget(
66 | color: phoneVerifyButtonColor,
67 | onPress: () {
68 | if (_formKey.currentState.validate()) {
69 | Navigator.of(context).pushNamed("/verify");
70 | }
71 | },
72 | child: Text(
73 | "VERIFY",
74 | style: onBoardingNextButtonStyle,
75 | ),
76 | );
77 | }
78 |
--------------------------------------------------------------------------------
/lib/ui/views/login/register_goal_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_screenutil/flutter_screenutil.dart';
4 | import 'package:healthoui/ui/shared/text_style.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
7 |
8 | class UserRegisterGoalView extends StatefulWidget {
9 | UserRegisterGoalView({Key key}) : super(key: key);
10 |
11 | _UserRegisterGoalViewState createState() => _UserRegisterGoalViewState();
12 | }
13 |
14 | class _UserRegisterGoalViewState extends State {
15 | int _selectCardIndex = 0;
16 | List goalCardList;
17 |
18 | @override
19 | void initState() {
20 | super.initState();
21 | goalCardList = [];
22 | goalCardList.add("Fat Loss");
23 | goalCardList.add("Weight Gain");
24 | goalCardList.add("Muscle Gain");
25 | goalCardList.add("Others");
26 | }
27 |
28 | @override
29 | Widget build(BuildContext context) {
30 | ScreenUtil().init(context);
31 | return Scaffold(
32 | body: Padding(
33 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
34 | child: Column(
35 | crossAxisAlignment: CrossAxisAlignment.start,
36 | children: [
37 | Spacer(),
38 | _titleTextStyle,
39 | Expanded(flex: 4, child: _goalCardList),
40 | ],
41 | )),
42 | );
43 | }
44 |
45 | Widget get _goalCardList => ListView.builder(
46 | itemCount: goalCardList.length,
47 | itemBuilder: (context, index) =>
48 | _cardGoalItem(goalCardList[index], index),
49 | );
50 | Widget _cardGoalItem(String text, int index) => Card(
51 | color: goalCardRaisedColor,
52 | shape: goalCardInputDecoration,
53 | child: ListTile(
54 | onTap: () => _cardOnTap(index),
55 | leading: CircleAvatar(
56 | radius: UIHelper.Space14,
57 | backgroundColor: _backgroundColor(index),
58 | ),
59 | title: Text(text),
60 | ),
61 | );
62 |
63 | Widget get _titleTextStyle => Text(
64 | "Select Your Goal",
65 | style: userRegisterPageTitleStyle,
66 | );
67 |
68 | void _cardOnTap(int index) {
69 | setState(() {
70 | _selectCardIndex = index;
71 | });
72 | }
73 |
74 | Color _backgroundColor(int index) => _selectCardIndex == index
75 | ? phoneVerifyButtonColor
76 | : Colors.grey[UIHelper.Space300.toInt()];
77 | }
78 |
--------------------------------------------------------------------------------
/lib/ui/views/login/register_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter_screenutil/flutter_screenutil.dart';
4 | import 'package:healthoui/ui/shared/text_style.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
7 |
8 | class UserRegisterView extends StatefulWidget {
9 | UserRegisterView({Key key}) : super(key: key);
10 |
11 | _UserRegisterViewState createState() => _UserRegisterViewState();
12 | }
13 |
14 | class _UserRegisterViewState extends State {
15 | @override
16 | Widget build(BuildContext context) {
17 | ScreenUtil().init(context);
18 | return Scaffold(
19 | body: Padding(
20 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
21 | child: _phoneViewColumn),
22 | );
23 | }
24 |
25 | Widget get _phoneViewColumn => Column(
26 | mainAxisAlignment: MainAxisAlignment.start,
27 | crossAxisAlignment: CrossAxisAlignment.start,
28 | children: [
29 | Spacer(),
30 | Expanded(
31 | flex: 3,
32 | child: Column(
33 | crossAxisAlignment: CrossAxisAlignment.start,
34 | children: [
35 | _titleTextStyle,
36 | UIHelper.verticalSpace,
37 | _textField,
38 | UIHelper.verticalSpaceLarge,
39 | _nextButtonWrapFilled
40 | ],
41 | ),
42 | ),
43 | Spacer(),
44 | ],
45 | );
46 |
47 | Widget get _titleTextStyle => Text(
48 | "Enter Your Name",
49 | style: userRegisterPageTitleStyle,
50 | );
51 |
52 | Widget get _textField => TextField(
53 | keyboardType: TextInputType.text,
54 | decoration: InputDecoration(
55 | hintText: "ie. Ashish Chutake",
56 | hintStyle: phoneTextInputHintTextStyle,
57 | filled: true,
58 | fillColor: phoneInputBackgroundColor,
59 | enabledBorder: circleTextInputDecoration,
60 | border: circleTextInputDecoration,
61 | ),
62 | );
63 |
64 | Widget get _nextButtonWrapFilled => Container(
65 | height: UIHelper.Space50,
66 | child: SizedBox.expand(child: _nextButton),
67 | );
68 |
69 | Widget get _nextButton => RoundedButtonWidget(
70 | color: phoneVerifyButtonColor,
71 | onPress: () => Navigator.of(context).pushNamed("/verify"),
72 | child: Text(
73 | "NEXT",
74 | style: onBoardingNextButtonStyle,
75 | ),
76 | );
77 | }
78 |
--------------------------------------------------------------------------------
/lib/ui/views/login/splash_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_screenutil/flutter_screenutil.dart';
3 | import 'package:healthoui/ui/shared/ui_helper.dart';
4 |
5 | class SplashView extends StatefulWidget {
6 | @override
7 | _SplashViewState createState() => _SplashViewState();
8 | }
9 |
10 | class _SplashViewState extends State {
11 | @override
12 | void initState() {
13 | super.initState();
14 | _navigateToHomePage();
15 | }
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | _screenUtilInit();
20 | return Scaffold(
21 | body: _centerWidget,
22 | );
23 | }
24 |
25 | void _navigateToHomePage() {
26 | Future.delayed(Duration(milliseconds: UIHelper.SPLASH_DURATION), () {
27 | Navigator.of(context).pushNamed("/onboard");
28 | });
29 | }
30 |
31 | void _screenUtilInit() => ScreenUtil().init(context);
32 |
33 | Widget get _centerWidget => Center(
34 | child: _helthoImages,
35 | );
36 |
37 | Widget get _helthoImages => Image.asset(UIHelper.HEALTHO_ICON);
38 | }
39 |
--------------------------------------------------------------------------------
/lib/ui/views/login/verify_phone.view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_screenutil/flutter_screenutil.dart';
3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4 | import 'package:healthoui/ui/shared/text_style.dart';
5 | import 'package:healthoui/ui/shared/ui_helper.dart';
6 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
7 |
8 | class VerifyPhoneView extends StatefulWidget {
9 | @override
10 | _VerifyViewState createState() => _VerifyViewState();
11 | }
12 |
13 | class _VerifyViewState extends State {
14 | bool _isVerifyComplete = false;
15 | FocusNode _firstFocus;
16 | FocusNode _secondFocus;
17 | FocusNode _thirdFocus;
18 | FocusNode _fourthFocus;
19 |
20 | @override
21 | void initState() {
22 | super.initState();
23 | _firstFocus = new FocusNode();
24 | _secondFocus = new FocusNode();
25 | _thirdFocus = new FocusNode();
26 | _fourthFocus = new FocusNode();
27 | }
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | ScreenUtil().init(context);
32 |
33 | return Scaffold(
34 | body: Padding(
35 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
36 | child: Center(child: _phoneInputVerify),
37 | ),
38 | );
39 | }
40 |
41 | Widget get _phoneInputVerify => Column(
42 | mainAxisAlignment: MainAxisAlignment.center,
43 | crossAxisAlignment: CrossAxisAlignment.center,
44 | children: [
45 | Spacer(
46 | flex: 2,
47 | ),
48 | Expanded(
49 | flex: 16,
50 | child: _isVerifyComplete ? _succesVerifyView : _inputPhoneView),
51 | Spacer(
52 | flex: 2,
53 | ),
54 | ],
55 | );
56 |
57 | Widget get _titleText => Text(
58 | "Enter The code that was send to your Entered Mobile Number",
59 | textAlign: TextAlign.center,
60 | style: phoneTitleTextRegularStyle,
61 | );
62 |
63 | Widget get _changeNumber => Text(
64 | "Change Number",
65 | style: TextStyle(color: Colors.grey),
66 | );
67 |
68 | Widget get _resendText => Text(
69 | "Resend (30)",
70 | style: TextStyle(color: phoneVerifyResendTextColor),
71 | );
72 |
73 | Widget _circleTextField(
74 | {FocusNode node, FocusNode nextNode, FocusNode backNode}) =>
75 | TextField(
76 | maxLength: 1,
77 | focusNode: node,
78 | keyboardType: TextInputType.number,
79 | textAlign: TextAlign.center,
80 | onChanged: (val) {
81 | if (val.isNotEmpty) {
82 | if (node == _fourthFocus) {
83 | setState(() {
84 | _isVerifyComplete = true;
85 | });
86 | // When Complete
87 | Future.delayed(Duration(milliseconds: UIHelper.Space300.toInt()),
88 | () {
89 | Navigator.of(context).pushNamed("/userGoal");
90 | });
91 | } else {
92 | FocusScope.of(context).requestFocus(nextNode);
93 | }
94 | } else {
95 | FocusScope.of(context).requestFocus(backNode);
96 | }
97 | },
98 | decoration: InputDecoration(
99 | filled: true,
100 | fillColor: phoneInputBackgroundColor,
101 | counterText: "",
102 | enabledBorder: _outlineInputBorder,
103 | border: _outlineInputBorder,
104 | focusedBorder: _outlineInputBorder,
105 | ),
106 | style: phoneVerifyCodeText,
107 | );
108 |
109 | OutlineInputBorder get _outlineInputBorder => OutlineInputBorder(
110 | borderRadius: BorderRadius.circular(UIHelper.Space50),
111 | borderSide: BorderSide(color: Colors.grey[300]));
112 |
113 | Widget get _nextButtonWrapFilled => Container(
114 | height: UIHelper.Space50,
115 | child: SizedBox.expand(child: _nextButton),
116 | );
117 |
118 | Widget get _nextButton => RoundedButtonWidget(
119 | color: phoneVerifyButtonColor,
120 | onPress: () => Navigator.of(context).pushNamed("/verify"),
121 | child: Text(
122 | "VERIFY",
123 | style: onBoardingNextButtonStyle,
124 | ),
125 | );
126 |
127 | Widget get _inputPhoneView => Column(
128 | mainAxisAlignment: MainAxisAlignment.center,
129 | children: [
130 | _titleText,
131 | UIHelper.verticalSpace,
132 | Row(
133 | children: [
134 | Expanded(
135 | flex: 3,
136 | child:
137 | _circleTextField(node: _firstFocus, nextNode: _secondFocus),
138 | ),
139 | Spacer(),
140 | Expanded(
141 | flex: 3,
142 | child: _circleTextField(
143 | node: _secondFocus,
144 | nextNode: _thirdFocus,
145 | backNode: _firstFocus)),
146 | Spacer(),
147 | Expanded(
148 | flex: 3,
149 | child: _circleTextField(
150 | node: _thirdFocus,
151 | nextNode: _fourthFocus,
152 | backNode: _secondFocus),
153 | ),
154 | Spacer(),
155 | Expanded(
156 | flex: 3,
157 | child:
158 | _circleTextField(node: _fourthFocus, backNode: _thirdFocus),
159 | ),
160 | ],
161 | ),
162 | UIHelper.verticalSpace,
163 | _nextButtonWrapFilled,
164 | UIHelper.verticalSpace,
165 | Row(
166 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
167 | children: [_changeNumber, _resendText],
168 | )
169 | ],
170 | );
171 |
172 | Widget get _succesVerifyView => Column(
173 | children: [
174 | Icon(
175 | FontAwesomeIcons.checkCircle,
176 | color: Colors.green,
177 | size: UIHelper.dynamicHeight(UIHelper.Space200),
178 | ),
179 | UIHelper.verticalSpace,
180 | Text(
181 | "Verification Code Send on your Registered Mobile Number ",
182 | textAlign: TextAlign.center,
183 | style: phoneTitleTextStyle,
184 | ),
185 | ],
186 | );
187 | }
188 |
--------------------------------------------------------------------------------
/lib/ui/views/login/verify_view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 | import 'package:healthoui/ui/shared/text_style.dart';
4 | import 'package:healthoui/ui/shared/ui_helper.dart';
5 |
6 | class VerifyView extends StatefulWidget {
7 | @override
8 | _VerifyViewState createState() => _VerifyViewState();
9 | }
10 |
11 | class _VerifyViewState extends State {
12 | bool _isVerifyComplete = false;
13 | @override
14 | void initState() {
15 | super.initState();
16 | Future.delayed(Duration(milliseconds: UIHelper.Space500.toInt())).then((val) {
17 | setState(() {
18 | _isVerifyComplete = true;
19 | });
20 | }).whenComplete(() {
21 | // When complete
22 | Future.delayed(Duration(milliseconds: UIHelper.Space300.toInt()), () {
23 | Navigator.of(context).pushNamed("/verifyPhone");
24 | });
25 | });
26 | }
27 |
28 | @override
29 | Widget build(BuildContext context) {
30 | return Scaffold(
31 | body: Padding(
32 | padding: EdgeInsets.symmetric(horizontal: UIHelper.Space20),
33 | child: Center(
34 | child: _isVerifyComplete ? _succesVerify : _verifyViewColumn),
35 | ),
36 | );
37 | }
38 |
39 | Widget get _verifyViewColumn => Column(
40 | mainAxisAlignment: MainAxisAlignment.center,
41 | crossAxisAlignment: CrossAxisAlignment.center,
42 | children: [
43 | CircularProgressIndicator(
44 | valueColor: AlwaysStoppedAnimation(Colors.yellow),
45 | ),
46 | UIHelper.verticalSpace,
47 | Text("Verifying Your Mobile Number")
48 | ],
49 | );
50 |
51 | Widget get _succesVerify => Column(
52 | mainAxisAlignment: MainAxisAlignment.start,
53 | crossAxisAlignment: CrossAxisAlignment.center,
54 | children: [
55 | Spacer(
56 | flex: 2,
57 | ),
58 | Expanded(
59 | flex: 6,
60 | child: Column(
61 | children: [
62 | Icon(
63 | FontAwesomeIcons.checkCircle,
64 | color: Colors.green,
65 | size: UIHelper.dynamicHeight(UIHelper.Space200),
66 | ),
67 | UIHelper.verticalSpace,
68 | Text(
69 | "Verification Code Send on your Registered Mobile Number ",
70 | textAlign: TextAlign.center,
71 | style: phoneTitleTextStyle,
72 | ),
73 | ],
74 | ),
75 | ),
76 | Spacer(
77 | flex: 2,
78 | ),
79 | ],
80 | );
81 | }
82 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | archive:
5 | dependency: transitive
6 | description:
7 | name: archive
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "2.0.11"
11 | args:
12 | dependency: transitive
13 | description:
14 | name: args
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "1.5.2"
18 | async:
19 | dependency: transitive
20 | description:
21 | name: async
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "2.4.0"
25 | boolean_selector:
26 | dependency: transitive
27 | description:
28 | name: boolean_selector
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "1.0.5"
32 | charcode:
33 | dependency: transitive
34 | description:
35 | name: charcode
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.1.2"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "1.14.11"
46 | convert:
47 | dependency: transitive
48 | description:
49 | name: convert
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "2.1.1"
53 | crypto:
54 | dependency: transitive
55 | description:
56 | name: crypto
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "2.1.3"
60 | cupertino_icons:
61 | dependency: "direct main"
62 | description:
63 | name: cupertino_icons
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "0.1.2"
67 | easy_localization:
68 | dependency: "direct main"
69 | description:
70 | name: easy_localization
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "1.3.1"
74 | flutter:
75 | dependency: "direct main"
76 | description: flutter
77 | source: sdk
78 | version: "0.0.0"
79 | flutter_localizations:
80 | dependency: transitive
81 | description: flutter
82 | source: sdk
83 | version: "0.0.0"
84 | flutter_screenutil:
85 | dependency: "direct main"
86 | description:
87 | name: flutter_screenutil
88 | url: "https://pub.dartlang.org"
89 | source: hosted
90 | version: "0.5.3"
91 | flutter_test:
92 | dependency: "direct dev"
93 | description: flutter
94 | source: sdk
95 | version: "0.0.0"
96 | font_awesome_flutter:
97 | dependency: "direct main"
98 | description:
99 | name: font_awesome_flutter
100 | url: "https://pub.dartlang.org"
101 | source: hosted
102 | version: "8.5.0"
103 | http:
104 | dependency: transitive
105 | description:
106 | name: http
107 | url: "https://pub.dartlang.org"
108 | source: hosted
109 | version: "0.12.0+2"
110 | http_parser:
111 | dependency: transitive
112 | description:
113 | name: http_parser
114 | url: "https://pub.dartlang.org"
115 | source: hosted
116 | version: "3.1.3"
117 | image:
118 | dependency: transitive
119 | description:
120 | name: image
121 | url: "https://pub.dartlang.org"
122 | source: hosted
123 | version: "2.1.4"
124 | infinite_listview:
125 | dependency: transitive
126 | description:
127 | name: infinite_listview
128 | url: "https://pub.dartlang.org"
129 | source: hosted
130 | version: "1.0.0"
131 | intl:
132 | dependency: transitive
133 | description:
134 | name: intl
135 | url: "https://pub.dartlang.org"
136 | source: hosted
137 | version: "0.16.0"
138 | matcher:
139 | dependency: transitive
140 | description:
141 | name: matcher
142 | url: "https://pub.dartlang.org"
143 | source: hosted
144 | version: "0.12.6"
145 | meta:
146 | dependency: transitive
147 | description:
148 | name: meta
149 | url: "https://pub.dartlang.org"
150 | source: hosted
151 | version: "1.1.8"
152 | numberpicker:
153 | dependency: "direct main"
154 | description:
155 | path: "."
156 | ref: HEAD
157 | resolved-ref: "98ed729a5630d59f50d878e334a1ab99a46920ed"
158 | url: "https://github.com/VB10/NumberPicker.git"
159 | source: git
160 | version: "1.1.0"
161 | path:
162 | dependency: transitive
163 | description:
164 | name: path
165 | url: "https://pub.dartlang.org"
166 | source: hosted
167 | version: "1.6.4"
168 | pedantic:
169 | dependency: transitive
170 | description:
171 | name: pedantic
172 | url: "https://pub.dartlang.org"
173 | source: hosted
174 | version: "1.8.0+1"
175 | petitparser:
176 | dependency: transitive
177 | description:
178 | name: petitparser
179 | url: "https://pub.dartlang.org"
180 | source: hosted
181 | version: "2.4.0"
182 | quiver:
183 | dependency: transitive
184 | description:
185 | name: quiver
186 | url: "https://pub.dartlang.org"
187 | source: hosted
188 | version: "2.0.5"
189 | shared_preferences:
190 | dependency: transitive
191 | description:
192 | name: shared_preferences
193 | url: "https://pub.dartlang.org"
194 | source: hosted
195 | version: "0.5.3+4"
196 | sky_engine:
197 | dependency: transitive
198 | description: flutter
199 | source: sdk
200 | version: "0.0.99"
201 | source_span:
202 | dependency: transitive
203 | description:
204 | name: source_span
205 | url: "https://pub.dartlang.org"
206 | source: hosted
207 | version: "1.5.5"
208 | stack_trace:
209 | dependency: transitive
210 | description:
211 | name: stack_trace
212 | url: "https://pub.dartlang.org"
213 | source: hosted
214 | version: "1.9.3"
215 | stream_channel:
216 | dependency: transitive
217 | description:
218 | name: stream_channel
219 | url: "https://pub.dartlang.org"
220 | source: hosted
221 | version: "2.0.0"
222 | string_scanner:
223 | dependency: transitive
224 | description:
225 | name: string_scanner
226 | url: "https://pub.dartlang.org"
227 | source: hosted
228 | version: "1.0.5"
229 | term_glyph:
230 | dependency: transitive
231 | description:
232 | name: term_glyph
233 | url: "https://pub.dartlang.org"
234 | source: hosted
235 | version: "1.1.0"
236 | test_api:
237 | dependency: transitive
238 | description:
239 | name: test_api
240 | url: "https://pub.dartlang.org"
241 | source: hosted
242 | version: "0.2.11"
243 | typed_data:
244 | dependency: transitive
245 | description:
246 | name: typed_data
247 | url: "https://pub.dartlang.org"
248 | source: hosted
249 | version: "1.1.6"
250 | vector_math:
251 | dependency: transitive
252 | description:
253 | name: vector_math
254 | url: "https://pub.dartlang.org"
255 | source: hosted
256 | version: "2.0.8"
257 | xml:
258 | dependency: transitive
259 | description:
260 | name: xml
261 | url: "https://pub.dartlang.org"
262 | source: hosted
263 | version: "3.5.0"
264 | sdks:
265 | dart: ">=2.6.0 <3.0.0"
266 | flutter: ">=1.5.0 <2.0.0"
267 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: healthoui
2 | description: A new Flutter project.
3 |
4 | version: 1.0.0+1
5 |
6 | environment:
7 | sdk: ">=2.6.0 <3.0.0"
8 |
9 | dependencies:
10 | flutter:
11 | sdk: flutter
12 |
13 | flutter_screenutil: 0.5.3
14 | cupertino_icons: ^0.1.2
15 | font_awesome_flutter: 8.5.0
16 | easy_localization: 1.3.1
17 | numberpicker:
18 | git:
19 | url: https://github.com/VB10/NumberPicker.git
20 |
21 | # flutter_lottie : 0.2.0
22 | dev_dependencies:
23 | flutter_test:
24 | sdk: flutter
25 |
26 | flutter:
27 | uses-material-design: true
28 | assets:
29 | - assets/images/healtho.png
30 | - assets/images/onboard1.png
31 | - assets/images/onboard2.png
32 | - assets/images/onboard3.png
33 | - assets/images/personal_trainer.png
34 | - assets/images/facebook_logo.png
35 | - assets/images/google_logo.png
36 | - assets/images/login_health.png
37 | - assets/images/exercises/1.png
38 | - assets/images/exercises/2.png
39 | - assets/images/exercises/3.png
40 | - assets/images/exercises/4.png
41 | - assets/images/exercises/5.png
42 | - assets/images/exercises/6.png
43 | - assets/images/exercises/7.png
44 | - assets/images/exercises/8.png
45 |
46 | - assets/icons/menu.png
47 | - assets/langs/tr-TR.json
48 | - assets/langs/en-US.json
49 |
50 | fonts:
51 | - family: Poppins
52 | fonts:
53 | - asset: assets/fonts/Poppins-Black.ttf
54 | - asset: assets/fonts/Poppins-Bold.ttf
55 | - asset: assets/fonts/Poppins-Light.ttf
56 | - asset: assets/fonts/Poppins-Medium.ttf
57 | - asset: assets/fonts/Poppins-Regular.ttf
58 | - asset: assets/fonts/Poppins-SemiBold.ttf
59 | - asset: assets/fonts/Poppins-Thin.ttf
60 |
--------------------------------------------------------------------------------
/test/ui/login.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:healthoui/main.dart';
12 | import 'package:healthoui/ui/shared/widget/rounded_button_widget.dart';
13 | import 'package:healthoui/ui/views/login/phone_view.dart';
14 |
15 | void main() {
16 | testWidgets('Phone number field fill and navigate new page.',
17 | (WidgetTester tester) async {
18 | // Build our app and trigger a frame.
19 | await tester.pumpWidget(MaterialApp(
20 | home: PhoneView(),
21 | ));
22 |
23 | expect(find.byType(TextFormField), findsOneWidget);
24 | await tester.enterText(find.byType(TextFormField), "1234");
25 | await tester.tap(find.byType(RoundedButtonWidget));
26 |
27 | expect(tester.testTextInput.editingState, isNotNull);
28 | expect(find.text('Enter your Mobile Number'), findsOneWidget);
29 | expect(find.text('VERIFY'), findsOneWidget);
30 | });
31 | }
32 |
--------------------------------------------------------------------------------
/test/unit/login.dart:
--------------------------------------------------------------------------------
1 | // Import the test package and Counter class
2 |
3 | import 'package:flutter_test/flutter_test.dart';
4 | import 'package:healthoui/core/form_helper.dart';
5 |
6 | void main() {
7 | test('Phone number value should be match regex.', () {
8 | String _phoneNumber = "12345";
9 | expect(null, FormHelper.checkPhoneNumber(_phoneNumber));
10 | });
11 | }
12 |
--------------------------------------------------------------------------------