diff --git a/Foodybite-App/.metadata b/Foodybite-App/.metadata new file mode 100644 index 00000000..033ad2af --- /dev/null +++ b/Foodybite-App/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b + channel: stable + +project_type: app diff --git a/Foodybite-App/LICENSE b/Foodybite-App/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/Foodybite-App/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Foodybite-App/README.md b/Foodybite-App/README.md new file mode 100644 index 00000000..881ab880 --- /dev/null +++ b/Foodybite-App/README.md @@ -0,0 +1,6 @@ +# 🍔Foodybite 📸 ScreenShots + +![Screenshot (30)](https://user-images.githubusercontent.com/52289151/161913889-288d6cca-b0db-4158-809c-10d6d405c23a.png) + +## 🤓 Author +*Bagirishya Rwema Dominique* diff --git a/Foodybite-App/android/app/build.gradle b/Foodybite-App/android/app/build.gradle new file mode 100644 index 00000000..13f2a805 --- /dev/null +++ b/Foodybite-App/android/app/build.gradle @@ -0,0 +1,67 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion 28 + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.jideguru.flutter_foodybite" + minSdkVersion 16 + targetSdkVersion 28 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/Foodybite-App/android/app/src/debug/AndroidManifest.xml b/Foodybite-App/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..2ae9bae8 --- /dev/null +++ b/Foodybite-App/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Foodybite-App/android/app/src/main/AndroidManifest.xml b/Foodybite-App/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..e3de8885 --- /dev/null +++ b/Foodybite-App/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/Foodybite-App/android/app/src/main/kotlin/com/jideguru/flutter_foodybite/MainActivity.kt b/Foodybite-App/android/app/src/main/kotlin/com/jideguru/flutter_foodybite/MainActivity.kt new file mode 100644 index 00000000..e93c319b --- /dev/null +++ b/Foodybite-App/android/app/src/main/kotlin/com/jideguru/flutter_foodybite/MainActivity.kt @@ -0,0 +1,6 @@ +package com.jideguru.flutter_foodybite + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/Foodybite-App/android/app/src/main/res/drawable/launch_background.xml b/Foodybite-App/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/Foodybite-App/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Foodybite-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/Foodybite-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..db77bb4b Binary files /dev/null and b/Foodybite-App/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/Foodybite-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/Foodybite-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..17987b79 Binary files /dev/null and b/Foodybite-App/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/Foodybite-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/Foodybite-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..09d43914 Binary files /dev/null and b/Foodybite-App/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/Foodybite-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/Foodybite-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..d5f1c8d3 Binary files /dev/null and b/Foodybite-App/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/Foodybite-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/Foodybite-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..4d6372ee Binary files /dev/null and b/Foodybite-App/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/Foodybite-App/android/app/src/main/res/values/styles.xml b/Foodybite-App/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..00fa4417 --- /dev/null +++ b/Foodybite-App/android/app/src/main/res/values/styles.xml @@ -0,0 +1,8 @@ + + + + diff --git a/Foodybite-App/android/app/src/profile/AndroidManifest.xml b/Foodybite-App/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..2ae9bae8 --- /dev/null +++ b/Foodybite-App/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/Manifest.java b/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/Manifest.java new file mode 100644 index 00000000..4b0a8312 --- /dev/null +++ b/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/Manifest.java @@ -0,0 +1,7 @@ +/*___Generated_by_IDEA___*/ + +package com.jideguru.flutter_foodybite; + +/* This stub is only used by the IDE. It is NOT the Manifest class actually packed into the APK */ +public final class Manifest { +} \ No newline at end of file diff --git a/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/R.java b/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/R.java new file mode 100644 index 00000000..dfc9cd46 --- /dev/null +++ b/Foodybite-App/android/app/src/profile/gen/com/jideguru/flutter_foodybite/R.java @@ -0,0 +1,7 @@ +/*___Generated_by_IDEA___*/ + +package com.jideguru.flutter_foodybite; + +/* This stub is only used by the IDE. It is NOT the R class actually packed into the APK */ +public final class R { +} \ No newline at end of file diff --git a/Foodybite-App/android/build.gradle b/Foodybite-App/android/build.gradle new file mode 100644 index 00000000..b7faad8f --- /dev/null +++ b/Foodybite-App/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.2.71' + repositories { + google() + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/Foodybite-App/android/gradle.properties b/Foodybite-App/android/gradle.properties new file mode 100644 index 00000000..8bd86f68 --- /dev/null +++ b/Foodybite-App/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/Foodybite-App/android/gradle/wrapper/gradle-wrapper.properties b/Foodybite-App/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..2819f022 --- /dev/null +++ b/Foodybite-App/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jun 23 08:50:38 CEST 2017 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip diff --git a/Foodybite-App/android/settings.gradle b/Foodybite-App/android/settings.gradle new file mode 100644 index 00000000..5a2f14fb --- /dev/null +++ b/Foodybite-App/android/settings.gradle @@ -0,0 +1,15 @@ +include ':app' + +def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() + +def plugins = new Properties() +def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') +if (pluginsFile.exists()) { + pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } +} + +plugins.each { name, path -> + def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() + include ":$name" + project(":$name").projectDir = pluginDirectory +} diff --git a/Foodybite-App/assets/cm1.jpeg b/Foodybite-App/assets/cm1.jpeg new file mode 100644 index 00000000..80c207f3 Binary files /dev/null and b/Foodybite-App/assets/cm1.jpeg differ diff --git a/Foodybite-App/assets/cm2.jpeg b/Foodybite-App/assets/cm2.jpeg new file mode 100644 index 00000000..cbfdf189 Binary files /dev/null and b/Foodybite-App/assets/cm2.jpeg differ diff --git a/Foodybite-App/assets/cm3.jpeg b/Foodybite-App/assets/cm3.jpeg new file mode 100644 index 00000000..cbe7e80e Binary files /dev/null and b/Foodybite-App/assets/cm3.jpeg differ diff --git a/Foodybite-App/assets/cm4.jpeg b/Foodybite-App/assets/cm4.jpeg new file mode 100644 index 00000000..6d8d7646 Binary files /dev/null and b/Foodybite-App/assets/cm4.jpeg differ diff --git a/Foodybite-App/assets/food1.jpeg b/Foodybite-App/assets/food1.jpeg new file mode 100644 index 00000000..46f6e3e9 Binary files /dev/null and b/Foodybite-App/assets/food1.jpeg differ diff --git a/Foodybite-App/assets/food10.jpeg b/Foodybite-App/assets/food10.jpeg new file mode 100644 index 00000000..d5f7de6b Binary files /dev/null and b/Foodybite-App/assets/food10.jpeg differ diff --git a/Foodybite-App/assets/food11.jpeg b/Foodybite-App/assets/food11.jpeg new file mode 100644 index 00000000..1eb51b3f Binary files /dev/null and b/Foodybite-App/assets/food11.jpeg differ diff --git a/Foodybite-App/assets/food12.jpg b/Foodybite-App/assets/food12.jpg new file mode 100644 index 00000000..b0db9b34 Binary files /dev/null and b/Foodybite-App/assets/food12.jpg differ diff --git a/Foodybite-App/assets/food2.jpeg b/Foodybite-App/assets/food2.jpeg new file mode 100644 index 00000000..e26ac771 Binary files /dev/null and b/Foodybite-App/assets/food2.jpeg differ diff --git a/Foodybite-App/assets/food3.jpeg b/Foodybite-App/assets/food3.jpeg new file mode 100644 index 00000000..2bf8cf10 Binary files /dev/null and b/Foodybite-App/assets/food3.jpeg differ diff --git a/Foodybite-App/assets/food4.jpeg b/Foodybite-App/assets/food4.jpeg new file mode 100644 index 00000000..491af838 Binary files /dev/null and b/Foodybite-App/assets/food4.jpeg differ diff --git a/Foodybite-App/assets/food5.jpeg b/Foodybite-App/assets/food5.jpeg new file mode 100644 index 00000000..51a43de3 Binary files /dev/null and b/Foodybite-App/assets/food5.jpeg differ diff --git a/Foodybite-App/assets/food6.jpeg b/Foodybite-App/assets/food6.jpeg new file mode 100644 index 00000000..42cb54c9 Binary files /dev/null and b/Foodybite-App/assets/food6.jpeg differ diff --git a/Foodybite-App/assets/food7.jpeg b/Foodybite-App/assets/food7.jpeg new file mode 100644 index 00000000..629dee47 Binary files /dev/null and b/Foodybite-App/assets/food7.jpeg differ diff --git a/Foodybite-App/assets/food8.jpeg b/Foodybite-App/assets/food8.jpeg new file mode 100644 index 00000000..7bd5a85c Binary files /dev/null and b/Foodybite-App/assets/food8.jpeg differ diff --git a/Foodybite-App/assets/food9.jpeg b/Foodybite-App/assets/food9.jpeg new file mode 100644 index 00000000..7191b5a3 Binary files /dev/null and b/Foodybite-App/assets/food9.jpeg differ diff --git a/Foodybite-App/ios/Flutter/.last_build_id b/Foodybite-App/ios/Flutter/.last_build_id new file mode 100644 index 00000000..8698c41c --- /dev/null +++ b/Foodybite-App/ios/Flutter/.last_build_id @@ -0,0 +1 @@ +f8e028cf441985109413fc9b4e4cf2cf \ No newline at end of file diff --git a/Foodybite-App/ios/Flutter/AppFrameworkInfo.plist b/Foodybite-App/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..9367d483 --- /dev/null +++ b/Foodybite-App/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 8.0 + + diff --git a/Foodybite-App/ios/Flutter/Debug.xcconfig b/Foodybite-App/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/Foodybite-App/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Foodybite-App/ios/Flutter/Flutter.podspec b/Foodybite-App/ios/Flutter/Flutter.podspec new file mode 100644 index 00000000..5ca30416 --- /dev/null +++ b/Foodybite-App/ios/Flutter/Flutter.podspec @@ -0,0 +1,18 @@ +# +# NOTE: This podspec is NOT to be published. It is only used as a local source! +# + +Pod::Spec.new do |s| + s.name = 'Flutter' + s.version = '1.0.0' + s.summary = 'High-performance, high-fidelity mobile apps.' + s.description = <<-DESC +Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS. + DESC + s.homepage = 'https://flutter.io' + s.license = { :type => 'MIT' } + s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } + s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } + s.ios.deployment_target = '8.0' + s.vendored_frameworks = 'Flutter.framework' +end diff --git a/Foodybite-App/ios/Flutter/Release.xcconfig b/Foodybite-App/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..592ceee8 --- /dev/null +++ b/Foodybite-App/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/Foodybite-App/ios/Flutter/flutter_export_environment.sh b/Foodybite-App/ios/Flutter/flutter_export_environment.sh new file mode 100644 index 00000000..67914c7d --- /dev/null +++ b/Foodybite-App/ios/Flutter/flutter_export_environment.sh @@ -0,0 +1,13 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=D:\flutter" +export "FLUTTER_APPLICATION_PATH=D:\FlutterFoodybite" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_TARGET=lib\main.dart" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=false" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.packages" diff --git a/Foodybite-App/ios/Runner.xcodeproj/project.pbxproj b/Foodybite-App/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..9f027e64 --- /dev/null +++ b/Foodybite-App/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,502 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0910; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 0910; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.jideguru.flutterFoodybite; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.jideguru.flutterFoodybite; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.jideguru.flutterFoodybite; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_SWIFT3_OBJC_INFERENCE = On; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 1; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/Foodybite-App/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Foodybite-App/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/Foodybite-App/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Foodybite-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/Foodybite-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..786d6aad --- /dev/null +++ b/Foodybite-App/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Foodybite-App/ios/Runner.xcworkspace/contents.xcworkspacedata b/Foodybite-App/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..1d526a16 --- /dev/null +++ b/Foodybite-App/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Foodybite-App/ios/Runner/AppDelegate.swift b/Foodybite-App/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..71cc41e3 --- /dev/null +++ b/Foodybite-App/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 00000000..6f4f4712 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 00000000..28c6bf03 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 00000000..f091b6b0 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 00000000..4cde1211 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 00000000..d0ef06e7 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 00000000..dcdc2306 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 00000000..2ccbfd96 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 00000000..c8f9ed8f Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 00000000..a6d6b860 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 00000000..75b2d164 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 00000000..c4df70d3 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 00000000..6a84f41e Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 00000000..d0e1f585 Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 00000000..0bedcf2f --- /dev/null +++ b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 00000000..9da19eac Binary files /dev/null and b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/Foodybite-App/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +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. \ No newline at end of file diff --git a/Foodybite-App/ios/Runner/Base.lproj/LaunchScreen.storyboard b/Foodybite-App/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/Foodybite-App/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Foodybite-App/ios/Runner/Base.lproj/Main.storyboard b/Foodybite-App/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/Foodybite-App/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Foodybite-App/ios/Runner/Info.plist b/Foodybite-App/ios/Runner/Info.plist new file mode 100644 index 00000000..e6c98e7e --- /dev/null +++ b/Foodybite-App/ios/Runner/Info.plist @@ -0,0 +1,43 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + flutter_foodybite + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + diff --git a/Foodybite-App/ios/Runner/Runner-Bridging-Header.h b/Foodybite-App/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..7335fdf9 --- /dev/null +++ b/Foodybite-App/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" \ No newline at end of file diff --git a/Foodybite-App/lib/main.dart b/Foodybite-App/lib/main.dart new file mode 100644 index 00000000..8dcd6816 --- /dev/null +++ b/Foodybite-App/lib/main.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/screens/main_screen.dart'; +import 'package:flutter_foodybite/util/const.dart'; + +void main() async { + runApp(MyApp()); +} + +class MyApp extends StatefulWidget { + @override + _MyAppState createState() => _MyAppState(); +} + +class _MyAppState extends State { + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + title: Constants.appName, + theme: Constants.lightTheme, + darkTheme: Constants.darkTheme, + home: MainScreen(), + ); + } +} diff --git a/Foodybite-App/lib/screens/add.dart b/Foodybite-App/lib/screens/add.dart new file mode 100644 index 00000000..1edd400f --- /dev/null +++ b/Foodybite-App/lib/screens/add.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +class Add extends StatelessWidget { + const Add({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: Text('Add'), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/categories.dart b/Foodybite-App/lib/screens/categories.dart new file mode 100644 index 00000000..3b23959a --- /dev/null +++ b/Foodybite-App/lib/screens/categories.dart @@ -0,0 +1,90 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/util/categories.dart'; +import 'package:flutter_foodybite/widgets/category_item.dart'; + +class Categories extends StatefulWidget { + @override + _CategoriesState createState() => _CategoriesState(); +} + +class _CategoriesState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0.0, + title: Text('Categories'), + centerTitle: true, + ), + body: Padding( + padding: EdgeInsets.all( + 5.0, + ), + child: GridView.count( + crossAxisCount: 2, + children: List.generate( + categories.length, + (index) { + var cat = categories[index]; + return Container( + padding: EdgeInsets.all(8.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Stack( + children: [ + Image.asset( + cat["img"], + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.height, + fit: BoxFit.cover, + ), + Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + // Add one stop for each color. Stops should increase from 0 to 1 + stops: [0.2, 0.7], + colors: [ + cat['color1'], + cat['color2'], + ], + // stops: [0.0, 0.1], + ), + ), + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.height, + ), + Center( + child: Container( + height: MediaQuery.of(context).size.height, + width: MediaQuery.of(context).size.height, + padding: const EdgeInsets.all(1), + // constraints: BoxConstraints( + // minWidth: 20, + // minHeight: 20, + // ), + child: Center( + child: Text( + cat["name"], + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + ], + ), + ), + ); + }, + ), + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/home.dart b/Foodybite-App/lib/screens/home.dart new file mode 100644 index 00000000..0e77a0d9 --- /dev/null +++ b/Foodybite-App/lib/screens/home.dart @@ -0,0 +1,191 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/screens/categories.dart'; +import 'package:flutter_foodybite/screens/trending.dart'; +import 'package:flutter_foodybite/util/categories.dart'; +import 'package:flutter_foodybite/util/friends.dart'; +import 'package:flutter_foodybite/util/restaurants.dart'; +import 'package:flutter_foodybite/widgets/category_item.dart'; +import 'package:flutter_foodybite/widgets/search_card.dart'; +import 'package:flutter_foodybite/widgets/slide_item.dart'; + +class Home extends StatelessWidget { + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: (){ + FocusScopeNode currentFocus = FocusScope.of(context); + if(!currentFocus.hasPrimaryFocus){ + currentFocus.unfocus(); + } + }, + child: Scaffold( + body: Padding( + padding: const EdgeInsets.fromLTRB(10.0, 0, 10.0, 0), + child: ListView( + children: [ + buildSearchBar(context), + SizedBox(height: 20.0), + buildRestaurantRow('Trending Restaurants', context), + SizedBox(height: 10.0), + buildRestaurantList(context), + SizedBox(height: 10.0), + buildCategoryRow('Category', context), + SizedBox(height: 10.0), + buildCategoryList(context), + SizedBox(height: 20.0), + buildCategoryRow('Friends', context), + SizedBox(height: 10.0), + buildFriendsList(), + SizedBox(height: 30.0), + ], + ), + ), + ), + ); + } + + buildRestaurantRow(String restaurant, BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "$restaurant", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w800, + ), + ), + FlatButton( + child: Text( + "See all (9)", + style: TextStyle( + color: Theme.of(context).accentColor, + ), + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) { + return Trending(); + }, + ), + ); + }, + ), + ], + ); + } + + buildCategoryRow(String category, BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + "$category", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w800, + ), + ), + FlatButton( + child: Text( + "See all (9)", + style: TextStyle( + color: Theme.of(context).accentColor, + ), + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) { + return Categories(); + }, + ), + ); + }, + ), + ], + ); + } + + buildSearchBar(BuildContext context) { + return Container( + margin: EdgeInsets.fromLTRB(10, 5, 10, 0), + child: SearchCard() + ); + } + + buildCategoryList(BuildContext context) { + return Container( + height: MediaQuery.of(context).size.height / 6, + child: ListView.builder( + primary: false, + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: categories == null ? 0 : categories.length, + itemBuilder: (BuildContext context, int index) { + Map cat = categories[index]; + + return CategoryItem( + cat: cat, + ); + }, + ), + ); + } + + buildRestaurantList(BuildContext context) { + return Container( + height: MediaQuery.of(context).size.height / 2.4, + width: MediaQuery.of(context).size.width, + child: ListView.builder( + primary: false, + shrinkWrap: true, + scrollDirection: Axis.horizontal, + itemCount: restaurants == null ? 0 : restaurants.length, + itemBuilder: (BuildContext context, int index) { + Map restaurant = restaurants[index]; + + return Padding( + padding: const EdgeInsets.only(right: 10.0), + child: SlideItem( + img: restaurant["img"], + title: restaurant["title"], + address: restaurant["address"], + rating: restaurant["rating"], + ), + ); + }, + ), + ); + } + + buildFriendsList() { + return Container( + height: 50.0, + child: ListView.builder( + primary: false, + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemCount: friends == null ? 0 : friends.length, + itemBuilder: (BuildContext context, int index) { + String img = friends[index]; + + return Padding( + padding: const EdgeInsets.only(right: 5.0), + child: CircleAvatar( + backgroundImage: AssetImage( + img, + ), + radius: 25.0, + ), + ); + }, + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/label.dart b/Foodybite-App/lib/screens/label.dart new file mode 100644 index 00000000..bd3bb277 --- /dev/null +++ b/Foodybite-App/lib/screens/label.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +class Label extends StatelessWidget { + const Label({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: Text('Label'), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/main_screen.dart b/Foodybite-App/lib/screens/main_screen.dart new file mode 100644 index 00000000..d976a5b2 --- /dev/null +++ b/Foodybite-App/lib/screens/main_screen.dart @@ -0,0 +1,108 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/screens/add.dart'; +import 'package:flutter_foodybite/screens/home.dart'; +import 'package:flutter_foodybite/screens/label.dart'; +import 'package:flutter_foodybite/screens/profile.dart'; + +import 'notifications.dart'; + +class MainScreen extends StatefulWidget { + @override + _MainScreenState createState() => _MainScreenState(); +} + +class _MainScreenState extends State { + PageController _pageController; + int _page = 0; + + List icons = [ + Icons.home, + Icons.label, + Icons.add, + Icons.notifications, + Icons.person, + ]; + + List pages = [ + Home(), + Label(), + Add(), + Notifications(), + Profile(), + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + body: PageView( + physics: NeverScrollableScrollPhysics(), + controller: _pageController, + onPageChanged: onPageChanged, + children: List.generate(5, (index) => pages[index] ), + ), + bottomNavigationBar: BottomAppBar( + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + // SizedBox(width: 7), + buildTabIcon(0), + buildTabIcon(1), + buildTabIcon(3), + buildTabIcon(4), + // SizedBox(width: 7), + ], + ), + color: Theme.of(context).primaryColor, + shape: CircularNotchedRectangle(), + ), + floatingActionButtonAnimator: FloatingActionButtonAnimator.scaling, + floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, + floatingActionButton: FloatingActionButton( + elevation: 10.0, + child: Icon( + Icons.add, + ), + onPressed: () => _pageController.jumpToPage(2), + ), + ); + } + + // void navigationTapped(int page) { + // _pageController.jumpToPage(page); + // } + + @override + void initState() { + super.initState(); + _pageController = PageController(); + } + + @override + void dispose() { + super.dispose(); + _pageController.dispose(); + } + + void onPageChanged(int page) { + setState(() { + this._page = page; + }); + } + + buildTabIcon(int index) { + return Container( + margin: EdgeInsets.fromLTRB( index == 3 ? 30 : 0, 0, index == 1 ? 30 : 0, 0), + child: IconButton( + icon: Icon( + icons[index], + size: 24.0, + ), + color: _page == index + ? Theme.of(context).accentColor + : Theme.of(context).textTheme.caption.color, + onPressed: () => _pageController.jumpToPage(index), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/notifications.dart b/Foodybite-App/lib/screens/notifications.dart new file mode 100644 index 00000000..3ce36d38 --- /dev/null +++ b/Foodybite-App/lib/screens/notifications.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +class Notifications extends StatelessWidget { + const Notifications({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: Text('Notifications'), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/profile.dart b/Foodybite-App/lib/screens/profile.dart new file mode 100644 index 00000000..380cccb4 --- /dev/null +++ b/Foodybite-App/lib/screens/profile.dart @@ -0,0 +1,14 @@ +import 'package:flutter/material.dart'; + +class Profile extends StatelessWidget { + const Profile({Key key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + child: Center( + child: Text('Profile'), + ), + ); + } +} diff --git a/Foodybite-App/lib/screens/trending.dart b/Foodybite-App/lib/screens/trending.dart new file mode 100644 index 00000000..58a601aa --- /dev/null +++ b/Foodybite-App/lib/screens/trending.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/util/restaurants.dart'; +import 'package:flutter_foodybite/widgets/search_card.dart'; +import 'package:flutter_foodybite/widgets/trending_item.dart'; + +class Trending extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + elevation: 0.0, + title: Text("Trending Restaurants"), + centerTitle: true, + ), + body: Padding( + padding: EdgeInsets.symmetric( + vertical: 0, + horizontal: 10.0, + ), + child: ListView( + children: [ + SearchCard(), + SizedBox(height: 10.0), + ListView.builder( + primary: false, + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: restaurants == null ? 0 : restaurants.length, + itemBuilder: (BuildContext context, int index) { + Map restaurant = restaurants[index]; + + return TrendingItem( + img: restaurant["img"], + title: restaurant["title"], + address: restaurant["address"], + rating: restaurant["rating"], + ); + }, + ), + SizedBox(height: 10.0), + ], + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/util/categories.dart b/Foodybite-App/lib/util/categories.dart new file mode 100644 index 00000000..b96f8833 --- /dev/null +++ b/Foodybite-App/lib/util/categories.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; + +List categories = [ + { + "name": "Italian", + "color1": Color.fromARGB(100, 0, 0, 0), + "color2": Color.fromARGB(100, 0, 0, 0), + "img": "assets/food1.jpeg" + }, + { + "name": "Chinese", + "color1": Color.fromARGB(100, 0, 0, 0), + "color2": Color.fromARGB(100, 0, 0, 0), + "img": "assets/food2.jpeg" + }, + { + "name": "Nigerian", + "color1": Color.fromARGB(100, 0, 0, 0), + "color2": Color.fromARGB(100, 0, 0, 0), + "img": "assets/food3.jpeg" + }, + { + "name": "Spanish", + "color1": Color.fromARGB(100, 0, 0, 0), + "color2": Color.fromARGB(100, 0, 0, 0), + "img": "assets/food4.jpeg" + }, + { + "name": "Mexican", + "color1": Color.fromARGB(100, 0, 0, 0), + "color2": Color.fromARGB(100, 0, 0, 0), + "img": "assets/food5.jpeg" + }, +]; diff --git a/Foodybite-App/lib/util/const.dart b/Foodybite-App/lib/util/const.dart new file mode 100644 index 00000000..4db7d84a --- /dev/null +++ b/Foodybite-App/lib/util/const.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; + +class Constants { + static String appName = "Foody Bite"; + + //Colors for theme + static Color lightPrimary = Color(0xfffcfcff); + static Color darkPrimary = Colors.black; + static Color lightAccent = Color(0xff5563ff); + static Color darkAccent = Color(0xff5563ff); + static Color lightBG = Color(0xfffcfcff); + static Color darkBG = Colors.black; + static Color ratingBG = Colors.yellow[600]; + + static ThemeData lightTheme = ThemeData( + backgroundColor: lightBG, + primaryColor: lightPrimary, + accentColor: lightAccent, + cursorColor: lightAccent, + scaffoldBackgroundColor: lightBG, + appBarTheme: AppBarTheme( + textTheme: TextTheme( + headline6: TextStyle( + color: darkBG, + fontSize: 18.0, + fontWeight: FontWeight.w800, + ), + ), + ), + ); + + static ThemeData darkTheme = ThemeData( + brightness: Brightness.dark, + backgroundColor: darkBG, + primaryColor: darkPrimary, + accentColor: darkAccent, + scaffoldBackgroundColor: darkBG, + cursorColor: darkAccent, + appBarTheme: AppBarTheme( + textTheme: TextTheme( + headline6: TextStyle( + color: lightBG, + fontSize: 18.0, + fontWeight: FontWeight.w800, + ), + ), + ), + ); +} diff --git a/Foodybite-App/lib/util/friends.dart b/Foodybite-App/lib/util/friends.dart new file mode 100644 index 00000000..edf72716 --- /dev/null +++ b/Foodybite-App/lib/util/friends.dart @@ -0,0 +1,11 @@ +List friends = [ + "assets/cm1.jpeg", + "assets/cm2.jpeg", + "assets/cm3.jpeg", + "assets/cm4.jpeg", + "assets/cm1.jpeg", + "assets/cm2.jpeg", + "assets/cm3.jpeg", + "assets/cm4.jpeg", + "assets/cm1.jpeg" +]; diff --git a/Foodybite-App/lib/util/restaurants.dart b/Foodybite-App/lib/util/restaurants.dart new file mode 100644 index 00000000..6b549e18 --- /dev/null +++ b/Foodybite-App/lib/util/restaurants.dart @@ -0,0 +1,56 @@ +List restaurants = [ + { + "img": "assets/food1.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food2.jpeg", + "title": "Uncle Boons", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food3.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food4.jpeg", + "title": "Uncle Boons", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food5.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food6.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food7.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food8.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + }, + { + "img": "assets/food9.jpeg", + "title": "Happy Jones", + "address": "1278 Loving Acres RoadKansas City, MO 64110", + "rating": "4.5" + } +]; diff --git a/Foodybite-App/lib/util/trending_item.dart b/Foodybite-App/lib/util/trending_item.dart new file mode 100644 index 00000000..a779505f --- /dev/null +++ b/Foodybite-App/lib/util/trending_item.dart @@ -0,0 +1,135 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/util/const.dart'; + +class TrendingItem extends StatefulWidget { + final String img; + final String title; + final String address; + final String rating; + + TrendingItem({ + Key key, + @required this.img, + @required this.title, + @required this.address, + @required this.rating, + }) : super(key: key); + + @override + _TrendingItemState createState() => _TrendingItemState(); +} + +class _TrendingItemState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(top: 5.0, bottom: 5.0), + child: Container( + height: MediaQuery.of(context).size.height / 2.5, + width: MediaQuery.of(context).size.width, + child: Card( + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)), + elevation: 3.0, + child: Column( + children: [ + Stack( + children: [ + Container( + height: MediaQuery.of(context).size.height / 3.5, + width: MediaQuery.of(context).size.width, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), + ), + child: Image.asset( + "${widget.img}", + fit: BoxFit.cover, + ), + ), + ), + Positioned( + top: 6.0, + right: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0)), + child: Padding( + padding: EdgeInsets.all(2.0), + child: Row( + children: [ + Icon( + Icons.star, + color: Constants.ratingBG, + size: 10.0, + ), + Text( + " ${widget.rating} ", + style: TextStyle( + fontSize: 10.0, + ), + ), + ], + ), + ), + ), + ), + Positioned( + top: 6.0, + left: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(3.0)), + child: Padding( + padding: EdgeInsets.all(4.0), + child: Text( + " OPEN", + style: TextStyle( + fontSize: 10.0, + color: Colors.green, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ], + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.title}", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w800, + ), + textAlign: TextAlign.left, + ), + ), + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.address}", + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w300, + ), + ), + ), + ), + SizedBox(height: 10.0), + ], + ), + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/widgets/category_item.dart b/Foodybite-App/lib/widgets/category_item.dart new file mode 100644 index 00000000..b2d5b7dc --- /dev/null +++ b/Foodybite-App/lib/widgets/category_item.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; + +class CategoryItem extends StatelessWidget { + final Map cat; + + CategoryItem({this.cat}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(right: 10.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Stack( + children: [ + Image.asset( + cat["img"], + height: MediaQuery.of(context).size.height / 6, + width: MediaQuery.of(context).size.height / 6, + fit: BoxFit.cover, + ), + Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + // Add one stop for each color. Stops should increase from 0 to 1 + stops: [0.2, 0.7], + colors: [ + cat['color1'], + cat['color2'], + ], + // stops: [0.0, 0.1], + ), + ), + height: MediaQuery.of(context).size.height / 6, + width: MediaQuery.of(context).size.height / 6, + ), + Center( + child: Container( + height: MediaQuery.of(context).size.height / 6, + width: MediaQuery.of(context).size.height / 6, + padding: const EdgeInsets.all(1), + constraints: BoxConstraints( + minWidth: 20, + minHeight: 20, + ), + child: Center( + child: Text( + cat["name"], + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold, + ), + textAlign: TextAlign.center, + ), + ), + ), + ), + ], + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/widgets/main.dart b/Foodybite-App/lib/widgets/main.dart new file mode 100644 index 00000000..8dcd6816 --- /dev/null +++ b/Foodybite-App/lib/widgets/main.dart @@ -0,0 +1,25 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/screens/main_screen.dart'; +import 'package:flutter_foodybite/util/const.dart'; + +void main() async { + runApp(MyApp()); +} + +class MyApp extends StatefulWidget { + @override + _MyAppState createState() => _MyAppState(); +} + +class _MyAppState extends State { + @override + Widget build(BuildContext context) { + return MaterialApp( + debugShowCheckedModeBanner: false, + title: Constants.appName, + theme: Constants.lightTheme, + darkTheme: Constants.darkTheme, + home: MainScreen(), + ); + } +} diff --git a/Foodybite-App/lib/widgets/search_card.dart b/Foodybite-App/lib/widgets/search_card.dart new file mode 100644 index 00000000..2289493d --- /dev/null +++ b/Foodybite-App/lib/widgets/search_card.dart @@ -0,0 +1,56 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/material.dart'; +class SearchCard extends StatelessWidget { + final TextEditingController _searchControl = new TextEditingController(); + + @override + Widget build(BuildContext context) { + return Card( + elevation: 6.0, + child: Container( + decoration: BoxDecoration( + color: Colors.greeen, + borderRadius: BorderRadius.all( + Radius.circular(5.0), + ), + ), + child: TextField( + style: TextStyle( + fontSize: 15.0, + color: Colors.black, + ), + decoration: InputDecoration( + contentPadding: EdgeInsets.all(10.0), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(5.0), + borderSide: BorderSide( + color: Colors.white, + ), + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.white, + ), + borderRadius: BorderRadius.circular(5.0), + ), + hintText: "Search..", + prefixIcon: Icon( + Icons.search, + color: Colors.black, + ), + suffixIcon: Icon( + Icons.filter_list, + color: Colors.black, + ), + hintStyle: TextStyle( + fontSize: 15.0, + color: Colors.black, + ), + ), + maxLines: 1, + controller: _searchControl, + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/widgets/slide_item.dart b/Foodybite-App/lib/widgets/slide_item.dart new file mode 100644 index 00000000..2cd346fb --- /dev/null +++ b/Foodybite-App/lib/widgets/slide_item.dart @@ -0,0 +1,135 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/util/const.dart'; + +class SlideItem extends StatefulWidget { + final String img; + final String title; + final String address; + final String rating; + + SlideItem({ + Key key, + @required this.img, + @required this.title, + @required this.address, + @required this.rating, + }) : super(key: key); + + @override + _SlideItemState createState() => _SlideItemState(); +} + +class _SlideItemState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(top: 5.0, bottom: 5.0), + child: Container( + height: MediaQuery.of(context).size.height / 2.9, + width: MediaQuery.of(context).size.width / 1.2, + child: Card( + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)), + elevation: 3.0, + child: Column( + children: [ + Stack( + children: [ + Container( + height: MediaQuery.of(context).size.height / 3.7, + width: MediaQuery.of(context).size.width, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10.0), + topRight: Radius.circular(10.0), + ), + child: Image.asset( + "${widget.img}", + fit: BoxFit.cover, + ), + ), + ), + Positioned( + top: 6.0, + right: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0)), + child: Padding( + padding: EdgeInsets.all(2.0), + child: Row( + children: [ + Icon( + Icons.star, + color: Constants.ratingBG, + size: 10, + ), + Text( + " ${widget.rating} ", + style: TextStyle( + fontSize: 10.0, + ), + ), + ], + ), + ), + ), + ), + Positioned( + top: 6.0, + left: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(3.0)), + child: Padding( + padding: EdgeInsets.all(4.0), + child: Text( + " OPEN ", + style: TextStyle( + fontSize: 10.0, + color: Colors.green, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ], + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.title}", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w800, + ), + textAlign: TextAlign.left, + ), + ), + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.address}", + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w300, + ), + ), + ), + ), + SizedBox(height: 10.0), + ], + ), + ), + ), + ); + } +} diff --git a/Foodybite-App/lib/widgets/trending_item.dart b/Foodybite-App/lib/widgets/trending_item.dart new file mode 100644 index 00000000..a779505f --- /dev/null +++ b/Foodybite-App/lib/widgets/trending_item.dart @@ -0,0 +1,135 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_foodybite/util/const.dart'; + +class TrendingItem extends StatefulWidget { + final String img; + final String title; + final String address; + final String rating; + + TrendingItem({ + Key key, + @required this.img, + @required this.title, + @required this.address, + @required this.rating, + }) : super(key: key); + + @override + _TrendingItemState createState() => _TrendingItemState(); +} + +class _TrendingItemState extends State { + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(top: 5.0, bottom: 5.0), + child: Container( + height: MediaQuery.of(context).size.height / 2.5, + width: MediaQuery.of(context).size.width, + child: Card( + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)), + elevation: 3.0, + child: Column( + children: [ + Stack( + children: [ + Container( + height: MediaQuery.of(context).size.height / 3.5, + width: MediaQuery.of(context).size.width, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), + ), + child: Image.asset( + "${widget.img}", + fit: BoxFit.cover, + ), + ), + ), + Positioned( + top: 6.0, + right: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0)), + child: Padding( + padding: EdgeInsets.all(2.0), + child: Row( + children: [ + Icon( + Icons.star, + color: Constants.ratingBG, + size: 10.0, + ), + Text( + " ${widget.rating} ", + style: TextStyle( + fontSize: 10.0, + ), + ), + ], + ), + ), + ), + ), + Positioned( + top: 6.0, + left: 6.0, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(3.0)), + child: Padding( + padding: EdgeInsets.all(4.0), + child: Text( + " OPEN", + style: TextStyle( + fontSize: 10.0, + color: Colors.green, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ], + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.title}", + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.w800, + ), + textAlign: TextAlign.left, + ), + ), + ), + SizedBox(height: 7.0), + Padding( + padding: EdgeInsets.only(left: 15.0), + child: Container( + width: MediaQuery.of(context).size.width, + child: Text( + "${widget.address}", + style: TextStyle( + fontSize: 12.0, + fontWeight: FontWeight.w300, + ), + ), + ), + ), + SizedBox(height: 10.0), + ], + ), + ), + ), + ); + } +} diff --git a/Foodybite-App/pubspec.lock b/Foodybite-App/pubspec.lock new file mode 100644 index 00000000..d1d76019 --- /dev/null +++ b/Foodybite-App/pubspec.lock @@ -0,0 +1,153 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + url: "https://pub.dartlang.org" + source: hosted + version: "2.8.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + charcode: + dependency: transitive + description: + name: charcode + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.1" + clock: + dependency: transitive + description: + name: clock + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + collection: + dependency: transitive + description: + name: collection + url: "https://pub.dartlang.org" + source: hosted + version: "1.15.0" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + url: "https://pub.dartlang.org" + source: hosted + version: "0.1.2" + fake_async: + dependency: transitive + description: + name: fake_async + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + matcher: + dependency: transitive + description: + name: matcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.12.10" + meta: + dependency: transitive + description: + name: meta + url: "https://pub.dartlang.org" + source: hosted + version: "1.7.0" + path: + dependency: transitive + description: + name: path + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + url: "https://pub.dartlang.org" + source: hosted + version: "1.8.1" + stack_trace: + dependency: transitive + description: + name: stack_trace + url: "https://pub.dartlang.org" + source: hosted + version: "1.10.0" + stream_channel: + dependency: transitive + description: + name: stream_channel + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + url: "https://pub.dartlang.org" + source: hosted + version: "1.1.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.0" + test_api: + dependency: transitive + description: + name: test_api + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.2" + typed_data: + dependency: transitive + description: + name: typed_data + url: "https://pub.dartlang.org" + source: hosted + version: "1.3.0" + vector_math: + dependency: transitive + description: + name: vector_math + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" +sdks: + dart: ">=2.12.0 <3.0.0" diff --git a/Foodybite-App/pubspec.yaml b/Foodybite-App/pubspec.yaml new file mode 100644 index 00000000..92df8914 --- /dev/null +++ b/Foodybite-App/pubspec.yaml @@ -0,0 +1,71 @@ +name: flutter_foodybite +description: A new Flutter application. + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +version: 1.0.0+1 + +environment: + sdk: ">=2.1.0 <3.0.0" + +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^0.1.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + +# For information on the generic Dart part of this file, see the +# following page: https://www.dartlang.org/tools/pub/pubspec + +# The following section is specific to Flutter. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + assets: + - assets/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware. + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/Foodybite-App/ss/1.png b/Foodybite-App/ss/1.png new file mode 100644 index 00000000..0ab3aae6 Binary files /dev/null and b/Foodybite-App/ss/1.png differ diff --git a/Foodybite-App/ss/2.png b/Foodybite-App/ss/2.png new file mode 100644 index 00000000..8e196582 Binary files /dev/null and b/Foodybite-App/ss/2.png differ diff --git a/Foodybite-App/ss/3.png b/Foodybite-App/ss/3.png new file mode 100644 index 00000000..c1eade8f Binary files /dev/null and b/Foodybite-App/ss/3.png differ diff --git a/Foodybite-App/ss/4.png b/Foodybite-App/ss/4.png new file mode 100644 index 00000000..054a7eb5 Binary files /dev/null and b/Foodybite-App/ss/4.png differ diff --git a/Foodybite-App/ss/5.png b/Foodybite-App/ss/5.png new file mode 100644 index 00000000..917ddb7b Binary files /dev/null and b/Foodybite-App/ss/5.png differ diff --git a/Foodybite-App/test/widget_test.dart b/Foodybite-App/test/widget_test.dart new file mode 100644 index 00000000..ae9ab1d6 --- /dev/null +++ b/Foodybite-App/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility that Flutter provides. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:flutter_foodybite/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +}