├── .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 | 
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 |
--------------------------------------------------------------------------------