├── .gitignore ├── .metadata ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ ├── google-services.json │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── foodapp │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── images ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png ├── background.jpg ├── logo.jpg └── profile.jpg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── main.dart ├── modles │ ├── cart_modle.dart │ ├── categories_modle.dart │ ├── food_categories_modle.dart │ └── food_modle.dart ├── provider │ └── my_provider.dart └── screen │ ├── cart_page.dart │ ├── categories.dart │ ├── detail_page.dart │ ├── home_page.dart │ ├── login_page.dart │ ├── sign_up.dart │ ├── welcome_page.dart │ └── widget │ ├── bottom_Contianer.dart │ └── my_text_field.dart ├── pubspec.lock ├── pubspec.yaml └── test └── widget_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | **/ios/Flutter/.last_build_id 26 | .dart_tool/ 27 | .flutter-plugins 28 | .flutter-plugins-dependencies 29 | .packages 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Web related 35 | lib/generated_plugin_registrant.dart 36 | 37 | # Symbolication related 38 | app.*.symbols 39 | 40 | # Obfuscation related 41 | app.*.map.json 42 | 43 | # Exceptions to above rules. 44 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 45 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 2ae34518b87dd891355ed6c6ea8cb68c4d52bb9d 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Food-Ordering-App-Flutter-Firebase 2 | 3 | [Watch On YouTube](https://www.youtube.com/watch?v=51bpnmbNsGk&list=PLC6P77cg6e2itpb8SqiYdrYeffUTyY377) 4 | 5 | ![maxresdefault](https://user-images.githubusercontent.com/72684684/120939231-79c14900-c730-11eb-8191-ea4687bfe9fa.jpg) 6 | 7 | ## Follow us 8 | ✔ Facebook https://www.facebook.com/yaqoob.225 9 | ✔ Instagram https://www.instagram.com/yaqoob.bugti/ 10 | ✔ WhatsApp https://api.whatsapp.com/send/?phone=... 11 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | apply plugin: 'com.google.gms.google-services' 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 28 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.foodapp" 42 | minSdkVersion 16 43 | targetSdkVersion 28 44 | multiDexEnabled true 45 | versionCode flutterVersionCode.toInteger() 46 | versionName flutterVersionName 47 | } 48 | 49 | buildTypes { 50 | release { 51 | // TODO: Add your own signing config for the release build. 52 | // Signing with the debug keys for now, so `flutter run --release` works. 53 | signingConfig signingConfigs.debug 54 | } 55 | } 56 | } 57 | 58 | flutter { 59 | source '../..' 60 | } 61 | 62 | dependencies { 63 | implementation 'com.google.firebase:firebase-analytics' 64 | implementation platform('com.google.firebase:firebase-bom:25.12.0') 65 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 66 | } 67 | -------------------------------------------------------------------------------- /android/app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "392513781141", 4 | "firebase_url": "https://tasteeapp-b128a.firebaseio.com", 5 | "project_id": "tasteeapp-b128a", 6 | "storage_bucket": "tasteeapp-b128a.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:392513781141:android:63b849ee04bf578b824a9c", 12 | "android_client_info": { 13 | "package_name": "com.example.foodapp" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "392513781141-mpda1cp17m29753h1n545bta6p5ators.apps.googleusercontent.com", 19 | "client_type": 3 20 | } 21 | ], 22 | "api_key": [ 23 | { 24 | "current_key": "AIzaSyD3DAsNJ7OxbY3q0odxlbtQ36I3c3wCLLg" 25 | } 26 | ], 27 | "services": { 28 | "appinvite_service": { 29 | "other_platform_oauth_client": [ 30 | { 31 | "client_id": "392513781141-mpda1cp17m29753h1n545bta6p5ators.apps.googleusercontent.com", 32 | "client_type": 3 33 | } 34 | ] 35 | } 36 | } 37 | } 38 | ], 39 | "configuration_version": "1" 40 | } -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 27 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 43 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/foodapp/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.foodapp 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.google.gms:google-services:4.3.4' 10 | classpath 'com.android.tools.build:gradle:3.5.0' 11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | } 21 | 22 | rootProject.buildDir = '../build' 23 | subprojects { 24 | project.buildDir = "${rootProject.buildDir}/${project.name}" 25 | } 26 | subprojects { 27 | project.evaluationDependsOn(':app') 28 | } 29 | 30 | task clean(type: Delete) { 31 | delete rootProject.buildDir 32 | } 33 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/1.png -------------------------------------------------------------------------------- /images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/2.png -------------------------------------------------------------------------------- /images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/3.png -------------------------------------------------------------------------------- /images/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/4.png -------------------------------------------------------------------------------- /images/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/5.png -------------------------------------------------------------------------------- /images/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/6.png -------------------------------------------------------------------------------- /images/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/7.png -------------------------------------------------------------------------------- /images/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/8.png -------------------------------------------------------------------------------- /images/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/9.png -------------------------------------------------------------------------------- /images/background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/background.jpg -------------------------------------------------------------------------------- /images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/logo.jpg -------------------------------------------------------------------------------- /images/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/images/profile.jpg -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXCopyFilesBuildPhase section */ 19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 20 | isa = PBXCopyFilesBuildPhase; 21 | buildActionMask = 2147483647; 22 | dstPath = ""; 23 | dstSubfolderSpec = 10; 24 | files = ( 25 | ); 26 | name = "Embed Frameworks"; 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXCopyFilesBuildPhase section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | ); 53 | runOnlyForDeploymentPostprocessing = 0; 54 | }; 55 | /* End PBXFrameworksBuildPhase section */ 56 | 57 | /* Begin PBXGroup section */ 58 | 9740EEB11CF90186004384FC /* Flutter */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 65 | ); 66 | name = Flutter; 67 | sourceTree = ""; 68 | }; 69 | 97C146E51CF9000F007C117D = { 70 | isa = PBXGroup; 71 | children = ( 72 | 9740EEB11CF90186004384FC /* Flutter */, 73 | 97C146F01CF9000F007C117D /* Runner */, 74 | 97C146EF1CF9000F007C117D /* Products */, 75 | ); 76 | sourceTree = ""; 77 | }; 78 | 97C146EF1CF9000F007C117D /* Products */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 97C146EE1CF9000F007C117D /* Runner.app */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 97C146F01CF9000F007C117D /* Runner */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 92 | 97C147021CF9000F007C117D /* Info.plist */, 93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 97 | ); 98 | path = Runner; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 97C146ED1CF9000F007C117D /* Runner */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 107 | buildPhases = ( 108 | 9740EEB61CF901F6004384FC /* Run Script */, 109 | 97C146EA1CF9000F007C117D /* Sources */, 110 | 97C146EB1CF9000F007C117D /* Frameworks */, 111 | 97C146EC1CF9000F007C117D /* Resources */, 112 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 114 | ); 115 | buildRules = ( 116 | ); 117 | dependencies = ( 118 | ); 119 | name = Runner; 120 | productName = Runner; 121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 122 | productType = "com.apple.product-type.application"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 97C146E61CF9000F007C117D /* Project object */ = { 128 | isa = PBXProject; 129 | attributes = { 130 | LastUpgradeCheck = 1020; 131 | ORGANIZATIONNAME = ""; 132 | TargetAttributes = { 133 | 97C146ED1CF9000F007C117D = { 134 | CreatedOnToolsVersion = 7.3.1; 135 | LastSwiftMigration = 1100; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 140 | compatibilityVersion = "Xcode 9.3"; 141 | developmentRegion = en; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = 97C146E51CF9000F007C117D; 148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | 97C146ED1CF9000F007C117D /* Runner */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | 97C146EC1CF9000F007C117D /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXResourcesBuildPhase section */ 170 | 171 | /* Begin PBXShellScriptBuildPhase section */ 172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 173 | isa = PBXShellScriptBuildPhase; 174 | buildActionMask = 2147483647; 175 | files = ( 176 | ); 177 | inputPaths = ( 178 | ); 179 | name = "Thin Binary"; 180 | outputPaths = ( 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | shellPath = /bin/sh; 184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 185 | }; 186 | 9740EEB61CF901F6004384FC /* Run Script */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputPaths = ( 192 | ); 193 | name = "Run Script"; 194 | outputPaths = ( 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | shellPath = /bin/sh; 198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 199 | }; 200 | /* End PBXShellScriptBuildPhase section */ 201 | 202 | /* Begin PBXSourcesBuildPhase section */ 203 | 97C146EA1CF9000F007C117D /* Sources */ = { 204 | isa = PBXSourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | }; 212 | /* End PBXSourcesBuildPhase section */ 213 | 214 | /* Begin PBXVariantGroup section */ 215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 216 | isa = PBXVariantGroup; 217 | children = ( 218 | 97C146FB1CF9000F007C117D /* Base */, 219 | ); 220 | name = Main.storyboard; 221 | sourceTree = ""; 222 | }; 223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | 97C147001CF9000F007C117D /* Base */, 227 | ); 228 | name = LaunchScreen.storyboard; 229 | sourceTree = ""; 230 | }; 231 | /* End PBXVariantGroup section */ 232 | 233 | /* Begin XCBuildConfiguration section */ 234 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 235 | isa = XCBuildConfiguration; 236 | buildSettings = { 237 | ALWAYS_SEARCH_USER_PATHS = NO; 238 | CLANG_ANALYZER_NONNULL = YES; 239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 240 | CLANG_CXX_LIBRARY = "libc++"; 241 | CLANG_ENABLE_MODULES = YES; 242 | CLANG_ENABLE_OBJC_ARC = YES; 243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 244 | CLANG_WARN_BOOL_CONVERSION = YES; 245 | CLANG_WARN_COMMA = YES; 246 | CLANG_WARN_CONSTANT_CONVERSION = YES; 247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_EMPTY_BODY = YES; 250 | CLANG_WARN_ENUM_CONVERSION = YES; 251 | CLANG_WARN_INFINITE_RECURSION = YES; 252 | CLANG_WARN_INT_CONVERSION = YES; 253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_UNREACHABLE_CODE = YES; 261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 263 | COPY_PHASE_STRIP = NO; 264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 265 | ENABLE_NS_ASSERTIONS = NO; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | GCC_C_LANGUAGE_STANDARD = gnu99; 268 | GCC_NO_COMMON_BLOCKS = YES; 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 276 | MTL_ENABLE_DEBUG_INFO = NO; 277 | SDKROOT = iphoneos; 278 | SUPPORTED_PLATFORMS = iphoneos; 279 | TARGETED_DEVICE_FAMILY = "1,2"; 280 | VALIDATE_PRODUCT = YES; 281 | }; 282 | name = Profile; 283 | }; 284 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 285 | isa = XCBuildConfiguration; 286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 287 | buildSettings = { 288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 289 | CLANG_ENABLE_MODULES = YES; 290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 291 | ENABLE_BITCODE = NO; 292 | FRAMEWORK_SEARCH_PATHS = ( 293 | "$(inherited)", 294 | "$(PROJECT_DIR)/Flutter", 295 | ); 296 | INFOPLIST_FILE = Runner/Info.plist; 297 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 298 | LIBRARY_SEARCH_PATHS = ( 299 | "$(inherited)", 300 | "$(PROJECT_DIR)/Flutter", 301 | ); 302 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodapp; 303 | PRODUCT_NAME = "$(TARGET_NAME)"; 304 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 305 | SWIFT_VERSION = 5.0; 306 | VERSIONING_SYSTEM = "apple-generic"; 307 | }; 308 | name = Profile; 309 | }; 310 | 97C147031CF9000F007C117D /* Debug */ = { 311 | isa = XCBuildConfiguration; 312 | buildSettings = { 313 | ALWAYS_SEARCH_USER_PATHS = NO; 314 | CLANG_ANALYZER_NONNULL = YES; 315 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 316 | CLANG_CXX_LIBRARY = "libc++"; 317 | CLANG_ENABLE_MODULES = YES; 318 | CLANG_ENABLE_OBJC_ARC = YES; 319 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 320 | CLANG_WARN_BOOL_CONVERSION = YES; 321 | CLANG_WARN_COMMA = YES; 322 | CLANG_WARN_CONSTANT_CONVERSION = YES; 323 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 325 | CLANG_WARN_EMPTY_BODY = YES; 326 | CLANG_WARN_ENUM_CONVERSION = YES; 327 | CLANG_WARN_INFINITE_RECURSION = YES; 328 | CLANG_WARN_INT_CONVERSION = YES; 329 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 331 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 332 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 333 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 334 | CLANG_WARN_STRICT_PROTOTYPES = YES; 335 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 336 | CLANG_WARN_UNREACHABLE_CODE = YES; 337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 339 | COPY_PHASE_STRIP = NO; 340 | DEBUG_INFORMATION_FORMAT = dwarf; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | ENABLE_TESTABILITY = YES; 343 | GCC_C_LANGUAGE_STANDARD = gnu99; 344 | GCC_DYNAMIC_NO_PIC = NO; 345 | GCC_NO_COMMON_BLOCKS = YES; 346 | GCC_OPTIMIZATION_LEVEL = 0; 347 | GCC_PREPROCESSOR_DEFINITIONS = ( 348 | "DEBUG=1", 349 | "$(inherited)", 350 | ); 351 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 352 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 353 | GCC_WARN_UNDECLARED_SELECTOR = YES; 354 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 355 | GCC_WARN_UNUSED_FUNCTION = YES; 356 | GCC_WARN_UNUSED_VARIABLE = YES; 357 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 358 | MTL_ENABLE_DEBUG_INFO = YES; 359 | ONLY_ACTIVE_ARCH = YES; 360 | SDKROOT = iphoneos; 361 | TARGETED_DEVICE_FAMILY = "1,2"; 362 | }; 363 | name = Debug; 364 | }; 365 | 97C147041CF9000F007C117D /* Release */ = { 366 | isa = XCBuildConfiguration; 367 | buildSettings = { 368 | ALWAYS_SEARCH_USER_PATHS = NO; 369 | CLANG_ANALYZER_NONNULL = YES; 370 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 371 | CLANG_CXX_LIBRARY = "libc++"; 372 | CLANG_ENABLE_MODULES = YES; 373 | CLANG_ENABLE_OBJC_ARC = YES; 374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 375 | CLANG_WARN_BOOL_CONVERSION = YES; 376 | CLANG_WARN_COMMA = YES; 377 | CLANG_WARN_CONSTANT_CONVERSION = YES; 378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 380 | CLANG_WARN_EMPTY_BODY = YES; 381 | CLANG_WARN_ENUM_CONVERSION = YES; 382 | CLANG_WARN_INFINITE_RECURSION = YES; 383 | CLANG_WARN_INT_CONVERSION = YES; 384 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 385 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 386 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 387 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 388 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 389 | CLANG_WARN_STRICT_PROTOTYPES = YES; 390 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 391 | CLANG_WARN_UNREACHABLE_CODE = YES; 392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 393 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 394 | COPY_PHASE_STRIP = NO; 395 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 396 | ENABLE_NS_ASSERTIONS = NO; 397 | ENABLE_STRICT_OBJC_MSGSEND = YES; 398 | GCC_C_LANGUAGE_STANDARD = gnu99; 399 | GCC_NO_COMMON_BLOCKS = YES; 400 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 401 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 402 | GCC_WARN_UNDECLARED_SELECTOR = YES; 403 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 404 | GCC_WARN_UNUSED_FUNCTION = YES; 405 | GCC_WARN_UNUSED_VARIABLE = YES; 406 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 407 | MTL_ENABLE_DEBUG_INFO = NO; 408 | SDKROOT = iphoneos; 409 | SUPPORTED_PLATFORMS = iphoneos; 410 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 411 | TARGETED_DEVICE_FAMILY = "1,2"; 412 | VALIDATE_PRODUCT = YES; 413 | }; 414 | name = Release; 415 | }; 416 | 97C147061CF9000F007C117D /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 419 | buildSettings = { 420 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 421 | CLANG_ENABLE_MODULES = YES; 422 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 423 | ENABLE_BITCODE = NO; 424 | FRAMEWORK_SEARCH_PATHS = ( 425 | "$(inherited)", 426 | "$(PROJECT_DIR)/Flutter", 427 | ); 428 | INFOPLIST_FILE = Runner/Info.plist; 429 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 430 | LIBRARY_SEARCH_PATHS = ( 431 | "$(inherited)", 432 | "$(PROJECT_DIR)/Flutter", 433 | ); 434 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodapp; 435 | PRODUCT_NAME = "$(TARGET_NAME)"; 436 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 437 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 438 | SWIFT_VERSION = 5.0; 439 | VERSIONING_SYSTEM = "apple-generic"; 440 | }; 441 | name = Debug; 442 | }; 443 | 97C147071CF9000F007C117D /* Release */ = { 444 | isa = XCBuildConfiguration; 445 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 446 | buildSettings = { 447 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 448 | CLANG_ENABLE_MODULES = YES; 449 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 450 | ENABLE_BITCODE = NO; 451 | FRAMEWORK_SEARCH_PATHS = ( 452 | "$(inherited)", 453 | "$(PROJECT_DIR)/Flutter", 454 | ); 455 | INFOPLIST_FILE = Runner/Info.plist; 456 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 457 | LIBRARY_SEARCH_PATHS = ( 458 | "$(inherited)", 459 | "$(PROJECT_DIR)/Flutter", 460 | ); 461 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodapp; 462 | PRODUCT_NAME = "$(TARGET_NAME)"; 463 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 464 | SWIFT_VERSION = 5.0; 465 | VERSIONING_SYSTEM = "apple-generic"; 466 | }; 467 | name = Release; 468 | }; 469 | /* End XCBuildConfiguration section */ 470 | 471 | /* Begin XCConfigurationList section */ 472 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 473 | isa = XCConfigurationList; 474 | buildConfigurations = ( 475 | 97C147031CF9000F007C117D /* Debug */, 476 | 97C147041CF9000F007C117D /* Release */, 477 | 249021D3217E4FDB00AE95B9 /* Profile */, 478 | ); 479 | defaultConfigurationIsVisible = 0; 480 | defaultConfigurationName = Release; 481 | }; 482 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 483 | isa = XCConfigurationList; 484 | buildConfigurations = ( 485 | 97C147061CF9000F007C117D /* Debug */, 486 | 97C147071CF9000F007C117D /* Release */, 487 | 249021D4217E4FDB00AE95B9 /* Profile */, 488 | ); 489 | defaultConfigurationIsVisible = 0; 490 | defaultConfigurationName = Release; 491 | }; 492 | /* End XCConfigurationList section */ 493 | }; 494 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 495 | } 496 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FlutterBaba/Food-Ordering-App-Flutter-Firebase/c242c4d2c3120dcfd63934be2e6585cc11b82b24/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | foodapp 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_auth/firebase_auth.dart'; 2 | import 'package:firebase_core/firebase_core.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:foodapp/provider/my_provider.dart'; 5 | import 'package:foodapp/screen/cart_page.dart'; 6 | import 'package:foodapp/screen/detail_page.dart'; 7 | 8 | import 'package:foodapp/screen/home_page.dart'; 9 | import 'package:foodapp/screen/login_page.dart'; 10 | import 'package:provider/provider.dart'; 11 | 12 | void main() async { 13 | WidgetsFlutterBinding.ensureInitialized(); 14 | await Firebase.initializeApp(); 15 | runApp(MyApp()); 16 | } 17 | 18 | class MyApp extends StatelessWidget { 19 | @override 20 | Widget build(BuildContext context) { 21 | return MultiProvider( 22 | providers: [ 23 | ChangeNotifierProvider(create: (_) => MyProvider()), 24 | ], 25 | child: MaterialApp( 26 | debugShowCheckedModeBanner: false, 27 | title: 'Flutter Demo', 28 | theme: ThemeData( 29 | scaffoldBackgroundColor: Color(0xff2b2b2b), 30 | appBarTheme: AppBarTheme( 31 | color: Color(0xff2b2b2b), 32 | ), 33 | ), 34 | home: HomePage(), 35 | // home: StreamBuilder( 36 | // stream: FirebaseAuth.instance.authStateChanges(), 37 | // builder: (index, sncpshot) { 38 | // if (sncpshot.hasData) { 39 | // return HomePage(); 40 | // } 41 | // return LoginPage(); 42 | // }), 43 | ), 44 | ); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /lib/modles/cart_modle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class CartModle { 4 | final String image; 5 | final String name; 6 | final int price; 7 | final int quantity; 8 | 9 | CartModle({ 10 | @required this.image, 11 | @required this.name, 12 | @required this.price, 13 | @required this.quantity, 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /lib/modles/categories_modle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class CategoriesModle { 4 | final String image; 5 | final String name; 6 | CategoriesModle({@required this.image, @required this.name}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/modles/food_categories_modle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class FoodCategoriesModle{ 4 | final String image; 5 | final String name; 6 | final int price; 7 | FoodCategoriesModle({@required this.image,@required this.name,@required this.price}); 8 | } -------------------------------------------------------------------------------- /lib/modles/food_modle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class FoodModle{ 4 | final String image; 5 | final String name; 6 | final int price; 7 | FoodModle({@required this.image,@required this.name,@required this.price}); 8 | } -------------------------------------------------------------------------------- /lib/provider/my_provider.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:foodapp/modles/cart_modle.dart'; 4 | import 'package:foodapp/modles/categories_modle.dart'; 5 | import 'package:foodapp/modles/food_categories_modle.dart'; 6 | import 'package:foodapp/modles/food_modle.dart'; 7 | 8 | class MyProvider extends ChangeNotifier { 9 | List burgerList = []; 10 | CategoriesModle burgerModle; 11 | Future getBurgerCategory() async { 12 | List newBurgerList = []; 13 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 14 | .collection('categories') 15 | .doc('XhXjlgjk2ffXtCnAD1Ms') 16 | .collection('Burger') 17 | .get(); 18 | querySnapshot.docs.forEach((element) { 19 | burgerModle = CategoriesModle( 20 | image: element.data()['image'], 21 | name: element.data()['name'], 22 | ); 23 | newBurgerList.add(burgerModle); 24 | burgerList = newBurgerList; 25 | }); 26 | notifyListeners(); 27 | } 28 | 29 | get throwBurgerList { 30 | return burgerList; 31 | } 32 | 33 | /////////////////// 2nd category //////////////// 34 | List recipeList = []; 35 | CategoriesModle recipeModle; 36 | Future getRecipeCategory() async { 37 | List newRecipeList = []; 38 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 39 | .collection('categories') 40 | .doc('XhXjlgjk2ffXtCnAD1Ms') 41 | .collection('Recipe') 42 | .get(); 43 | querySnapshot.docs.forEach((element) { 44 | recipeModle = CategoriesModle( 45 | image: element.data()['image'], 46 | name: element.data()['name'], 47 | ); 48 | newRecipeList.add(recipeModle); 49 | recipeList = newRecipeList; 50 | }); 51 | notifyListeners(); 52 | } 53 | 54 | get throwRecipeList { 55 | return recipeList; 56 | } 57 | 58 | /////////////// 3nd Category/////////////////////// 59 | 60 | List pizzaList = []; 61 | CategoriesModle pizzaModle; 62 | Future getPizzaCategory() async { 63 | List newPizzaList = []; 64 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 65 | .collection('categories') 66 | .doc('XhXjlgjk2ffXtCnAD1Ms') 67 | .collection('Pizza') 68 | .get(); 69 | querySnapshot.docs.forEach((element) { 70 | pizzaModle = CategoriesModle( 71 | image: element.data()['image'], 72 | name: element.data()['name'], 73 | ); 74 | newPizzaList.add(pizzaModle); 75 | pizzaList = newPizzaList; 76 | }); 77 | notifyListeners(); 78 | } 79 | 80 | get throwPizzaList { 81 | return pizzaList; 82 | } 83 | 84 | /////////////////4th category ///////////// 85 | 86 | List drinkList = []; 87 | CategoriesModle drinkModle; 88 | Future getDrinkCategory() async { 89 | List newDrinkList = []; 90 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 91 | .collection('categories') 92 | .doc('XhXjlgjk2ffXtCnAD1Ms') 93 | .collection('Drink') 94 | .get(); 95 | querySnapshot.docs.forEach((element) { 96 | drinkModle = CategoriesModle( 97 | image: element.data()['image'], 98 | name: element.data()['name'], 99 | ); 100 | newDrinkList.add(drinkModle); 101 | drinkList = newDrinkList; 102 | }); 103 | notifyListeners(); 104 | } 105 | 106 | get throwDrinkList { 107 | return drinkList; 108 | } 109 | 110 | ///////////////////// Single Food Item ////////////////////////// 111 | 112 | List foodModleList = []; 113 | FoodModle foodModle; 114 | Future getFoodList() async { 115 | List newSingleFoodList = []; 116 | QuerySnapshot querySnapshot = 117 | await FirebaseFirestore.instance.collection('Foods').get(); 118 | querySnapshot.docs.forEach( 119 | (element) { 120 | foodModle = FoodModle( 121 | name: element.data()['name'], 122 | image: element.data()['image'], 123 | price: element.data()['price'], 124 | ); 125 | newSingleFoodList.add(foodModle); 126 | }, 127 | ); 128 | 129 | foodModleList = newSingleFoodList; 130 | notifyListeners(); 131 | } 132 | 133 | get throwFoodModleList { 134 | return foodModleList; 135 | } 136 | 137 | ///////////////burger categories list////////// 138 | List burgerCategoriesList = []; 139 | FoodCategoriesModle burgerCategoriesModle; 140 | Future getBurgerCategoriesList() async { 141 | List newBurgerCategoriesList = []; 142 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 143 | .collection('foodcategories') 144 | .doc('8Dtfnhwbi1cDkCrX02rA') 145 | .collection('burger') 146 | .get(); 147 | querySnapshot.docs.forEach((element) { 148 | burgerCategoriesModle = FoodCategoriesModle( 149 | image: element.data()['image'], 150 | name: element.data()['name'], 151 | price: element.data()['price'], 152 | ); 153 | newBurgerCategoriesList.add(burgerCategoriesModle); 154 | burgerCategoriesList = newBurgerCategoriesList; 155 | }); 156 | } 157 | 158 | get throwBurgerCategoriesList { 159 | return burgerCategoriesList; 160 | } 161 | 162 | ///////////////Recipe categories list////////// 163 | List recipeCategoriesList = []; 164 | FoodCategoriesModle recipeCategoriesModle; 165 | Future getrecipeCategoriesList() async { 166 | List newrecipeCategoriesList = []; 167 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 168 | .collection('foodcategories') 169 | .doc('8Dtfnhwbi1cDkCrX02rA') 170 | .collection('recipe') 171 | .get(); 172 | querySnapshot.docs.forEach((element) { 173 | recipeCategoriesModle = FoodCategoriesModle( 174 | image: element.data()['image'], 175 | name: element.data()['name'], 176 | price: element.data()['price'], 177 | ); 178 | newrecipeCategoriesList.add(recipeCategoriesModle); 179 | recipeCategoriesList = newrecipeCategoriesList; 180 | }); 181 | } 182 | 183 | get throwRecipeCategoriesList { 184 | return recipeCategoriesList; 185 | } 186 | 187 | ///////////////Pizza categories list////////// 188 | List pizzaCategoriesList = []; 189 | FoodCategoriesModle pizzaCategoriesModle; 190 | Future getPizzaCategoriesList() async { 191 | List newPizzaCategoriesList = []; 192 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 193 | .collection('foodcategories') 194 | .doc('8Dtfnhwbi1cDkCrX02rA') 195 | .collection('Pizza') 196 | .get(); 197 | querySnapshot.docs.forEach((element) { 198 | pizzaCategoriesModle = FoodCategoriesModle( 199 | image: element.data()['image'], 200 | name: element.data()['name'], 201 | price: element.data()['price'], 202 | ); 203 | newPizzaCategoriesList.add(pizzaCategoriesModle); 204 | pizzaCategoriesList = newPizzaCategoriesList; 205 | }); 206 | } 207 | 208 | get throwPizzaCategoriesList { 209 | return pizzaCategoriesList; 210 | } 211 | 212 | ///////////////Drink categories list////////// 213 | List drinkCategoriesList = []; 214 | FoodCategoriesModle drinkCategoriesModle; 215 | Future getDrinkCategoriesList() async { 216 | List newDrinkCategoriesList = []; 217 | QuerySnapshot querySnapshot = await FirebaseFirestore.instance 218 | .collection('foodcategories') 219 | .doc('8Dtfnhwbi1cDkCrX02rA') 220 | .collection('drink') 221 | .get(); 222 | querySnapshot.docs.forEach((element) { 223 | drinkCategoriesModle = FoodCategoriesModle( 224 | image: element.data()['image'], 225 | name: element.data()['name'], 226 | price: element.data()['price'], 227 | ); 228 | newDrinkCategoriesList.add(drinkCategoriesModle); 229 | drinkCategoriesList = newDrinkCategoriesList; 230 | }); 231 | } 232 | 233 | get throwDrinkCategoriesList { 234 | return drinkCategoriesList; 235 | } 236 | 237 | /////////////add to cart //////////// 238 | List cartList = []; 239 | List newCartList = []; 240 | CartModle cartModle; 241 | void addToCart({ 242 | @required String image, 243 | @required String name, 244 | @required int price, 245 | @required int quantity, 246 | }) { 247 | cartModle = CartModle( 248 | image: image, 249 | name: name, 250 | price: price, 251 | quantity: quantity, 252 | ); 253 | newCartList.add(cartModle); 254 | cartList = newCartList; 255 | } 256 | 257 | get throwCartList { 258 | return cartList; 259 | } 260 | 261 | int totalprice() { 262 | int total = 0; 263 | cartList.forEach((element) { 264 | total += element.price * element.quantity; 265 | }); 266 | return total; 267 | } 268 | int deleteIndex; 269 | void getDeleteIndex(int index){ 270 | deleteIndex=index; 271 | } 272 | void delete(){ 273 | cartList.removeAt(deleteIndex); 274 | notifyListeners(); 275 | } 276 | } 277 | -------------------------------------------------------------------------------- /lib/screen/cart_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:foodapp/provider/my_provider.dart'; 3 | import 'package:foodapp/screen/home_page.dart'; 4 | import 'package:provider/provider.dart'; 5 | 6 | class CartPage extends StatelessWidget { 7 | @override 8 | Widget cartItem({ 9 | @required String image, 10 | @required String name, 11 | @required int price, 12 | @required Function onTap, 13 | @required int quantity, 14 | }) { 15 | return Row( 16 | children: [ 17 | Container( 18 | width: 170, 19 | height: 170, 20 | child: CircleAvatar( 21 | backgroundImage: NetworkImage(image), 22 | ), 23 | ), 24 | SizedBox( 25 | width: 20, 26 | ), 27 | Expanded( 28 | child: Stack( 29 | alignment: Alignment.topRight, 30 | children: [ 31 | Container( 32 | height: 200, 33 | child: Column( 34 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 35 | crossAxisAlignment: CrossAxisAlignment.start, 36 | children: [ 37 | Text( 38 | name, 39 | style: TextStyle( 40 | color: Colors.white, 41 | fontSize: 30, 42 | fontWeight: FontWeight.bold), 43 | ), 44 | Text( 45 | "burger bhout acha hain", 46 | style: TextStyle(color: Colors.white), 47 | ), 48 | Text( 49 | "\$ $price", 50 | style: TextStyle( 51 | color: Colors.white, 52 | fontSize: 20, 53 | fontWeight: FontWeight.bold), 54 | ), 55 | Row( 56 | children: [ 57 | Text( 58 | "$quantity", 59 | style: TextStyle(fontSize: 20, color: Colors.white), 60 | ) 61 | ], 62 | ) 63 | ], 64 | ), 65 | ), 66 | IconButton( 67 | icon: Icon(Icons.close, color: Colors.white), 68 | onPressed: onTap, 69 | ) 70 | ], 71 | )), 72 | ], 73 | ); 74 | } 75 | Widget build(BuildContext context) { 76 | MyProvider provider = Provider.of(context); 77 | int total = provider.totalprice(); 78 | return Scaffold( 79 | bottomNavigationBar: Container( 80 | margin: EdgeInsets.only(bottom: 20, left: 20, right: 20), 81 | padding: EdgeInsets.symmetric(horizontal: 10), 82 | height: 65, 83 | decoration: BoxDecoration( 84 | color: Color(0xff3a3e3e), borderRadius: BorderRadius.circular(10)), 85 | child: Row( 86 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 87 | children: [ 88 | Text( 89 | "\$ $total", 90 | style: TextStyle(color: Colors.white, fontSize: 30), 91 | ), 92 | Text( 93 | "Check Out", 94 | style: TextStyle( 95 | color: Colors.white, 96 | fontSize: 25, 97 | fontWeight: FontWeight.bold), 98 | ) 99 | ], 100 | ), 101 | ), 102 | appBar: AppBar( 103 | leading: IconButton( 104 | icon: Icon(Icons.arrow_back), 105 | onPressed: () { 106 | Navigator.of(context).pushReplacement( 107 | MaterialPageRoute( 108 | builder: (context) => HomePage(), 109 | ), 110 | ); 111 | }, 112 | ), 113 | ), 114 | body: ListView.builder( 115 | itemCount: provider.cartList.length, 116 | itemBuilder: (ctx, index) { 117 | provider.getDeleteIndex(index); 118 | return cartItem( 119 | onTap: (){ 120 | provider.delete(); 121 | }, 122 | image: provider.cartList[index].image, 123 | name: provider.cartList[index].name, 124 | price: provider.cartList[index].price, 125 | quantity: provider.cartList[index].quantity, 126 | ); 127 | }, 128 | ), 129 | ); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /lib/screen/categories.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:foodapp/modles/food_categories_modle.dart'; 3 | import 'package:foodapp/screen/detail_page.dart'; 4 | import 'package:foodapp/screen/home_page.dart'; 5 | import 'package:foodapp/screen/widget/bottom_Contianer.dart'; 6 | 7 | class Categories extends StatelessWidget { 8 | List list = []; 9 | Categories({@required this.list}); 10 | @override 11 | Widget build(BuildContext context) { 12 | return Scaffold( 13 | appBar: AppBar( 14 | elevation: 0.0, 15 | leading: IconButton( 16 | icon: Icon(Icons.arrow_back), 17 | onPressed: () { 18 | Navigator.of(context).pushReplacement( 19 | MaterialPageRoute(builder: (contet) => HomePage())); 20 | }, 21 | ), 22 | ), 23 | body: GridView.count( 24 | shrinkWrap: false, 25 | primary: false, 26 | crossAxisCount: 2, 27 | childAspectRatio: 0.8, 28 | crossAxisSpacing: 20, 29 | mainAxisSpacing: 20, 30 | children: list 31 | .map( 32 | (e) => BottomContainer( 33 | onTap: () { 34 | Navigator.of(context).pushReplacement( 35 | MaterialPageRoute( 36 | builder: (context) => DetailPage( 37 | image: e.image, 38 | name: e.name, 39 | price: e.price, 40 | ), 41 | ), 42 | ); 43 | }, 44 | image: e.image, 45 | price: e.price, 46 | name: e.name, 47 | ), 48 | ) 49 | .toList()), 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/screen/detail_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:foodapp/provider/my_provider.dart'; 3 | import 'package:foodapp/screen/cart_page.dart'; 4 | import 'package:foodapp/screen/home_page.dart'; 5 | import 'package:provider/provider.dart'; 6 | 7 | class DetailPage extends StatefulWidget { 8 | final String image; 9 | final int price; 10 | final String name; 11 | DetailPage({@required this.image, @required this.name, @required this.price}); 12 | 13 | @override 14 | _DetailPageState createState() => _DetailPageState(); 15 | } 16 | 17 | class _DetailPageState extends State { 18 | int quantity = 1; 19 | @override 20 | Widget build(BuildContext context) { 21 | MyProvider provider = Provider.of(context); 22 | return Scaffold( 23 | appBar: AppBar( 24 | elevation: 0.0, 25 | leading: IconButton( 26 | icon: Icon( 27 | Icons.arrow_back, 28 | color: Colors.white, 29 | ), 30 | onPressed: () { 31 | Navigator.of(context).pushReplacement( 32 | MaterialPageRoute(builder: (context) => HomePage())); 33 | }, 34 | ), 35 | ), 36 | body: Column( 37 | children: [ 38 | Expanded( 39 | child: Container( 40 | child: CircleAvatar( 41 | radius: 110, 42 | backgroundImage: NetworkImage(widget.image), 43 | ), 44 | ), 45 | ), 46 | Expanded( 47 | flex: 2, 48 | child: Container( 49 | padding: EdgeInsets.symmetric(horizontal: 20), 50 | width: double.infinity, 51 | decoration: BoxDecoration( 52 | color: Color(0xff3a3e3e), 53 | borderRadius: BorderRadius.only( 54 | topLeft: Radius.circular(10), 55 | topRight: Radius.circular(10))), 56 | child: Column( 57 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 58 | crossAxisAlignment: CrossAxisAlignment.start, 59 | children: [ 60 | Text( 61 | widget.name, 62 | style: TextStyle(fontSize: 40, color: Colors.white), 63 | ), 64 | Text( 65 | "Any text..", 66 | style: TextStyle(color: Colors.white), 67 | ), 68 | Row( 69 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 70 | children: [ 71 | Row( 72 | children: [ 73 | GestureDetector( 74 | onTap: () { 75 | setState(() { 76 | if (quantity > 1) quantity--; 77 | }); 78 | }, 79 | child: Container( 80 | height: 40, 81 | width: 40, 82 | decoration: BoxDecoration( 83 | color: Colors.white, 84 | borderRadius: BorderRadius.circular(10)), 85 | child: Icon(Icons.remove), 86 | ), 87 | ), 88 | SizedBox( 89 | width: 10, 90 | ), 91 | Text( 92 | '$quantity', 93 | style: TextStyle( 94 | color: Colors.white, 95 | fontSize: 20, 96 | fontWeight: FontWeight.bold), 97 | ), 98 | SizedBox( 99 | width: 10, 100 | ), 101 | GestureDetector( 102 | onTap: () { 103 | setState(() { 104 | quantity++; 105 | }); 106 | }, 107 | child: Container( 108 | height: 40, 109 | width: 40, 110 | decoration: BoxDecoration( 111 | color: Colors.white, 112 | borderRadius: BorderRadius.circular(10), 113 | ), 114 | child: Icon( 115 | Icons.add, 116 | ), 117 | ), 118 | ), 119 | ], 120 | ), 121 | Text( 122 | "\$${widget.price * quantity}", 123 | style: TextStyle(color: Colors.white, fontSize: 30), 124 | ) 125 | ], 126 | ), 127 | Text( 128 | "Descipation", 129 | style: TextStyle( 130 | fontSize: 25, 131 | color: Colors.white, 132 | fontWeight: FontWeight.bold), 133 | ), 134 | Text( 135 | "The customer app is the one that the customer is going to use. That is the briefest description for this app. The customer app helps the customer to access the online food ordering platforms, search for the right restaurant or the dish they want to order, place their orders and pay easily.", 136 | style: TextStyle(color: Colors.grey), 137 | ), 138 | Container( 139 | height: 55, 140 | width: double.infinity, 141 | child: RaisedButton( 142 | color: Color(0xff2b2b2b), 143 | onPressed: () { 144 | provider.addToCart( 145 | image: widget.image, 146 | name: widget.name, 147 | price: widget.price, 148 | quantity: quantity, 149 | ); 150 | Navigator.of(context).pushReplacement( 151 | MaterialPageRoute( 152 | builder: (context) => CartPage(), 153 | ), 154 | ); 155 | }, 156 | shape: RoundedRectangleBorder( 157 | borderRadius: BorderRadius.circular(10), 158 | ), 159 | child: Row( 160 | mainAxisAlignment: MainAxisAlignment.center, 161 | children: [ 162 | Icon( 163 | Icons.shopping_cart, 164 | color: Colors.white, 165 | ), 166 | SizedBox( 167 | width: 10, 168 | ), 169 | Text( 170 | "Add to Cart", 171 | style: TextStyle(fontSize: 20, color: Colors.white), 172 | ) 173 | ], 174 | ), 175 | ), 176 | ) 177 | ], 178 | ), 179 | ), 180 | ) 181 | ], 182 | ), 183 | ); 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /lib/screen/home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:foodapp/modles/categories_modle.dart'; 3 | import 'package:foodapp/modles/food_categories_modle.dart'; 4 | import 'package:foodapp/modles/food_modle.dart'; 5 | import 'package:foodapp/provider/my_provider.dart'; 6 | import 'package:foodapp/screen/categories.dart'; 7 | import 'package:foodapp/screen/detail_page.dart'; 8 | import 'package:foodapp/screen/widget/bottom_Contianer.dart'; 9 | import 'package:provider/provider.dart'; 10 | 11 | class HomePage extends StatefulWidget { 12 | @override 13 | _HomePageState createState() => _HomePageState(); 14 | } 15 | 16 | class _HomePageState extends State { 17 | // 1st 18 | List burgerList = []; 19 | 20 | ///2nd 21 | List recipeList = []; 22 | //3rd 23 | List pizzaList = []; 24 | //4th 25 | List drinkList = []; 26 | 27 | List singleFoodList = []; 28 | 29 | List burgerCategoriesList = []; 30 | List recipeCategoriesList = []; 31 | List pizzaCategoriesList = []; 32 | List drinkCategoriesList = []; 33 | 34 | Widget categoriesContainer( 35 | {@required Function onTap, 36 | @required String image, 37 | @required String name}) { 38 | return Column( 39 | children: [ 40 | GestureDetector( 41 | onTap: onTap, 42 | child: Container( 43 | margin: EdgeInsets.only(left: 20), 44 | height: 80, 45 | width: 80, 46 | decoration: BoxDecoration( 47 | image: DecorationImage(image: NetworkImage(image)), 48 | color: Colors.grey, 49 | borderRadius: BorderRadius.circular(10), 50 | ), 51 | ), 52 | ), 53 | SizedBox( 54 | height: 10, 55 | ), 56 | Text( 57 | name, 58 | style: TextStyle( 59 | fontSize: 20, 60 | color: Colors.white, 61 | ), 62 | ) 63 | ], 64 | ); 65 | } 66 | 67 | Widget drawerItem({@required String name, @required IconData icon}) { 68 | return ListTile( 69 | leading: Icon( 70 | icon, 71 | color: Colors.white, 72 | ), 73 | title: Text( 74 | name, 75 | style: TextStyle(fontSize: 20, color: Colors.white), 76 | ), 77 | ); 78 | } 79 | 80 | ////1st 81 | Widget burger() { 82 | return Row( 83 | children: burgerList 84 | .map((e) => categoriesContainer( 85 | image: e.image, 86 | name: e.name, 87 | onTap: () { 88 | Navigator.of(context).pushReplacement( 89 | MaterialPageRoute( 90 | builder: (context) => Categories( 91 | list: burgerCategoriesList, 92 | ), 93 | ), 94 | ); 95 | })) 96 | .toList(), 97 | ); 98 | } 99 | 100 | ////2nd 101 | Widget recipe() { 102 | return Row( 103 | children: recipeList 104 | .map((e) => categoriesContainer( 105 | image: e.image, 106 | name: e.name, 107 | onTap: () { 108 | Navigator.of(context).pushReplacement( 109 | MaterialPageRoute( 110 | builder: (context) => 111 | Categories(list: recipeCategoriesList), 112 | ), 113 | ); 114 | }, 115 | )) 116 | .toList(), 117 | ); 118 | } 119 | 120 | //3rd 121 | Widget pizza() { 122 | return Row( 123 | children: pizzaList 124 | .map( 125 | (e) => categoriesContainer( 126 | image: e.image, 127 | name: e.name, 128 | onTap: () { 129 | Navigator.of(context).pushReplacement( 130 | MaterialPageRoute( 131 | builder: (context) => Categories(list: pizzaCategoriesList), 132 | ), 133 | ); 134 | }, 135 | ), 136 | ) 137 | .toList(), 138 | ); 139 | } 140 | 141 | /////4th 142 | Widget drink() { 143 | return Row( 144 | children: drinkList 145 | .map( 146 | (e) => categoriesContainer( 147 | image: e.image, 148 | name: e.name, 149 | onTap: () { 150 | Navigator.of(context).pushReplacement( 151 | MaterialPageRoute( 152 | builder: (context) => Categories(list: drinkCategoriesList), 153 | ), 154 | ); 155 | }, 156 | ), 157 | ) 158 | .toList(), 159 | ); 160 | } 161 | 162 | @override 163 | Widget build(BuildContext context) { 164 | MyProvider provider = Provider.of(context); 165 | // 1st 166 | provider.getBurgerCategory(); 167 | burgerList = provider.throwBurgerList; 168 | //2nd 169 | provider.getRecipeCategory(); 170 | recipeList = provider.throwRecipeList; 171 | //3rd 172 | provider.getDrinkCategory(); 173 | drinkList = provider.throwDrinkList; 174 | // 4th 175 | provider.getPizzaCategory(); 176 | pizzaList = provider.throwPizzaList; 177 | //////////////single food list///////// 178 | provider.getFoodList(); 179 | singleFoodList = provider.throwFoodModleList; 180 | provider.getBurgerCategoriesList(); 181 | burgerCategoriesList = provider.throwBurgerCategoriesList; 182 | provider.getrecipeCategoriesList(); 183 | recipeCategoriesList = provider.throwRecipeCategoriesList; 184 | provider.getPizzaCategoriesList(); 185 | pizzaCategoriesList = provider.throwPizzaCategoriesList; 186 | provider.getDrinkCategoriesList(); 187 | drinkCategoriesList = provider.throwDrinkCategoriesList; 188 | return Scaffold( 189 | drawer: Drawer( 190 | child: Container( 191 | color: Color(0xff2b2b2b), 192 | child: SafeArea( 193 | child: Column( 194 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 195 | crossAxisAlignment: CrossAxisAlignment.start, 196 | children: [ 197 | UserAccountsDrawerHeader( 198 | decoration: BoxDecoration( 199 | image: DecorationImage( 200 | fit: BoxFit.cover, 201 | image: AssetImage('images/background.jpg'), 202 | ), 203 | ), 204 | currentAccountPicture: CircleAvatar( 205 | backgroundImage: AssetImage('images/profile.jpg'), 206 | ), 207 | accountName: Text("Flutter Baba"), 208 | accountEmail: Text("AqeelBaloch@gmail.com"), 209 | ), 210 | drawerItem(icon: Icons.person, name: "Profile"), 211 | drawerItem(icon: Icons.add_shopping_cart, name: "Cart"), 212 | drawerItem(icon: Icons.shop, name: "Order"), 213 | Divider( 214 | thickness: 2, 215 | color: Colors.white, 216 | ), 217 | ListTile( 218 | leading: Text( 219 | "Comunicate", 220 | style: TextStyle( 221 | color: Colors.white, 222 | fontSize: 20, 223 | ), 224 | ), 225 | ), 226 | // Text( 227 | // "Comunicate", 228 | // style: TextStyle( 229 | // color: Colors.white, 230 | // fontSize: 20, 231 | // ), 232 | // ), 233 | drawerItem(icon: Icons.lock, name: "Change"), 234 | drawerItem(icon: Icons.exit_to_app, name: "Log Out"), 235 | ], 236 | ), 237 | ), 238 | ), 239 | ), 240 | appBar: AppBar( 241 | elevation: 0.0, 242 | actions: [ 243 | Padding( 244 | padding: const EdgeInsets.all(9.0), 245 | child: CircleAvatar( 246 | backgroundImage: AssetImage('images/profile.jpg'), 247 | ), 248 | ) 249 | ], 250 | ), 251 | body: Column( 252 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 253 | children: [ 254 | Padding( 255 | padding: const EdgeInsets.symmetric(horizontal: 10), 256 | child: TextField( 257 | decoration: InputDecoration( 258 | hintText: "Search Food", 259 | hintStyle: TextStyle(color: Colors.white), 260 | prefixIcon: Icon( 261 | Icons.search, 262 | color: Colors.white, 263 | ), 264 | filled: true, 265 | fillColor: Color(0xff3a3e3e), 266 | border: OutlineInputBorder( 267 | borderSide: BorderSide.none, 268 | borderRadius: BorderRadius.circular(10))), 269 | ), 270 | ), 271 | SingleChildScrollView( 272 | scrollDirection: Axis.horizontal, 273 | child: Row( 274 | children: [ 275 | burger(), 276 | recipe(), 277 | pizza(), 278 | drink(), 279 | // categoriesContainer(image: 'images/1.png', name: "All"), 280 | // categoriesContainer(image: 'images/2.png', name: "Burger"), 281 | // categoriesContainer(image: 'images/3.png', name: "Recipe"), 282 | // categoriesContainer(image: 'images/4.png', name: "Pizza"), 283 | // categoriesContainer(image: 'images/5.png', name: "Drink"), 284 | ], 285 | ), 286 | ), 287 | Container( 288 | margin: EdgeInsets.symmetric(horizontal: 10), 289 | height: 510, 290 | child: GridView.count( 291 | shrinkWrap: false, 292 | primary: false, 293 | crossAxisCount: 2, 294 | childAspectRatio: 0.8, 295 | crossAxisSpacing: 20, 296 | mainAxisSpacing: 20, 297 | children: singleFoodList 298 | .map( 299 | (e) => BottomContainer( 300 | onTap: () { 301 | Navigator.of(context).pushReplacement( 302 | MaterialPageRoute( 303 | builder: (context) => DetailPage( 304 | image: e.image, 305 | name: e.name, 306 | price: e.price, 307 | ), 308 | ), 309 | ); 310 | }, 311 | image: e.image, 312 | price: e.price, 313 | name: e.name, 314 | ), 315 | ) 316 | .toList() 317 | // children: [ 318 | // // bottonContainer( 319 | // // image: 'images/2.png', 320 | // // name: 'burger1', 321 | // // price: 12, 322 | // // ), 323 | // // bottonContainer( 324 | // // image: 'images/2.png', 325 | // // name: 'burger1', 326 | // // price: 12, 327 | // // ), 328 | // // bottonContainer( 329 | // // image: 'images/2.png', 330 | // // name: 'burger1', 331 | // // price: 12, 332 | // // ), 333 | // // bottonContainer( 334 | // // image: 'images/2.png', 335 | // // name: 'burger1', 336 | // // price: 12, 337 | // // ), 338 | // ], 339 | ), 340 | ) 341 | ], 342 | ), 343 | ); 344 | } 345 | } 346 | -------------------------------------------------------------------------------- /lib/screen/login_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:firebase_auth/firebase_auth.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:foodapp/screen/widget/my_text_field.dart'; 4 | 5 | class LoginPage extends StatefulWidget { 6 | static Pattern pattern = 7 | r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; 8 | @override 9 | _LoginPageState createState() => _LoginPageState(); 10 | } 11 | 12 | class _LoginPageState extends State { 13 | bool loadding = false; 14 | RegExp regExp = RegExp(LoginPage.pattern); 15 | GlobalKey globalKey = GlobalKey(); 16 | UserCredential userCredential; 17 | TextEditingController email = TextEditingController(); 18 | TextEditingController password = TextEditingController(); 19 | 20 | Future loginAuth() async { 21 | try { 22 | userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword( 23 | email: email.text, password: password.text); 24 | } on FirebaseAuthException catch (e) { 25 | if (e.code == 'user-not-found') { 26 | globalKey.currentState.showSnackBar( 27 | SnackBar( 28 | content: Text('No user found for that email.'), 29 | ), 30 | ); 31 | } else if (e.code == 'wrong-password') { 32 | globalKey.currentState.showSnackBar( 33 | SnackBar( 34 | content: Text('Wrong password provided for that user.'), 35 | ), 36 | ); 37 | setState(() { 38 | loadding = false; 39 | }); 40 | } 41 | setState(() { 42 | loadding = false; 43 | }); 44 | } 45 | } 46 | 47 | void validation() { 48 | if (email.text.trim().isEmpty || 49 | email.text.trim() == null && password.text.trim().isEmpty || 50 | password.text.trim() == null) { 51 | globalKey.currentState.showSnackBar( 52 | SnackBar( 53 | content: Text("All Field is Empty"), 54 | ), 55 | ); 56 | } 57 | if (email.text.trim().isEmpty || email.text.trim() == null) { 58 | globalKey.currentState.showSnackBar( 59 | SnackBar( 60 | content: Text("Email is Empty"), 61 | ), 62 | ); 63 | return; 64 | } else if (!regExp.hasMatch(email.text)) { 65 | globalKey.currentState.showSnackBar( 66 | SnackBar( 67 | content: Text( 68 | "Please enter vaild Email", 69 | ), 70 | ), 71 | ); 72 | return; 73 | } 74 | if (password.text.trim().isEmpty || password.text.trim() == null) { 75 | globalKey.currentState.showSnackBar( 76 | SnackBar( 77 | content: Text("Password is Empty"), 78 | ), 79 | ); 80 | return; 81 | } else { 82 | setState(() { 83 | loadding = true; 84 | }); 85 | loginAuth(); 86 | } 87 | } 88 | 89 | @override 90 | Widget build(BuildContext context) { 91 | return Scaffold( 92 | key: globalKey, 93 | backgroundColor: Colors.black, 94 | appBar: AppBar( 95 | backgroundColor: Colors.black, 96 | leading: IconButton( 97 | icon: Icon( 98 | Icons.arrow_back_ios, 99 | color: Colors.white, 100 | ), 101 | onPressed: () {}), 102 | ), 103 | body: Container( 104 | margin: EdgeInsets.symmetric(horizontal: 50), 105 | child: Column( 106 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 107 | crossAxisAlignment: CrossAxisAlignment.center, 108 | children: [ 109 | Padding( 110 | padding: const EdgeInsets.only(right: 170), 111 | child: Text( 112 | "Login In", 113 | style: TextStyle( 114 | color: Colors.white, 115 | fontSize: 40, 116 | fontWeight: FontWeight.bold, 117 | ), 118 | ), 119 | ), 120 | Column( 121 | children: [ 122 | MyTextField( 123 | controller: email, 124 | obscureText: false, 125 | hintText: 'Email', 126 | ), 127 | SizedBox( 128 | height: 30, 129 | ), 130 | MyTextField( 131 | controller: password, 132 | obscureText: true, 133 | hintText: 'Password', 134 | ), 135 | ], 136 | ), 137 | loadding 138 | ? CircularProgressIndicator() 139 | : Container( 140 | height: 60, 141 | width: 200, 142 | child: RaisedButton( 143 | color: Colors.red, 144 | shape: RoundedRectangleBorder( 145 | borderRadius: BorderRadius.circular(30)), 146 | onPressed: () { 147 | validation(); 148 | }, 149 | child: Text( 150 | "Login", 151 | style: TextStyle(color: Colors.white, fontSize: 20), 152 | ), 153 | ), 154 | ), 155 | Row( 156 | mainAxisAlignment: MainAxisAlignment.center, 157 | children: [ 158 | Text( 159 | "New user?", 160 | style: TextStyle(color: Colors.grey), 161 | ), 162 | Text( 163 | "Register now.", 164 | style: TextStyle(color: Colors.red), 165 | ) 166 | ], 167 | ) 168 | ], 169 | ), 170 | ), 171 | ); 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /lib/screen/sign_up.dart: -------------------------------------------------------------------------------- 1 | import 'package:cloud_firestore/cloud_firestore.dart'; 2 | import 'package:firebase_auth/firebase_auth.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:foodapp/screen/widget/my_text_field.dart'; 5 | 6 | class SignUp extends StatefulWidget { 7 | static Pattern pattern = 8 | r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$'; 9 | @override 10 | _SignUpState createState() => _SignUpState(); 11 | } 12 | class _SignUpState extends State { 13 | bool loading=false; 14 | UserCredential userCredential; 15 | RegExp regExp = RegExp(SignUp.pattern); 16 | TextEditingController firstName = TextEditingController(); 17 | TextEditingController lastName = TextEditingController(); 18 | TextEditingController email = TextEditingController(); 19 | TextEditingController password = TextEditingController(); 20 | GlobalKey globalKey = GlobalKey(); 21 | 22 | Future sendData() async { 23 | try { 24 | userCredential = 25 | await FirebaseAuth.instance.createUserWithEmailAndPassword( 26 | email: email.text, 27 | password: password.text, 28 | ); 29 | await FirebaseFirestore.instance 30 | .collection('userData') 31 | .doc(userCredential.user.uid) 32 | .set({ 33 | "firstName": firstName.text.trim(), 34 | "lastName": lastName.text.trim(), 35 | "email": email.text.trim(), 36 | "userid": userCredential.user.uid, 37 | "password": password.text.trim(), 38 | }); 39 | } on FirebaseAuthException catch (e) { 40 | if (e.code == 'weak-password') { 41 | globalKey.currentState.showSnackBar( 42 | SnackBar( 43 | content: Text("The password provided is too weak."), 44 | ), 45 | ); 46 | } else if (e.code == 'email-already-in-use') { 47 | globalKey.currentState.showSnackBar( 48 | SnackBar( 49 | content: Text("The account already exists for that email"), 50 | ), 51 | ); 52 | } 53 | } catch (e) { 54 | globalKey.currentState.showSnackBar( 55 | SnackBar( 56 | content: Text(e), 57 | ), 58 | ); 59 | setState(() { 60 | loading=false; 61 | }); 62 | } 63 | setState(() { 64 | loading=false; 65 | }); 66 | } 67 | 68 | void validation() { 69 | if (firstName.text.trim().isEmpty || firstName.text.trim() == null) { 70 | globalKey.currentState.showSnackBar( 71 | SnackBar( 72 | content: Text( 73 | "firstName is Empty", 74 | ), 75 | ), 76 | ); 77 | return; 78 | } 79 | if (lastName.text.trim().isEmpty || lastName.text.trim() == null) { 80 | globalKey.currentState.showSnackBar( 81 | SnackBar( 82 | content: Text( 83 | "lastName is Empty", 84 | ), 85 | ), 86 | ); 87 | return; 88 | } 89 | if (email.text.trim().isEmpty || email.text.trim() == null) { 90 | globalKey.currentState.showSnackBar( 91 | SnackBar( 92 | content: Text( 93 | "Email is Empty", 94 | ), 95 | ), 96 | ); 97 | return; 98 | } else if (!regExp.hasMatch(email.text)) { 99 | globalKey.currentState.showSnackBar( 100 | SnackBar( 101 | content: Text( 102 | "Please enter vaild Email", 103 | ), 104 | ), 105 | ); 106 | return; 107 | } 108 | if (password.text.trim().isEmpty || password.text.trim() == null) { 109 | globalKey.currentState.showSnackBar( 110 | SnackBar( 111 | content: Text( 112 | "Password is Empty", 113 | ), 114 | ), 115 | ); 116 | return; 117 | } else { 118 | setState(() { 119 | loading=true; 120 | }); 121 | sendData(); 122 | } 123 | } 124 | 125 | Widget button( 126 | {@required String buttonName, 127 | @required Color color, 128 | @required Color textColor, 129 | @required Function ontap}) { 130 | return Container( 131 | width: 120, 132 | child: RaisedButton( 133 | color: color, 134 | shape: RoundedRectangleBorder( 135 | borderRadius: BorderRadius.circular(30), 136 | ), 137 | child: Text( 138 | buttonName, 139 | style: TextStyle(fontSize: 20, color: textColor), 140 | ), 141 | onPressed: ontap, 142 | ), 143 | ); 144 | } 145 | 146 | @override 147 | Widget build(BuildContext context) { 148 | return Scaffold( 149 | key: globalKey, 150 | backgroundColor: Colors.black, 151 | body: SafeArea( 152 | child: Container( 153 | margin: EdgeInsets.symmetric(horizontal: 50), 154 | child: Column( 155 | crossAxisAlignment: CrossAxisAlignment.start, 156 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 157 | children: [ 158 | Text( 159 | "Sign Up", 160 | style: TextStyle( 161 | color: Colors.white, 162 | fontWeight: FontWeight.bold, 163 | fontSize: 40, 164 | ), 165 | ), 166 | Container( 167 | height: 300, 168 | child: Column( 169 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 170 | children: [ 171 | MyTextField( 172 | controller: firstName, 173 | obscureText: false, 174 | hintText: 'fistName', 175 | ), 176 | MyTextField( 177 | controller: lastName, 178 | obscureText: false, 179 | hintText: 'lastName', 180 | ), 181 | MyTextField( 182 | controller: email, 183 | obscureText: false, 184 | hintText: 'Email', 185 | ), 186 | MyTextField( 187 | controller: password, 188 | obscureText: true, 189 | hintText: 'password', 190 | ) 191 | ], 192 | ), 193 | ), 194 | loading?Row( 195 | mainAxisAlignment: MainAxisAlignment.center, 196 | children: [ 197 | CircularProgressIndicator(), 198 | ], 199 | ) 200 | : 201 | Row( 202 | mainAxisAlignment: MainAxisAlignment.center, 203 | children: [ 204 | button( 205 | ontap: () {}, 206 | buttonName: "Canel", 207 | color: Colors.grey, 208 | textColor: Colors.black, 209 | ), 210 | SizedBox( 211 | width: 10, 212 | ), 213 | button( 214 | ontap: () { 215 | validation(); 216 | }, 217 | buttonName: "Register", 218 | color: Colors.red, 219 | textColor: Colors.white, 220 | ), 221 | ], 222 | ) 223 | ], 224 | ), 225 | ), 226 | ), 227 | ); 228 | } 229 | } 230 | -------------------------------------------------------------------------------- /lib/screen/welcome_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WelcomePage extends StatelessWidget { 4 | Widget button({ 5 | @required String name, 6 | Color color, 7 | Color textColor 8 | }) { 9 | return Container( 10 | height: 45, 11 | width: 300, 12 | child: RaisedButton( 13 | color: color, 14 | shape: RoundedRectangleBorder( 15 | side: BorderSide(color: Colors.green,width: 2), 16 | borderRadius: BorderRadius.circular(30), 17 | ), 18 | onPressed: () {}, 19 | child: Text( 20 | name, 21 | style: TextStyle(color: textColor), 22 | ), 23 | ), 24 | ); 25 | } 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | return Scaffold( 30 | body: Column( 31 | children: [ 32 | Expanded( 33 | child: Container( 34 | child: Center( 35 | child: Image.asset('images/logo.jpg'), 36 | ), 37 | ), 38 | ), 39 | Expanded( 40 | child: Container( 41 | child: Column( 42 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 43 | children: [ 44 | Text( 45 | "Welcome To Tastee", 46 | style: TextStyle( 47 | fontSize: 30, 48 | fontWeight: FontWeight.bold, 49 | color: Colors.green, 50 | ), 51 | ), 52 | Column( 53 | children: [ 54 | Text("Order food form our restaueant and"), 55 | Text("Make reservation in real- time") 56 | ], 57 | ), 58 | button(name: 'Login', color: Colors.green,textColor: Colors.white), 59 | button(name: 'SignUp', color: Colors.white,textColor: Colors.green), 60 | ], 61 | ), 62 | ), 63 | ) 64 | ], 65 | ), 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/screen/widget/bottom_Contianer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | class BottomContainer extends StatelessWidget { 3 | final String image; 4 | final String name; 5 | final int price; 6 | final Function onTap; 7 | BottomContainer({@required this. onTap,@required this. image, @required this. price, @required this.name}); 8 | @override 9 | Widget build(BuildContext context) { 10 | return GestureDetector( 11 | onTap:onTap , 12 | child: Container( 13 | height: 270, 14 | width: 220, 15 | decoration: BoxDecoration( 16 | color: Color(0xff3a3e3e), borderRadius: BorderRadius.circular(20)), 17 | child: Column( 18 | mainAxisAlignment: MainAxisAlignment.center, 19 | children: [ 20 | CircleAvatar( 21 | radius: 60, 22 | backgroundImage: NetworkImage(image), 23 | ), 24 | ListTile( 25 | leading: Text( 26 | name, 27 | style: TextStyle(fontSize: 20, color: Colors.white), 28 | ), 29 | trailing: Text( 30 | "\$ $price", 31 | style: TextStyle( 32 | fontSize: 20, 33 | color: Colors.white, 34 | ), 35 | ), 36 | ), 37 | Padding( 38 | padding: const EdgeInsets.only(left: 12), 39 | child: Row( 40 | children: [ 41 | Icon( 42 | Icons.star, 43 | size: 20, 44 | color: Colors.white, 45 | ), 46 | Icon( 47 | Icons.star, 48 | size: 20, 49 | color: Colors.white, 50 | ), 51 | Icon( 52 | Icons.star, 53 | size: 20, 54 | color: Colors.white, 55 | ), 56 | Icon( 57 | Icons.star, 58 | size: 20, 59 | color: Colors.white, 60 | ), 61 | Icon( 62 | Icons.star, 63 | size: 20, 64 | color: Colors.white, 65 | ) 66 | ], 67 | ), 68 | ) 69 | ], 70 | ), 71 | ), 72 | ); 73 | } 74 | } -------------------------------------------------------------------------------- /lib/screen/widget/my_text_field.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | class MyTextField extends StatelessWidget { 3 | final String hintText; 4 | final bool obscureText; 5 | final TextEditingController controller; 6 | MyTextField({@required this.hintText,this.obscureText,@required this.controller}); 7 | @override 8 | Widget build(BuildContext context) { 9 | return TextFormField( 10 | controller: controller, 11 | obscureText: obscureText, 12 | style: TextStyle(color: Colors.white), 13 | decoration: InputDecoration( 14 | hintText: hintText, 15 | hintStyle: TextStyle(color: Colors.white), 16 | enabledBorder: UnderlineInputBorder( 17 | borderSide: BorderSide( 18 | color: Colors.grey, 19 | ), 20 | ), 21 | ), 22 | ); 23 | } 24 | } -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.4.2" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "2.0.0" 18 | characters: 19 | dependency: transitive 20 | description: 21 | name: characters 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.0.0" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.1.3" 32 | clock: 33 | dependency: transitive 34 | description: 35 | name: clock 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.0.1" 39 | cloud_firestore: 40 | dependency: "direct main" 41 | description: 42 | name: cloud_firestore 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "0.14.1+3" 46 | cloud_firestore_platform_interface: 47 | dependency: transitive 48 | description: 49 | name: cloud_firestore_platform_interface 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "2.1.2" 53 | cloud_firestore_web: 54 | dependency: transitive 55 | description: 56 | name: cloud_firestore_web 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "0.2.0+4" 60 | collection: 61 | dependency: transitive 62 | description: 63 | name: collection 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "1.14.13" 67 | cupertino_icons: 68 | dependency: "direct main" 69 | description: 70 | name: cupertino_icons 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "0.1.3" 74 | fake_async: 75 | dependency: transitive 76 | description: 77 | name: fake_async 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "1.1.0" 81 | firebase: 82 | dependency: transitive 83 | description: 84 | name: firebase 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "7.3.2" 88 | firebase_auth: 89 | dependency: "direct main" 90 | description: 91 | name: firebase_auth 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "0.18.1+2" 95 | firebase_auth_platform_interface: 96 | dependency: transitive 97 | description: 98 | name: firebase_auth_platform_interface 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "2.1.1" 102 | firebase_auth_web: 103 | dependency: transitive 104 | description: 105 | name: firebase_auth_web 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "0.3.1+1" 109 | firebase_core: 110 | dependency: "direct main" 111 | description: 112 | name: firebase_core 113 | url: "https://pub.dartlang.org" 114 | source: hosted 115 | version: "0.5.0+1" 116 | firebase_core_platform_interface: 117 | dependency: transitive 118 | description: 119 | name: firebase_core_platform_interface 120 | url: "https://pub.dartlang.org" 121 | source: hosted 122 | version: "2.0.0" 123 | firebase_core_web: 124 | dependency: transitive 125 | description: 126 | name: firebase_core_web 127 | url: "https://pub.dartlang.org" 128 | source: hosted 129 | version: "0.2.0" 130 | firebase_storage: 131 | dependency: "direct main" 132 | description: 133 | name: firebase_storage 134 | url: "https://pub.dartlang.org" 135 | source: hosted 136 | version: "4.0.1" 137 | flutter: 138 | dependency: "direct main" 139 | description: flutter 140 | source: sdk 141 | version: "0.0.0" 142 | flutter_test: 143 | dependency: "direct dev" 144 | description: flutter 145 | source: sdk 146 | version: "0.0.0" 147 | flutter_web_plugins: 148 | dependency: transitive 149 | description: flutter 150 | source: sdk 151 | version: "0.0.0" 152 | http: 153 | dependency: transitive 154 | description: 155 | name: http 156 | url: "https://pub.dartlang.org" 157 | source: hosted 158 | version: "0.12.2" 159 | http_parser: 160 | dependency: transitive 161 | description: 162 | name: http_parser 163 | url: "https://pub.dartlang.org" 164 | source: hosted 165 | version: "3.1.4" 166 | intl: 167 | dependency: transitive 168 | description: 169 | name: intl 170 | url: "https://pub.dartlang.org" 171 | source: hosted 172 | version: "0.16.1" 173 | js: 174 | dependency: transitive 175 | description: 176 | name: js 177 | url: "https://pub.dartlang.org" 178 | source: hosted 179 | version: "0.6.2" 180 | matcher: 181 | dependency: transitive 182 | description: 183 | name: matcher 184 | url: "https://pub.dartlang.org" 185 | source: hosted 186 | version: "0.12.8" 187 | meta: 188 | dependency: transitive 189 | description: 190 | name: meta 191 | url: "https://pub.dartlang.org" 192 | source: hosted 193 | version: "1.1.8" 194 | nested: 195 | dependency: transitive 196 | description: 197 | name: nested 198 | url: "https://pub.dartlang.org" 199 | source: hosted 200 | version: "0.0.4" 201 | path: 202 | dependency: transitive 203 | description: 204 | name: path 205 | url: "https://pub.dartlang.org" 206 | source: hosted 207 | version: "1.7.0" 208 | pedantic: 209 | dependency: transitive 210 | description: 211 | name: pedantic 212 | url: "https://pub.dartlang.org" 213 | source: hosted 214 | version: "1.9.0" 215 | plugin_platform_interface: 216 | dependency: transitive 217 | description: 218 | name: plugin_platform_interface 219 | url: "https://pub.dartlang.org" 220 | source: hosted 221 | version: "1.0.3" 222 | provider: 223 | dependency: "direct main" 224 | description: 225 | name: provider 226 | url: "https://pub.dartlang.org" 227 | source: hosted 228 | version: "4.3.2+2" 229 | quiver: 230 | dependency: transitive 231 | description: 232 | name: quiver 233 | url: "https://pub.dartlang.org" 234 | source: hosted 235 | version: "2.1.3" 236 | sky_engine: 237 | dependency: transitive 238 | description: flutter 239 | source: sdk 240 | version: "0.0.99" 241 | source_span: 242 | dependency: transitive 243 | description: 244 | name: source_span 245 | url: "https://pub.dartlang.org" 246 | source: hosted 247 | version: "1.7.0" 248 | stack_trace: 249 | dependency: transitive 250 | description: 251 | name: stack_trace 252 | url: "https://pub.dartlang.org" 253 | source: hosted 254 | version: "1.9.5" 255 | stream_channel: 256 | dependency: transitive 257 | description: 258 | name: stream_channel 259 | url: "https://pub.dartlang.org" 260 | source: hosted 261 | version: "2.0.0" 262 | string_scanner: 263 | dependency: transitive 264 | description: 265 | name: string_scanner 266 | url: "https://pub.dartlang.org" 267 | source: hosted 268 | version: "1.0.5" 269 | term_glyph: 270 | dependency: transitive 271 | description: 272 | name: term_glyph 273 | url: "https://pub.dartlang.org" 274 | source: hosted 275 | version: "1.1.0" 276 | test_api: 277 | dependency: transitive 278 | description: 279 | name: test_api 280 | url: "https://pub.dartlang.org" 281 | source: hosted 282 | version: "0.2.17" 283 | typed_data: 284 | dependency: transitive 285 | description: 286 | name: typed_data 287 | url: "https://pub.dartlang.org" 288 | source: hosted 289 | version: "1.2.0" 290 | vector_math: 291 | dependency: transitive 292 | description: 293 | name: vector_math 294 | url: "https://pub.dartlang.org" 295 | source: hosted 296 | version: "2.0.8" 297 | sdks: 298 | dart: ">=2.9.0-14.0.dev <3.0.0" 299 | flutter: ">=1.16.0 <2.0.0" 300 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: foodapp 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.7.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | 28 | # The following adds the Cupertino Icons font to your application. 29 | # Use with the CupertinoIcons class for iOS style icons. 30 | cupertino_icons: ^0.1.3 31 | cloud_firestore: ^0.14.1+3 32 | firebase_auth: ^0.18.1+2 33 | firebase_storage: ^4.0.1 34 | firebase_core: ^0.5.0+1 35 | provider: ^4.3.2+2 36 | 37 | dev_dependencies: 38 | flutter_test: 39 | sdk: flutter 40 | 41 | # For information on the generic Dart part of this file, see the 42 | # following page: https://dart.dev/tools/pub/pubspec 43 | 44 | # The following section is specific to Flutter. 45 | flutter: 46 | 47 | # The following line ensures that the Material Icons font is 48 | # included with your application, so that you can use the icons in 49 | # the material Icons class. 50 | uses-material-design: true 51 | 52 | # To add assets to your application, add an assets section, like this: 53 | assets: 54 | - images/ 55 | # - images/a_dot_ham.jpeg 56 | 57 | # An image asset can refer to one or more resolution-specific "variants", see 58 | # https://flutter.dev/assets-and-images/#resolution-aware. 59 | 60 | # For details regarding adding assets from package dependencies, see 61 | # https://flutter.dev/assets-and-images/#from-packages 62 | 63 | # To add custom fonts to your application, add a fonts section here, 64 | # in this "flutter" section. Each entry in this list should have a 65 | # "family" key with the font family name, and a "fonts" key with a 66 | # list giving the asset and other descriptors for the font. For 67 | # example: 68 | # fonts: 69 | # - family: Schyler 70 | # fonts: 71 | # - asset: fonts/Schyler-Regular.ttf 72 | # - asset: fonts/Schyler-Italic.ttf 73 | # style: italic 74 | # - family: Trajan Pro 75 | # fonts: 76 | # - asset: fonts/TrajanPro.ttf 77 | # - asset: fonts/TrajanPro_Bold.ttf 78 | # weight: 700 79 | # 80 | # For details regarding fonts from package dependencies, 81 | # see https://flutter.dev/custom-fonts/#from-packages 82 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:foodapp/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | --------------------------------------------------------------------------------