├── ios ├── Runner │ ├── Runner-Bridging-Header.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── 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-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard │ └── Info.plist ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── WorkspaceSettings.xcsettings │ │ │ └── IDEWorkspaceChecks.plist │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── RunnerTests │ └── RunnerTests.swift ├── .gitignore ├── Podfile.lock └── Podfile ├── assets ├── cereal.png ├── output.gif ├── spag.png ├── steak.png ├── veggies.png └── screenshot.png ├── android ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── 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 │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── values │ │ │ │ │ └── styles.xml │ │ │ │ └── values-night │ │ │ │ │ └── styles.xml │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── example │ │ │ │ │ └── food_animation │ │ │ │ │ └── MainActivity.kt │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── build.gradle └── settings.gradle ├── lib ├── utils │ ├── helper.dart │ └── food_details.dart ├── models │ └── box_content.dart ├── painters │ └── circles_painter.dart ├── main.dart ├── widgets │ ├── tags.dart │ ├── search.dart │ ├── categories.dart │ └── food_box.dart └── views │ ├── food_detail_view.dart │ └── home_view.dart ├── .gitignore ├── test └── widget_test.dart ├── analysis_options.yaml ├── README.md ├── .metadata ├── pubspec.yaml └── pubspec.lock /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /assets/cereal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/cereal.png -------------------------------------------------------------------------------- /assets/output.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/output.gif -------------------------------------------------------------------------------- /assets/spag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/spag.png -------------------------------------------------------------------------------- /assets/steak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/steak.png -------------------------------------------------------------------------------- /assets/veggies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/veggies.png -------------------------------------------------------------------------------- /assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/assets/screenshot.png -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /lib/utils/helper.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | class Helper { 4 | static double degreeToRadian(double degree) { 5 | return degree * pi / 180; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/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/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeleonufavour/food_store_ui/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /lib/models/box_content.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BoxContent { 4 | String asset; 5 | Color color; 6 | 7 | BoxContent({required this.asset, required this.color}); 8 | } 9 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/food_animation/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.food_animation 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip 6 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /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/to/reference-keystore 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /ios/Runner.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/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | } 6 | } 7 | 8 | rootProject.buildDir = "../build" 9 | subprojects { 10 | project.buildDir = "${rootProject.buildDir}/${project.name}" 11 | } 12 | subprojects { 13 | project.evaluationDependsOn(":app") 14 | } 15 | 16 | tasks.register("clean", Delete) { 17 | delete rootProject.buildDir 18 | } 19 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | 4 | @main 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 | -------------------------------------------------------------------------------- /lib/utils/food_details.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:food_animation/widgets/categories.dart'; 3 | import 'package:food_animation/widgets/search.dart'; 4 | import 'package:food_animation/widgets/tags.dart'; 5 | 6 | List foodDetailsWidget(BuildContext context) => [ 7 | SizedBox( 8 | height: MediaQuery.sizeOf(context).height * 0.25, 9 | ), 10 | // category 11 | Categories(), 12 | RecentSearch(), 13 | Tags() 14 | ]; 15 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /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/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | def flutterSdkPath = { 3 | def properties = new Properties() 4 | file("local.properties").withInputStream { properties.load(it) } 5 | def flutterSdkPath = properties.getProperty("flutter.sdk") 6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 7 | return flutterSdkPath 8 | }() 9 | 10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") 11 | 12 | repositories { 13 | google() 14 | mavenCentral() 15 | gradlePluginPortal() 16 | } 17 | } 18 | 19 | plugins { 20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0" 21 | id "com.android.application" version "7.3.0" apply false 22 | id "org.jetbrains.kotlin.android" version "1.7.10" apply false 23 | } 24 | 25 | include ":app" 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .pub-cache/ 31 | .pub/ 32 | /build/ 33 | 34 | # Symbolication related 35 | app.*.symbols 36 | 37 | # Obfuscation related 38 | app.*.map.json 39 | 40 | # Android Studio will place build artifacts here 41 | /android/app/debug 42 | /android/app/profile 43 | /android/app/release 44 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - path_provider_foundation (0.0.1): 4 | - Flutter 5 | - FlutterMacOS 6 | - sqflite_darwin (0.0.4): 7 | - Flutter 8 | - FlutterMacOS 9 | 10 | DEPENDENCIES: 11 | - Flutter (from `Flutter`) 12 | - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) 13 | - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) 14 | 15 | EXTERNAL SOURCES: 16 | Flutter: 17 | :path: Flutter 18 | path_provider_foundation: 19 | :path: ".symlinks/plugins/path_provider_foundation/darwin" 20 | sqflite_darwin: 21 | :path: ".symlinks/plugins/sqflite_darwin/darwin" 22 | 23 | SPEC CHECKSUMS: 24 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 25 | path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 26 | sqflite_darwin: a553b1fd6fe66f53bbb0fe5b4f5bab93f08d7a13 27 | 28 | PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796 29 | 30 | COCOAPODS: 1.15.2 31 | -------------------------------------------------------------------------------- /lib/painters/circles_painter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CirclesPainter extends CustomPainter { 4 | final Color baseColor; 5 | 6 | CirclesPainter(this.baseColor); 7 | 8 | @override 9 | void paint(Canvas canvas, Size size) { 10 | final paint = Paint() 11 | ..style = PaintingStyle.stroke 12 | ..strokeWidth = 10.0 13 | ..color = baseColor.withOpacity(0.2); 14 | 15 | List centers = [ 16 | Offset(size.width / 5, size.height / 2), 17 | Offset(size.width * 0.8, size.height * 0.6), 18 | Offset(size.width * 0.2, size.height * 0.9), 19 | ]; 20 | final maxRadius = 21 | size.width < size.height ? size.width / 2 : size.height / 2; 22 | 23 | for (int i = 0; i < centers.length; i++) { 24 | canvas.drawCircle( 25 | centers[i], 26 | maxRadius * (1 / 5), 27 | paint, 28 | ); 29 | } 30 | } 31 | 32 | @override 33 | bool shouldRepaint(CustomPainter oldDelegate) => false; 34 | } 35 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /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 in the flutter_test package. 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:food_animation/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(const 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 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at https://dart.dev/lints. 17 | # 18 | # Instead of disabling a lint rule for the entire project in the 19 | # section below, it can also be suppressed for a single line of code 20 | # or a specific dart file by using the `// ignore: name_of_lint` and 21 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 22 | # producing the lint. 23 | rules: 24 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 25 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 26 | 27 | # Additional information about this file can be found at 28 | # https://dart.dev/guides/language/analysis-options 29 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id "com.android.application" 3 | id "kotlin-android" 4 | // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. 5 | id "dev.flutter.flutter-gradle-plugin" 6 | } 7 | 8 | android { 9 | namespace = "com.example.food_animation" 10 | compileSdk = flutter.compileSdkVersion 11 | ndkVersion = flutter.ndkVersion 12 | 13 | compileOptions { 14 | sourceCompatibility = JavaVersion.VERSION_1_8 15 | targetCompatibility = JavaVersion.VERSION_1_8 16 | } 17 | 18 | kotlinOptions { 19 | jvmTarget = JavaVersion.VERSION_1_8 20 | } 21 | 22 | defaultConfig { 23 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 24 | applicationId = "com.example.food_animation" 25 | // You can update the following values to match your application needs. 26 | // For more information, see: https://flutter.dev/to/review-gradle-config. 27 | minSdk = flutter.minSdkVersion 28 | targetSdk = flutter.targetSdkVersion 29 | versionCode = flutter.versionCode 30 | versionName = flutter.versionName 31 | } 32 | 33 | buildTypes { 34 | release { 35 | // TODO: Add your own signing config for the release build. 36 | // Signing with the debug keys for now, so `flutter run --release` works. 37 | signingConfig = signingConfigs.debug 38 | } 39 | } 40 | } 41 | 42 | flutter { 43 | source = "../.." 44 | } 45 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '12.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | target 'RunnerTests' do 36 | inherit! :search_paths 37 | end 38 | end 39 | 40 | post_install do |installer| 41 | installer.pods_project.targets.each do |target| 42 | flutter_additional_ios_build_settings(target) 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:food_animation/views/food_detail_view.dart'; 3 | import 'package:food_animation/views/home_view.dart'; 4 | 5 | void main() { 6 | runApp(const MyApp()); 7 | } 8 | 9 | class MyApp extends StatelessWidget { 10 | const MyApp({super.key}); 11 | 12 | // This widget is the root of your application. 13 | @override 14 | Widget build(BuildContext context) { 15 | return MaterialApp( 16 | title: 'Flutter Demo', 17 | theme: ThemeData( 18 | // This is the theme of your application. 19 | // 20 | // TRY THIS: Try running your application with "flutter run". You'll see 21 | // the application has a purple toolbar. Then, without quitting the app, 22 | // try changing the seedColor in the colorScheme below to Colors.green 23 | // and then invoke "hot reload" (save your changes or press the "hot 24 | // reload" button in a Flutter-supported IDE, or press "r" if you used 25 | // the command line to start the app). 26 | // 27 | // Notice that the counter didn't reset back to zero; the application 28 | // state is not lost during the reload. To reset the state, use hot 29 | // restart instead. 30 | // 31 | // This works for code too, not just values: Most code changes can be 32 | // tested with just a hot reload. 33 | colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), 34 | useMaterial3: true, 35 | ), 36 | home: HomeView()); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Food Animation UI 2 | 3 | 4 | 5 | 6 | 7 | ## User Interface 8 | 9 |

10 | 11 | 12 |

13 | 14 | 15 | ## Getting Started 16 | 17 | ### Prerequisites 18 | 19 | - Flutter (Latest Version) 20 | - Dart SDK 21 | - Android Studio / VS Code 22 | 23 | ### Installation 24 | 25 | 1. Clone the repository 26 | 27 | ```bash 28 | git clone https://github.com/emeleonufavour/food_store_ui.git 29 | ``` 30 | 31 | 2. Navigate to project directory 32 | 33 | ```bash 34 | cd projectname 35 | ``` 36 | 37 | 3. Install dependencies 38 | 39 | ```bash 40 | flutter pub get 41 | ``` 42 | 43 | 4. Run the app 44 | ```bash 45 | flutter run 46 | ``` 47 | 48 | ## Contributing 49 | 50 | Contributions are welcome! Please feel free to submit a Pull Request. 51 | 52 | This project is a starting point for a Flutter application. 53 | 54 | A few resources to get you started if this is your first Flutter project: 55 | 56 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 57 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 58 | 59 | For help getting started with Flutter development, view the 60 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 61 | samples, guidance on mobile development, and a full API reference. 62 | -------------------------------------------------------------------------------- /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 | CFBundleDisplayName 8 | Food Animation 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | food_animation 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | CADisableMinimumFrameDurationOnPhone 45 | 46 | UIApplicationSupportsIndirectInputEvents 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /.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: "80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819" 8 | channel: "stable" 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 17 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 18 | - platform: android 19 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 20 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 21 | - platform: ios 22 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 23 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 24 | - platform: linux 25 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 26 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 27 | - platform: macos 28 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 29 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 30 | - platform: web 31 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 32 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 33 | - platform: windows 34 | create_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 35 | base_revision: 80c2e84975bbd28ecf5f8d4bd4ca5a2490bfc819 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 15 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /lib/widgets/tags.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_animate/flutter_animate.dart'; 4 | import 'package:food_animation/views/food_detail_view.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | 7 | class Tags extends StatelessWidget { 8 | const Tags({super.key}); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return Column( 13 | crossAxisAlignment: CrossAxisAlignment.start, 14 | children: [ 15 | Text( 16 | "TAG", 17 | style: 18 | GoogleFonts.lato(color: Colors.grey, fontWeight: FontWeight.bold), 19 | ), 20 | const SizedBox( 21 | height: 10, 22 | ), 23 | Wrap( 24 | children: [ 25 | const Icon( 26 | CupertinoIcons.add_circled_solid, 27 | color: Colors.white, 28 | ), 29 | const SizedBox( 30 | width: 10, 31 | ), 32 | ...tags.map((e) { 33 | int index = tags.indexOf(e); 34 | return Container( 35 | margin: const EdgeInsets.only(bottom: 10, right: 10), 36 | padding: const EdgeInsets.symmetric( 37 | vertical: 5, 38 | horizontal: 13, 39 | ), 40 | decoration: BoxDecoration( 41 | borderRadius: BorderRadius.circular(16), 42 | color: e["isSelected"] == false 43 | ? const Color(0xff444c59) 44 | : const Color(0xfffb5151)), 45 | child: Text( 46 | e["name"], 47 | style: GoogleFonts.lato(color: Colors.white), 48 | ), 49 | ) 50 | .animate() 51 | .slideY( 52 | begin: 5, 53 | duration: Duration( 54 | milliseconds: 400 * (index + 1), 55 | ), 56 | curve: Curves.easeOut, 57 | ) 58 | .fadeIn( 59 | begin: 0.1, 60 | delay: Duration( 61 | milliseconds: 200 * (index + 1), 62 | ), 63 | ); 64 | }) 65 | ], 66 | ) 67 | ], 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/widgets/search.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_animate/flutter_animate.dart'; 3 | import 'package:food_animation/views/food_detail_view.dart'; 4 | import 'package:google_fonts/google_fonts.dart'; 5 | 6 | class RecentSearch extends StatelessWidget { 7 | const RecentSearch({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | final size = MediaQuery.sizeOf(context); 12 | return Column( 13 | crossAxisAlignment: CrossAxisAlignment.start, 14 | children: [ 15 | Text( 16 | "RECENT SEARCH", 17 | style: 18 | GoogleFonts.lato(color: Colors.grey, fontWeight: FontWeight.bold), 19 | ), 20 | const SizedBox( 21 | height: 30, 22 | ), 23 | SizedBox( 24 | height: size.height * 0.25, 25 | child: ListView.builder( 26 | itemCount: searches.length, 27 | scrollDirection: Axis.horizontal, 28 | itemBuilder: (context, index) { 29 | return Padding( 30 | padding: const EdgeInsets.only(right: 15.0), 31 | child: Column( 32 | children: [ 33 | Container( 34 | padding: const EdgeInsets.all(15), 35 | width: size.width * 0.28, 36 | height: size.height * 0.16, 37 | decoration: BoxDecoration( 38 | gradient: RadialGradient( 39 | center: Alignment.center, 40 | colors: [ 41 | Color.lerp( 42 | searches[index]["color"], Colors.white, 0.1)!, 43 | searches[index]["color"], 44 | Color.lerp( 45 | searches[index]["color"], Colors.black, 0.1)!, 46 | ], 47 | ), 48 | borderRadius: BorderRadius.circular(8), 49 | ), 50 | ), 51 | const SizedBox( 52 | height: 10, 53 | ), 54 | Text( 55 | searches[index]["name"], 56 | style: GoogleFonts.lato( 57 | color: Colors.grey, fontWeight: FontWeight.bold), 58 | ), 59 | ], 60 | ), 61 | ) 62 | .animate() 63 | .slideY( 64 | begin: 5, 65 | duration: Duration( 66 | milliseconds: 400 * (index + 1), 67 | ), 68 | curve: Curves.easeOut, 69 | ) 70 | .fadeIn( 71 | begin: 0.1, 72 | delay: Duration( 73 | milliseconds: 200 * (index + 1), 74 | ), 75 | ); 76 | }), 77 | ), 78 | ], 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/widgets/categories.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_animate/flutter_animate.dart'; 3 | import 'package:food_animation/views/food_detail_view.dart'; 4 | import 'package:google_fonts/google_fonts.dart'; 5 | 6 | List categoryWidgets() => []; 7 | 8 | class Categories extends StatefulWidget { 9 | const Categories({super.key}); 10 | 11 | @override 12 | State createState() => _CategoriesState(); 13 | } 14 | 15 | class _CategoriesState extends State { 16 | @override 17 | void initState() { 18 | // TODO: implement initState 19 | super.initState(); 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | final size = MediaQuery.sizeOf(context); 25 | return Column( 26 | crossAxisAlignment: CrossAxisAlignment.start, 27 | children: [ 28 | Text( 29 | "CATEGORY", 30 | style: 31 | GoogleFonts.lato(color: Colors.grey, fontWeight: FontWeight.bold), 32 | ), 33 | const SizedBox( 34 | height: 10, 35 | ), 36 | SizedBox( 37 | height: size.height * 0.2, 38 | child: Wrap( 39 | children: [ 40 | ...categories.map((e) { 41 | int index = categories.indexOf(e); 42 | return Padding( 43 | padding: const EdgeInsets.only(right: 17.0), 44 | child: Column( 45 | children: [ 46 | Container( 47 | padding: const EdgeInsets.all(45), 48 | decoration: BoxDecoration( 49 | color: categories[index]["color"], 50 | shape: BoxShape.circle), 51 | child: const Text(" "), 52 | ), 53 | // food and price 54 | Column( 55 | children: [ 56 | Text( 57 | categories[index]["name"], 58 | style: GoogleFonts.lato(color: Colors.white), 59 | ), 60 | RichText( 61 | text: TextSpan(children: [ 62 | TextSpan( 63 | text: "\$${categories[index]["price"]}", 64 | style: GoogleFonts.lato( 65 | color: const Color(0xfffb5151), 66 | fontWeight: FontWeight.bold)), 67 | TextSpan( 68 | text: "/kg", 69 | style: GoogleFonts.lato(color: Colors.grey)) 70 | ])) 71 | ], 72 | ), 73 | ], 74 | ), 75 | ) 76 | .animate() 77 | .slideY( 78 | begin: 5, 79 | duration: Duration( 80 | milliseconds: 400 * (index + 1), 81 | ), 82 | curve: Curves.easeOut, 83 | ) 84 | .fadeIn( 85 | begin: 0.1, 86 | delay: Duration( 87 | milliseconds: 200 * (index + 1), 88 | ), 89 | ); 90 | }) 91 | ], 92 | ), 93 | ), 94 | ], 95 | ); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /lib/views/food_detail_view.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_animate/flutter_animate.dart'; 3 | import 'package:food_animation/utils/food_details.dart'; 4 | 5 | List> categories = [ 6 | {"name": "Banana", "price": "72.5", "color": const Color(0xffebd04c)}, 7 | {"name": "Turnip", "price": "50.5", "color": const Color(0xfffea9b0)}, 8 | {"name": "Renegade", "price": "40.0", "color": const Color(0xff717ba8)}, 9 | ]; 10 | List> searches = [ 11 | {"name": "ORANGE", "color": const Color(0xfffebf57)}, 12 | { 13 | "name": "GUAVA", 14 | "color": const Color(0xfffd576c), 15 | }, 16 | { 17 | "name": "PEACH", 18 | "color": const Color(0xfffeb2a4), 19 | }, 20 | ]; 21 | List> tags = [ 22 | {"name": "Salad", "isSelected": true}, 23 | {"name": "Vegan", "isSelected": false}, 24 | {"name": "Plum", "isSelected": false}, 25 | {"name": "Green", "isSelected": false}, 26 | {"name": "Meat", "isSelected": false}, 27 | {"name": "Spicy", "isSelected": true}, 28 | {"name": "Cook", "isSelected": false}, 29 | {"name": "Hot", "isSelected": false}, 30 | {"name": "Red", "isSelected": false} 31 | ]; 32 | 33 | class FoodDetailsView extends StatefulWidget { 34 | final String assetName; 35 | const FoodDetailsView({required this.assetName, super.key}); 36 | 37 | @override 38 | State createState() => _FoodDetailsViewState(); 39 | } 40 | 41 | class _FoodDetailsViewState extends State { 42 | List _animatedWidgets = []; 43 | 44 | @override 45 | void initState() { 46 | super.initState(); 47 | WidgetsBinding.instance.addPostFrameCallback((_) { 48 | for (Widget i in foodDetailsWidget(context)) { 49 | setState(() { 50 | _animatedWidgets.add(i); 51 | }); 52 | } 53 | }); 54 | } 55 | 56 | @override 57 | Widget build(BuildContext context) { 58 | final size = MediaQuery.sizeOf(context); 59 | return Scaffold( 60 | backgroundColor: const Color(0xff2f343e), 61 | body: Stack( 62 | children: [ 63 | // Food 64 | Positioned( 65 | top: -(size.height * 0.2), 66 | child: Hero( 67 | tag: widget.assetName, 68 | child: SizedBox( 69 | width: size.width, 70 | child: Image.asset( 71 | filterQuality: FilterQuality.high, 72 | fit: BoxFit.cover, 73 | height: size.width, 74 | widget.assetName), 75 | )), 76 | ), 77 | Padding( 78 | padding: const EdgeInsets.symmetric(horizontal: 16.0), 79 | child: Column( 80 | crossAxisAlignment: CrossAxisAlignment.start, 81 | children: _animatedWidgets 82 | .map((e) => e 83 | .animate() 84 | .slideY( 85 | begin: 5, 86 | duration: Duration( 87 | milliseconds: 88 | 500 * (_animatedWidgets.indexOf(e) + 1), 89 | ), 90 | curve: Curves.easeOut) 91 | .fadeIn( 92 | begin: 0.1, 93 | delay: Duration( 94 | milliseconds: 95 | 300 * (_animatedWidgets.indexOf(e) + 1)), 96 | )) 97 | .toList(), 98 | ), 99 | ), 100 | ], 101 | ), 102 | ); 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 43 | 49 | 50 | 51 | 52 | 53 | 63 | 65 | 71 | 72 | 73 | 74 | 80 | 82 | 88 | 89 | 90 | 91 | 93 | 94 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: food_animation 2 | description: "A new Flutter project." 3 | # The following line prevents the package from being accidentally published to 4 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 5 | publish_to: "none" # Remove this line if you wish to publish to pub.dev 6 | 7 | # The following defines the version and build number for your application. 8 | # A version number is three numbers separated by dots, like 1.2.43 9 | # followed by an optional build number separated by a +. 10 | # Both the version and the builder number may be overridden in flutter 11 | # build by specifying --build-name and --build-number, respectively. 12 | # In Android, build-name is used as versionName while build-number used as versionCode. 13 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 14 | # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. 15 | # Read more about iOS versioning at 16 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 17 | # In Windows, build-name is used as the major, minor, and patch parts 18 | # of the product and file versions while build-number is used as the build suffix. 19 | version: 1.0.0+1 20 | 21 | environment: 22 | sdk: ^3.5.0 23 | 24 | # Dependencies specify other packages that your package needs in order to work. 25 | # To automatically upgrade your package dependencies to the latest versions 26 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 27 | # dependencies can be manually updated by changing the version numbers below to 28 | # the latest version available on pub.dev. To see which dependencies have newer 29 | # versions available, run `flutter pub outdated`. 30 | dependencies: 31 | flutter: 32 | sdk: flutter 33 | 34 | # The following adds the Cupertino Icons font to your application. 35 | # Use with the CupertinoIcons class for iOS style icons. 36 | cupertino_icons: ^1.0.8 37 | google_fonts: ^6.2.1 38 | cached_network_image: ^3.4.1 39 | flutter_animate: ^4.5.0 40 | 41 | dev_dependencies: 42 | flutter_test: 43 | sdk: flutter 44 | 45 | # The "flutter_lints" package below contains a set of recommended lints to 46 | # encourage good coding practices. The lint set provided by the package is 47 | # activated in the `analysis_options.yaml` file located at the root of your 48 | # package. See that file for information about deactivating specific lint 49 | # rules and activating additional ones. 50 | flutter_lints: ^4.0.0 51 | 52 | # For information on the generic Dart part of this file, see the 53 | # following page: https://dart.dev/tools/pub/pubspec 54 | 55 | # The following section is specific to Flutter packages. 56 | flutter: 57 | # The following line ensures that the Material Icons font is 58 | # included with your application, so that you can use the icons in 59 | # the material Icons class. 60 | uses-material-design: true 61 | 62 | # To add assets to your application, add an assets section, like this: 63 | assets: 64 | - assets/ 65 | # - images/a_dot_ham.jpeg 66 | 67 | # An image asset can refer to one or more resolution-specific "variants", see 68 | # https://flutter.dev/to/resolution-aware-images 69 | 70 | # For details regarding adding assets from package dependencies, see 71 | # https://flutter.dev/to/asset-from-package 72 | 73 | # To add custom fonts to your application, add a fonts section here, 74 | # in this "flutter" section. Each entry in this list should have a 75 | # "family" key with the font family name, and a "fonts" key with a 76 | # list giving the asset and other descriptors for the font. For 77 | # example: 78 | # fonts: 79 | # - family: Schyler 80 | # fonts: 81 | # - asset: fonts/Schyler-Regular.ttf 82 | # - asset: fonts/Schyler-Italic.ttf 83 | # style: italic 84 | # - family: Trajan Pro 85 | # fonts: 86 | # - asset: fonts/TrajanPro.ttf 87 | # - asset: fonts/TrajanPro_Bold.ttf 88 | # weight: 700 89 | # 90 | # For details regarding fonts from package dependencies, 91 | # see https://flutter.dev/to/font-from-package 92 | -------------------------------------------------------------------------------- /lib/views/home_view.dart: -------------------------------------------------------------------------------- 1 | import 'dart:developer'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:food_animation/models/box_content.dart'; 6 | import 'package:food_animation/views/food_detail_view.dart'; 7 | import 'package:food_animation/widgets/food_box.dart'; 8 | import 'package:google_fonts/google_fonts.dart'; 9 | 10 | List boxContent = [ 11 | BoxContent(asset: "assets/cereal.png", color: Colors.orange), 12 | BoxContent(asset: "assets/spag.png", color: Colors.greenAccent), 13 | BoxContent(asset: "assets/steak.png", color: Colors.pinkAccent), 14 | BoxContent(asset: "assets/veggies.png", color: Colors.blueAccent), 15 | BoxContent(asset: "assets/veggies.png", color: Colors.black), 16 | ]; 17 | 18 | class HomeView extends StatefulWidget { 19 | const HomeView({super.key}); 20 | 21 | @override 22 | State createState() => _HomeViewState(); 23 | } 24 | 25 | class _HomeViewState extends State with TickerProviderStateMixin { 26 | GlobalKey heroKey = GlobalKey(); 27 | final Duration _animationDuration = const Duration(milliseconds: 500); 28 | int currIndex = 0; 29 | int? previousIndex; 30 | late AnimationController _growAnimationController; 31 | late AnimationController _shrinkAnimationController; 32 | late AnimationController _rotationAnimationController; 33 | late ScrollController _scrollController; 34 | late Animation _growAnimation; 35 | late Animation _shrinkAnimation; 36 | late Animation _rotationAnimation; 37 | double _scrollOffset = 0.0; 38 | 39 | @override 40 | void initState() { 41 | super.initState(); 42 | _scrollController = ScrollController(); 43 | _growAnimationController = 44 | AnimationController(vsync: this, duration: _animationDuration); 45 | _growAnimation = 46 | Tween(begin: 0.0, end: 1.0).animate(_growAnimationController); 47 | 48 | _shrinkAnimationController = 49 | AnimationController(vsync: this, duration: _animationDuration); 50 | _shrinkAnimation = 51 | Tween(begin: 0.0, end: 1.0).animate(_shrinkAnimationController); 52 | 53 | _rotationAnimationController = 54 | AnimationController(vsync: this, duration: _animationDuration); 55 | 56 | _rotationAnimation = CurvedAnimation( 57 | parent: _rotationAnimationController, curve: Curves.easeIn); 58 | 59 | _scrollController.addListener(() { 60 | setState(() { 61 | _scrollOffset = _scrollController.offset; 62 | }); 63 | }); 64 | 65 | WidgetsBinding.instance.addPostFrameCallback((_) { 66 | _growAnimationController.forward(); 67 | }); 68 | } 69 | 70 | void handleIndexChange(int newIndex) { 71 | if (newIndex >= 0 && newIndex < boxContent.length - 1) { 72 | setState(() { 73 | previousIndex = currIndex; 74 | currIndex = newIndex; 75 | }); 76 | 77 | _growAnimationController.reset(); 78 | _growAnimationController.forward(); 79 | 80 | if (previousIndex != newIndex) { 81 | _shrinkAnimationController.reset(); 82 | _shrinkAnimationController.forward(); 83 | } 84 | 85 | double position = 86 | newIndex * (MediaQuery.of(context).size.width * 0.8 + 15); 87 | _scrollController.animateTo(position, 88 | duration: _animationDuration, curve: Curves.easeIn); 89 | } 90 | } 91 | 92 | @override 93 | void dispose() { 94 | super.dispose(); 95 | _scrollController.removeListener(() {}); 96 | _scrollController.dispose(); 97 | _growAnimationController.dispose(); 98 | _shrinkAnimationController.dispose(); 99 | } 100 | 101 | @override 102 | Widget build(BuildContext context) { 103 | final size = MediaQuery.sizeOf(context); 104 | double maxHeight = size.height * 0.7; 105 | double minHeight = size.height * 0.5; 106 | double boxWidth = size.width * 0.8; 107 | 108 | return Scaffold( 109 | backgroundColor: const Color.fromRGBO(47, 52, 62, 1), 110 | appBar: AppBar( 111 | toolbarHeight: 30, 112 | backgroundColor: const Color(0xff2f343e), 113 | leading: const Padding( 114 | padding: EdgeInsets.only(left: 10.0), 115 | child: CircleAvatar( 116 | backgroundColor: Colors.white, 117 | radius: 8, 118 | ), 119 | ), 120 | title: Text( 121 | "DISCOVER", 122 | style: GoogleFonts.lato( 123 | color: Colors.white, fontWeight: FontWeight.bold), 124 | ), 125 | actions: const [ 126 | Padding( 127 | padding: EdgeInsets.only(right: 15.0), 128 | child: Icon( 129 | Icons.search, 130 | color: Colors.white, 131 | size: 30, 132 | ), 133 | ) 134 | ], 135 | ), 136 | body: SingleChildScrollView( 137 | child: Column(children: [ 138 | Container( 139 | margin: const EdgeInsets.symmetric(vertical: 20, horizontal: 15), 140 | height: size.height * 0.1, 141 | width: double.maxFinite, 142 | child: Column( 143 | crossAxisAlignment: CrossAxisAlignment.start, 144 | children: [ 145 | Text( 146 | "F E A T .", 147 | style: GoogleFonts.lato( 148 | color: Colors.white, 149 | fontSize: 28, 150 | fontWeight: FontWeight.bold), 151 | ), 152 | Text( 153 | ". U R E D", 154 | style: GoogleFonts.lato( 155 | color: Colors.white, 156 | fontSize: 28, 157 | fontWeight: FontWeight.bold), 158 | ), 159 | ], 160 | ), 161 | ), 162 | SizedBox( 163 | height: maxHeight, 164 | child: GestureDetector( 165 | onHorizontalDragEnd: (details) { 166 | if (details.velocity.pixelsPerSecond.dx < 0 && 167 | currIndex < boxContent.length - 1) { 168 | handleIndexChange(currIndex + 1); 169 | } else if (details.velocity.pixelsPerSecond.dx > 0 && 170 | currIndex > 0) { 171 | handleIndexChange(currIndex - 1); 172 | } 173 | }, 174 | child: ListView.builder( 175 | scrollDirection: Axis.horizontal, 176 | controller: _scrollController, 177 | physics: const NeverScrollableScrollPhysics(), 178 | itemCount: boxContent.length, 179 | itemBuilder: (context, index) { 180 | final itemScrollOffset = index * boxWidth - _scrollOffset; 181 | final visiblePortion = 182 | 1 - (itemScrollOffset / boxWidth).clamp(0.0, 1.0); 183 | if (index == (boxContent.length - 1)) { 184 | return const SizedBox( 185 | width: 50, 186 | ); 187 | } 188 | return FoodBox( 189 | onTap: () { 190 | if (currIndex == index) { 191 | Navigator.of(context).push(CupertinoPageRoute( 192 | builder: (context) => FoodDetailsView( 193 | assetName: boxContent[index].asset))); 194 | } else { 195 | handleIndexChange(index); 196 | } 197 | }, 198 | index: index, 199 | growAnimation: _growAnimation, 200 | shrinkAnimation: _shrinkAnimation, 201 | minHeight: minHeight, 202 | maxHeight: maxHeight, 203 | boxWidth: boxWidth, 204 | previousIndex: previousIndex, 205 | currIndex: currIndex, 206 | visiblePortion: visiblePortion, 207 | progressAnimation: _rotationAnimation, 208 | ); 209 | }), 210 | ), 211 | ), 212 | ]), 213 | ), 214 | ); 215 | } 216 | } 217 | -------------------------------------------------------------------------------- /lib/widgets/food_box.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:food_animation/painters/circles_painter.dart'; 6 | import 'package:food_animation/utils/helper.dart'; 7 | import 'package:food_animation/views/home_view.dart'; 8 | import 'package:google_fonts/google_fonts.dart'; 9 | 10 | class FoodBox extends StatelessWidget { 11 | final Animation growAnimation; 12 | final Animation shrinkAnimation; 13 | final Animation progressAnimation; 14 | final int index; 15 | final void Function()? onTap; 16 | final double minHeight; 17 | final double maxHeight; 18 | final double boxWidth; 19 | final int? previousIndex; 20 | final int currIndex; 21 | 22 | final double visiblePortion; 23 | 24 | static const double IMAGE_HEIGHT = 150.0; 25 | 26 | const FoodBox( 27 | {required this.onTap, 28 | required this.index, 29 | required this.growAnimation, 30 | required this.shrinkAnimation, 31 | required this.minHeight, 32 | required this.maxHeight, 33 | required this.boxWidth, 34 | required this.previousIndex, 35 | required this.currIndex, 36 | required this.visiblePortion, 37 | required this.progressAnimation, 38 | super.key}); 39 | 40 | @override 41 | Widget build(BuildContext context) { 42 | final size = MediaQuery.sizeOf(context); 43 | return GestureDetector( 44 | onTap: onTap, 45 | child: Column( 46 | children: [ 47 | AnimatedBuilder( 48 | animation: Listenable.merge([growAnimation, shrinkAnimation]), 49 | builder: (BuildContext context, Widget? child) { 50 | final progress = progressAnimation.value * visiblePortion; 51 | final scale = 0.7 + (0.5 * progress); 52 | 53 | final baseAngle = Helper.degreeToRadian(30); 54 | final targetAngle = baseAngle - Helper.degreeToRadian(60); 55 | 56 | double currentAngle; 57 | if (currIndex == index) { 58 | currentAngle = 59 | baseAngle + (targetAngle - baseAngle) * growAnimation.value; 60 | } else if (previousIndex == index) { 61 | currentAngle = targetAngle + 62 | (baseAngle - targetAngle) * shrinkAnimation.value; 63 | } else { 64 | currentAngle = 65 | baseAngle + (-Helper.degreeToRadian(48) * visiblePortion); 66 | } 67 | 68 | double boxHeight = minHeight; 69 | final slideX = 80.0 * (1 - progress); 70 | final slideY = -50.0 * (2 - progress); 71 | 72 | if (currIndex == index) { 73 | boxHeight = 74 | minHeight + ((maxHeight - minHeight) * growAnimation.value); 75 | } else if (previousIndex == index) { 76 | boxHeight = minHeight + 77 | ((maxHeight - minHeight) * (1 - shrinkAnimation.value)); 78 | } 79 | 80 | Color baseColor = boxContent[index].color; 81 | Color lighterColor = 82 | HSLColor.fromColor(baseColor).withLightness(0.7).toColor(); 83 | Color darkerColor = 84 | HSLColor.fromColor(baseColor).withLightness(0.3).toColor(); 85 | 86 | return Stack( 87 | children: [ 88 | Container( 89 | height: boxHeight, 90 | width: boxWidth, 91 | margin: const EdgeInsets.symmetric(horizontal: 10), 92 | decoration: BoxDecoration( 93 | gradient: LinearGradient( 94 | begin: Alignment.topLeft, 95 | end: Alignment.bottomRight, 96 | colors: [lighterColor, darkerColor], 97 | ), 98 | borderRadius: BorderRadius.circular(16), 99 | ), 100 | ), 101 | CustomPaint( 102 | size: Size(boxWidth, boxHeight), 103 | painter: CirclesPainter(baseColor), 104 | ), 105 | Padding( 106 | padding: const EdgeInsets.only(top: 24.0, left: 34), 107 | child: Column( 108 | crossAxisAlignment: CrossAxisAlignment.start, 109 | children: [ 110 | Row( 111 | children: [ 112 | CircleAvatar( 113 | radius: boxHeight * 0.035, 114 | backgroundColor: Colors.white.withOpacity(0.3), 115 | ), 116 | SizedBox(width: boxWidth * 0.05), 117 | Column( 118 | crossAxisAlignment: CrossAxisAlignment.start, 119 | children: [ 120 | Text( 121 | "Linda Miller", 122 | style: GoogleFonts.lato( 123 | color: Colors.white, 124 | fontSize: 125 | min(max(boxHeight * 0.032, 14), 30), 126 | fontWeight: FontWeight.bold), 127 | ), 128 | Text( 129 | "29 Jun", 130 | style: GoogleFonts.lato( 131 | fontSize: 132 | min(max(boxHeight * 0.022, 12), 24), 133 | fontWeight: FontWeight.bold, 134 | color: Colors.white), 135 | ), 136 | ], 137 | ) 138 | ], 139 | ), 140 | SizedBox( 141 | height: boxHeight * 0.032, 142 | ), 143 | Container( 144 | height: 1, 145 | width: size.width * 0.55, 146 | color: Colors.white, 147 | ), 148 | SizedBox( 149 | height: boxHeight * 0.028, 150 | ), 151 | Row( 152 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 153 | mainAxisSize: MainAxisSize.max, 154 | children: [ 155 | Text( 156 | "Spicy Maguro ", 157 | style: GoogleFonts.lato( 158 | color: Colors.white, 159 | fontSize: min(max(boxHeight * 0.06, 18), 35), 160 | fontWeight: FontWeight.bold), 161 | ), 162 | const SizedBox(width: 20), 163 | const Icon( 164 | CupertinoIcons.heart_fill, 165 | color: Colors.black, 166 | ) 167 | ], 168 | ), 169 | Text( 170 | "Rich Nutrition", 171 | style: GoogleFonts.lato( 172 | color: Colors.white, 173 | fontSize: min(max(boxHeight * 0.045, 16), 25), 174 | fontWeight: FontWeight.bold), 175 | ), 176 | Container( 177 | margin: const EdgeInsets.symmetric(vertical: 20), 178 | padding: const EdgeInsets.symmetric( 179 | horizontal: 10, vertical: 10), 180 | decoration: BoxDecoration( 181 | color: Colors.white, 182 | borderRadius: BorderRadius.circular(20), 183 | boxShadow: [ 184 | BoxShadow( 185 | color: Colors.black.withOpacity(0.15), 186 | offset: const Offset(0, 10), 187 | blurRadius: 10, 188 | spreadRadius: 3, 189 | ), 190 | ], 191 | ), 192 | child: Row( 193 | children: [ 194 | Icon( 195 | CupertinoIcons.add_circled_solid, 196 | size: boxHeight * 0.03, 197 | ), 198 | const SizedBox(width: 7), 199 | Text( 200 | "Add to bag", 201 | style: GoogleFonts.lato( 202 | fontSize: 203 | min(max(boxHeight * 0.01, 14), 24), 204 | fontWeight: FontWeight.bold), 205 | ), 206 | ], 207 | ), 208 | ), 209 | ], 210 | ), 211 | ), 212 | Positioned( 213 | bottom: size.height * 0.1 + slideY, 214 | left: (-40) + slideX, 215 | child: Hero( 216 | tag: boxContent[index].asset, 217 | child: SizedBox( 218 | width: boxHeight * 0.5, 219 | child: Transform.rotate( 220 | angle: currentAngle, 221 | child: Image.asset( 222 | key: ValueKey(boxContent[index].asset), 223 | filterQuality: FilterQuality.high, 224 | fit: BoxFit.cover, 225 | height: boxHeight * 0.5, 226 | boxContent[index].asset), 227 | ), 228 | ))), 229 | ], 230 | ); 231 | }, 232 | ) 233 | ], 234 | ), 235 | ); 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /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 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "2.11.0" 12 | boolean_selector: 13 | dependency: transitive 14 | description: 15 | name: boolean_selector 16 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.1.1" 20 | cached_network_image: 21 | dependency: "direct main" 22 | description: 23 | name: cached_network_image 24 | sha256: "7c1183e361e5c8b0a0f21a28401eecdbde252441106a9816400dd4c2b2424916" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "3.4.1" 28 | cached_network_image_platform_interface: 29 | dependency: transitive 30 | description: 31 | name: cached_network_image_platform_interface 32 | sha256: "35814b016e37fbdc91f7ae18c8caf49ba5c88501813f73ce8a07027a395e2829" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "4.1.1" 36 | cached_network_image_web: 37 | dependency: transitive 38 | description: 39 | name: cached_network_image_web 40 | sha256: "980842f4e8e2535b8dbd3d5ca0b1f0ba66bf61d14cc3a17a9b4788a3685ba062" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.3.1" 44 | characters: 45 | dependency: transitive 46 | description: 47 | name: characters 48 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.3.0" 52 | clock: 53 | dependency: transitive 54 | description: 55 | name: clock 56 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.1.1" 60 | collection: 61 | dependency: transitive 62 | description: 63 | name: collection 64 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.18.0" 68 | crypto: 69 | dependency: transitive 70 | description: 71 | name: crypto 72 | sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "3.0.6" 76 | cupertino_icons: 77 | dependency: "direct main" 78 | description: 79 | name: cupertino_icons 80 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "1.0.8" 84 | fake_async: 85 | dependency: transitive 86 | description: 87 | name: fake_async 88 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "1.3.1" 92 | ffi: 93 | dependency: transitive 94 | description: 95 | name: ffi 96 | sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "2.1.3" 100 | file: 101 | dependency: transitive 102 | description: 103 | name: file 104 | sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "7.0.1" 108 | fixnum: 109 | dependency: transitive 110 | description: 111 | name: fixnum 112 | sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "1.1.1" 116 | flutter: 117 | dependency: "direct main" 118 | description: flutter 119 | source: sdk 120 | version: "0.0.0" 121 | flutter_animate: 122 | dependency: "direct main" 123 | description: 124 | name: flutter_animate 125 | sha256: "7c8a6594a9252dad30cc2ef16e33270b6248c4dedc3b3d06c86c4f3f4dc05ae5" 126 | url: "https://pub.dev" 127 | source: hosted 128 | version: "4.5.0" 129 | flutter_cache_manager: 130 | dependency: transitive 131 | description: 132 | name: flutter_cache_manager 133 | sha256: "400b6592f16a4409a7f2bb929a9a7e38c72cceb8ffb99ee57bbf2cb2cecf8386" 134 | url: "https://pub.dev" 135 | source: hosted 136 | version: "3.4.1" 137 | flutter_lints: 138 | dependency: "direct dev" 139 | description: 140 | name: flutter_lints 141 | sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" 142 | url: "https://pub.dev" 143 | source: hosted 144 | version: "4.0.0" 145 | flutter_shaders: 146 | dependency: transitive 147 | description: 148 | name: flutter_shaders 149 | sha256: "34794acadd8275d971e02df03afee3dee0f98dbfb8c4837082ad0034f612a3e2" 150 | url: "https://pub.dev" 151 | source: hosted 152 | version: "0.1.3" 153 | flutter_test: 154 | dependency: "direct dev" 155 | description: flutter 156 | source: sdk 157 | version: "0.0.0" 158 | google_fonts: 159 | dependency: "direct main" 160 | description: 161 | name: google_fonts 162 | sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 163 | url: "https://pub.dev" 164 | source: hosted 165 | version: "6.2.1" 166 | http: 167 | dependency: transitive 168 | description: 169 | name: http 170 | sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 171 | url: "https://pub.dev" 172 | source: hosted 173 | version: "1.2.2" 174 | http_parser: 175 | dependency: transitive 176 | description: 177 | name: http_parser 178 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 179 | url: "https://pub.dev" 180 | source: hosted 181 | version: "4.0.2" 182 | leak_tracker: 183 | dependency: transitive 184 | description: 185 | name: leak_tracker 186 | sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" 187 | url: "https://pub.dev" 188 | source: hosted 189 | version: "10.0.5" 190 | leak_tracker_flutter_testing: 191 | dependency: transitive 192 | description: 193 | name: leak_tracker_flutter_testing 194 | sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" 195 | url: "https://pub.dev" 196 | source: hosted 197 | version: "3.0.5" 198 | leak_tracker_testing: 199 | dependency: transitive 200 | description: 201 | name: leak_tracker_testing 202 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 203 | url: "https://pub.dev" 204 | source: hosted 205 | version: "3.0.1" 206 | lints: 207 | dependency: transitive 208 | description: 209 | name: lints 210 | sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" 211 | url: "https://pub.dev" 212 | source: hosted 213 | version: "4.0.0" 214 | matcher: 215 | dependency: transitive 216 | description: 217 | name: matcher 218 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb 219 | url: "https://pub.dev" 220 | source: hosted 221 | version: "0.12.16+1" 222 | material_color_utilities: 223 | dependency: transitive 224 | description: 225 | name: material_color_utilities 226 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 227 | url: "https://pub.dev" 228 | source: hosted 229 | version: "0.11.1" 230 | meta: 231 | dependency: transitive 232 | description: 233 | name: meta 234 | sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 235 | url: "https://pub.dev" 236 | source: hosted 237 | version: "1.15.0" 238 | octo_image: 239 | dependency: transitive 240 | description: 241 | name: octo_image 242 | sha256: "34faa6639a78c7e3cbe79be6f9f96535867e879748ade7d17c9b1ae7536293bd" 243 | url: "https://pub.dev" 244 | source: hosted 245 | version: "2.1.0" 246 | path: 247 | dependency: transitive 248 | description: 249 | name: path 250 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 251 | url: "https://pub.dev" 252 | source: hosted 253 | version: "1.9.0" 254 | path_provider: 255 | dependency: transitive 256 | description: 257 | name: path_provider 258 | sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 259 | url: "https://pub.dev" 260 | source: hosted 261 | version: "2.1.4" 262 | path_provider_android: 263 | dependency: transitive 264 | description: 265 | name: path_provider_android 266 | sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a 267 | url: "https://pub.dev" 268 | source: hosted 269 | version: "2.2.12" 270 | path_provider_foundation: 271 | dependency: transitive 272 | description: 273 | name: path_provider_foundation 274 | sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 275 | url: "https://pub.dev" 276 | source: hosted 277 | version: "2.4.0" 278 | path_provider_linux: 279 | dependency: transitive 280 | description: 281 | name: path_provider_linux 282 | sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 283 | url: "https://pub.dev" 284 | source: hosted 285 | version: "2.2.1" 286 | path_provider_platform_interface: 287 | dependency: transitive 288 | description: 289 | name: path_provider_platform_interface 290 | sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" 291 | url: "https://pub.dev" 292 | source: hosted 293 | version: "2.1.2" 294 | path_provider_windows: 295 | dependency: transitive 296 | description: 297 | name: path_provider_windows 298 | sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 299 | url: "https://pub.dev" 300 | source: hosted 301 | version: "2.3.0" 302 | platform: 303 | dependency: transitive 304 | description: 305 | name: platform 306 | sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" 307 | url: "https://pub.dev" 308 | source: hosted 309 | version: "3.1.6" 310 | plugin_platform_interface: 311 | dependency: transitive 312 | description: 313 | name: plugin_platform_interface 314 | sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" 315 | url: "https://pub.dev" 316 | source: hosted 317 | version: "2.1.8" 318 | rxdart: 319 | dependency: transitive 320 | description: 321 | name: rxdart 322 | sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962" 323 | url: "https://pub.dev" 324 | source: hosted 325 | version: "0.28.0" 326 | sky_engine: 327 | dependency: transitive 328 | description: flutter 329 | source: sdk 330 | version: "0.0.99" 331 | source_span: 332 | dependency: transitive 333 | description: 334 | name: source_span 335 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 336 | url: "https://pub.dev" 337 | source: hosted 338 | version: "1.10.0" 339 | sprintf: 340 | dependency: transitive 341 | description: 342 | name: sprintf 343 | sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" 344 | url: "https://pub.dev" 345 | source: hosted 346 | version: "7.0.0" 347 | sqflite: 348 | dependency: transitive 349 | description: 350 | name: sqflite 351 | sha256: "79a297dc3cc137e758c6a4baf83342b039e5a6d2436fcdf3f96a00adaaf2ad62" 352 | url: "https://pub.dev" 353 | source: hosted 354 | version: "2.4.0" 355 | sqflite_android: 356 | dependency: transitive 357 | description: 358 | name: sqflite_android 359 | sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3" 360 | url: "https://pub.dev" 361 | source: hosted 362 | version: "2.4.0" 363 | sqflite_common: 364 | dependency: transitive 365 | description: 366 | name: sqflite_common 367 | sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490" 368 | url: "https://pub.dev" 369 | source: hosted 370 | version: "2.5.4+5" 371 | sqflite_darwin: 372 | dependency: transitive 373 | description: 374 | name: sqflite_darwin 375 | sha256: "769733dddf94622d5541c73e4ddc6aa7b252d865285914b6fcd54a63c4b4f027" 376 | url: "https://pub.dev" 377 | source: hosted 378 | version: "2.4.1-1" 379 | sqflite_platform_interface: 380 | dependency: transitive 381 | description: 382 | name: sqflite_platform_interface 383 | sha256: "8dd4515c7bdcae0a785b0062859336de775e8c65db81ae33dd5445f35be61920" 384 | url: "https://pub.dev" 385 | source: hosted 386 | version: "2.4.0" 387 | stack_trace: 388 | dependency: transitive 389 | description: 390 | name: stack_trace 391 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 392 | url: "https://pub.dev" 393 | source: hosted 394 | version: "1.11.1" 395 | stream_channel: 396 | dependency: transitive 397 | description: 398 | name: stream_channel 399 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 400 | url: "https://pub.dev" 401 | source: hosted 402 | version: "2.1.2" 403 | string_scanner: 404 | dependency: transitive 405 | description: 406 | name: string_scanner 407 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 408 | url: "https://pub.dev" 409 | source: hosted 410 | version: "1.2.0" 411 | synchronized: 412 | dependency: transitive 413 | description: 414 | name: synchronized 415 | sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" 416 | url: "https://pub.dev" 417 | source: hosted 418 | version: "3.3.0+3" 419 | term_glyph: 420 | dependency: transitive 421 | description: 422 | name: term_glyph 423 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 424 | url: "https://pub.dev" 425 | source: hosted 426 | version: "1.2.1" 427 | test_api: 428 | dependency: transitive 429 | description: 430 | name: test_api 431 | sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" 432 | url: "https://pub.dev" 433 | source: hosted 434 | version: "0.7.2" 435 | typed_data: 436 | dependency: transitive 437 | description: 438 | name: typed_data 439 | sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 440 | url: "https://pub.dev" 441 | source: hosted 442 | version: "1.4.0" 443 | uuid: 444 | dependency: transitive 445 | description: 446 | name: uuid 447 | sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff 448 | url: "https://pub.dev" 449 | source: hosted 450 | version: "4.5.1" 451 | vector_math: 452 | dependency: transitive 453 | description: 454 | name: vector_math 455 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 456 | url: "https://pub.dev" 457 | source: hosted 458 | version: "2.1.4" 459 | vm_service: 460 | dependency: transitive 461 | description: 462 | name: vm_service 463 | sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc 464 | url: "https://pub.dev" 465 | source: hosted 466 | version: "14.2.4" 467 | web: 468 | dependency: transitive 469 | description: 470 | name: web 471 | sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb 472 | url: "https://pub.dev" 473 | source: hosted 474 | version: "1.1.0" 475 | xdg_directories: 476 | dependency: transitive 477 | description: 478 | name: xdg_directories 479 | sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" 480 | url: "https://pub.dev" 481 | source: hosted 482 | version: "1.1.0" 483 | sdks: 484 | dart: ">=3.5.0 <4.0.0" 485 | flutter: ">=3.24.0" 486 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 54; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 12 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 13 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 14 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 15 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 16 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 17 | 9F098C8F5B7DF4742D75E234 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD9802720EDF92F3B453D61F /* Pods_RunnerTests.framework */; }; 18 | ED490499E1DAEE4723D7FFF6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46F777367AA989510A9DBDA2 /* Pods_Runner.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = 97C146E61CF9000F007C117D /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 97C146ED1CF9000F007C117D; 27 | remoteInfo = Runner; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXCopyFilesBuildPhase section */ 32 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 33 | isa = PBXCopyFilesBuildPhase; 34 | buildActionMask = 2147483647; 35 | dstPath = ""; 36 | dstSubfolderSpec = 10; 37 | files = ( 38 | ); 39 | name = "Embed Frameworks"; 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXCopyFilesBuildPhase section */ 43 | 44 | /* Begin PBXFileReference section */ 45 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 46 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 47 | 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 48 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 50 | 3B805F9AD66B970BE3348B87 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 51 | 46F777367AA989510A9DBDA2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 53 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 54 | 7804EC35A5CBCC8A4D17A87A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 55 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 56 | 7B8545B1233E7EEB5D55E9C2 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 57 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 58 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 59 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 60 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 61 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 62 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 63 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | AF9E6FFA7380A27A1B55F8F8 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; 65 | FD2D9752187DA7C8D7978152 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 66 | FD9802720EDF92F3B453D61F /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 67 | FFB1A422E872DC679DB642EE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 68 | /* End PBXFileReference section */ 69 | 70 | /* Begin PBXFrameworksBuildPhase section */ 71 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 72 | isa = PBXFrameworksBuildPhase; 73 | buildActionMask = 2147483647; 74 | files = ( 75 | ED490499E1DAEE4723D7FFF6 /* Pods_Runner.framework in Frameworks */, 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | AC6656B3802E5DC3E2CA5D7F /* Frameworks */ = { 80 | isa = PBXFrameworksBuildPhase; 81 | buildActionMask = 2147483647; 82 | files = ( 83 | 9F098C8F5B7DF4742D75E234 /* Pods_RunnerTests.framework in Frameworks */, 84 | ); 85 | runOnlyForDeploymentPostprocessing = 0; 86 | }; 87 | /* End PBXFrameworksBuildPhase section */ 88 | 89 | /* Begin PBXGroup section */ 90 | 253E45988B1934ACD5FEC9AA /* Pods */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 3B805F9AD66B970BE3348B87 /* Pods-Runner.debug.xcconfig */, 94 | FFB1A422E872DC679DB642EE /* Pods-Runner.release.xcconfig */, 95 | FD2D9752187DA7C8D7978152 /* Pods-Runner.profile.xcconfig */, 96 | 7B8545B1233E7EEB5D55E9C2 /* Pods-RunnerTests.debug.xcconfig */, 97 | AF9E6FFA7380A27A1B55F8F8 /* Pods-RunnerTests.release.xcconfig */, 98 | 7804EC35A5CBCC8A4D17A87A /* Pods-RunnerTests.profile.xcconfig */, 99 | ); 100 | name = Pods; 101 | path = Pods; 102 | sourceTree = ""; 103 | }; 104 | 331C8082294A63A400263BE5 /* RunnerTests */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 331C807B294A618700263BE5 /* RunnerTests.swift */, 108 | ); 109 | path = RunnerTests; 110 | sourceTree = ""; 111 | }; 112 | 9740EEB11CF90186004384FC /* Flutter */ = { 113 | isa = PBXGroup; 114 | children = ( 115 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 116 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 117 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 118 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 119 | ); 120 | name = Flutter; 121 | sourceTree = ""; 122 | }; 123 | 97C146E51CF9000F007C117D = { 124 | isa = PBXGroup; 125 | children = ( 126 | 9740EEB11CF90186004384FC /* Flutter */, 127 | 97C146F01CF9000F007C117D /* Runner */, 128 | 97C146EF1CF9000F007C117D /* Products */, 129 | 331C8082294A63A400263BE5 /* RunnerTests */, 130 | 253E45988B1934ACD5FEC9AA /* Pods */, 131 | BED697A0DDF65724BA9D7532 /* Frameworks */, 132 | ); 133 | sourceTree = ""; 134 | }; 135 | 97C146EF1CF9000F007C117D /* Products */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 97C146EE1CF9000F007C117D /* Runner.app */, 139 | 331C8081294A63A400263BE5 /* RunnerTests.xctest */, 140 | ); 141 | name = Products; 142 | sourceTree = ""; 143 | }; 144 | 97C146F01CF9000F007C117D /* Runner */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 148 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 149 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 150 | 97C147021CF9000F007C117D /* Info.plist */, 151 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 152 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 153 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 154 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 155 | ); 156 | path = Runner; 157 | sourceTree = ""; 158 | }; 159 | BED697A0DDF65724BA9D7532 /* Frameworks */ = { 160 | isa = PBXGroup; 161 | children = ( 162 | 46F777367AA989510A9DBDA2 /* Pods_Runner.framework */, 163 | FD9802720EDF92F3B453D61F /* Pods_RunnerTests.framework */, 164 | ); 165 | name = Frameworks; 166 | sourceTree = ""; 167 | }; 168 | /* End PBXGroup section */ 169 | 170 | /* Begin PBXNativeTarget section */ 171 | 331C8080294A63A400263BE5 /* RunnerTests */ = { 172 | isa = PBXNativeTarget; 173 | buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; 174 | buildPhases = ( 175 | 7AEAE7FA52BAB97334C84B8D /* [CP] Check Pods Manifest.lock */, 176 | 331C807D294A63A400263BE5 /* Sources */, 177 | 331C807F294A63A400263BE5 /* Resources */, 178 | AC6656B3802E5DC3E2CA5D7F /* Frameworks */, 179 | ); 180 | buildRules = ( 181 | ); 182 | dependencies = ( 183 | 331C8086294A63A400263BE5 /* PBXTargetDependency */, 184 | ); 185 | name = RunnerTests; 186 | productName = RunnerTests; 187 | productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; 188 | productType = "com.apple.product-type.bundle.unit-test"; 189 | }; 190 | 97C146ED1CF9000F007C117D /* Runner */ = { 191 | isa = PBXNativeTarget; 192 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 193 | buildPhases = ( 194 | B72B2F3B433BC0B5D96654FD /* [CP] Check Pods Manifest.lock */, 195 | 9740EEB61CF901F6004384FC /* Run Script */, 196 | 97C146EA1CF9000F007C117D /* Sources */, 197 | 97C146EB1CF9000F007C117D /* Frameworks */, 198 | 97C146EC1CF9000F007C117D /* Resources */, 199 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 200 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 201 | C3DB17418EB6B10CFB141570 /* [CP] Embed Pods Frameworks */, 202 | ); 203 | buildRules = ( 204 | ); 205 | dependencies = ( 206 | ); 207 | name = Runner; 208 | productName = Runner; 209 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 210 | productType = "com.apple.product-type.application"; 211 | }; 212 | /* End PBXNativeTarget section */ 213 | 214 | /* Begin PBXProject section */ 215 | 97C146E61CF9000F007C117D /* Project object */ = { 216 | isa = PBXProject; 217 | attributes = { 218 | BuildIndependentTargetsInParallel = YES; 219 | LastUpgradeCheck = 1510; 220 | ORGANIZATIONNAME = ""; 221 | TargetAttributes = { 222 | 331C8080294A63A400263BE5 = { 223 | CreatedOnToolsVersion = 14.0; 224 | TestTargetID = 97C146ED1CF9000F007C117D; 225 | }; 226 | 97C146ED1CF9000F007C117D = { 227 | CreatedOnToolsVersion = 7.3.1; 228 | LastSwiftMigration = 1100; 229 | }; 230 | }; 231 | }; 232 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 233 | compatibilityVersion = "Xcode 9.3"; 234 | developmentRegion = en; 235 | hasScannedForEncodings = 0; 236 | knownRegions = ( 237 | en, 238 | Base, 239 | ); 240 | mainGroup = 97C146E51CF9000F007C117D; 241 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 242 | projectDirPath = ""; 243 | projectRoot = ""; 244 | targets = ( 245 | 97C146ED1CF9000F007C117D /* Runner */, 246 | 331C8080294A63A400263BE5 /* RunnerTests */, 247 | ); 248 | }; 249 | /* End PBXProject section */ 250 | 251 | /* Begin PBXResourcesBuildPhase section */ 252 | 331C807F294A63A400263BE5 /* Resources */ = { 253 | isa = PBXResourcesBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | }; 259 | 97C146EC1CF9000F007C117D /* Resources */ = { 260 | isa = PBXResourcesBuildPhase; 261 | buildActionMask = 2147483647; 262 | files = ( 263 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 264 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 265 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 266 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | /* End PBXResourcesBuildPhase section */ 271 | 272 | /* Begin PBXShellScriptBuildPhase section */ 273 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 274 | isa = PBXShellScriptBuildPhase; 275 | alwaysOutOfDate = 1; 276 | buildActionMask = 2147483647; 277 | files = ( 278 | ); 279 | inputPaths = ( 280 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", 281 | ); 282 | name = "Thin Binary"; 283 | outputPaths = ( 284 | ); 285 | runOnlyForDeploymentPostprocessing = 0; 286 | shellPath = /bin/sh; 287 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 288 | }; 289 | 7AEAE7FA52BAB97334C84B8D /* [CP] Check Pods Manifest.lock */ = { 290 | isa = PBXShellScriptBuildPhase; 291 | buildActionMask = 2147483647; 292 | files = ( 293 | ); 294 | inputFileListPaths = ( 295 | ); 296 | inputPaths = ( 297 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 298 | "${PODS_ROOT}/Manifest.lock", 299 | ); 300 | name = "[CP] Check Pods Manifest.lock"; 301 | outputFileListPaths = ( 302 | ); 303 | outputPaths = ( 304 | "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", 305 | ); 306 | runOnlyForDeploymentPostprocessing = 0; 307 | shellPath = /bin/sh; 308 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 309 | showEnvVarsInLog = 0; 310 | }; 311 | 9740EEB61CF901F6004384FC /* Run Script */ = { 312 | isa = PBXShellScriptBuildPhase; 313 | alwaysOutOfDate = 1; 314 | buildActionMask = 2147483647; 315 | files = ( 316 | ); 317 | inputPaths = ( 318 | ); 319 | name = "Run Script"; 320 | outputPaths = ( 321 | ); 322 | runOnlyForDeploymentPostprocessing = 0; 323 | shellPath = /bin/sh; 324 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 325 | }; 326 | B72B2F3B433BC0B5D96654FD /* [CP] Check Pods Manifest.lock */ = { 327 | isa = PBXShellScriptBuildPhase; 328 | buildActionMask = 2147483647; 329 | files = ( 330 | ); 331 | inputFileListPaths = ( 332 | ); 333 | inputPaths = ( 334 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 335 | "${PODS_ROOT}/Manifest.lock", 336 | ); 337 | name = "[CP] Check Pods Manifest.lock"; 338 | outputFileListPaths = ( 339 | ); 340 | outputPaths = ( 341 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 342 | ); 343 | runOnlyForDeploymentPostprocessing = 0; 344 | shellPath = /bin/sh; 345 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 346 | showEnvVarsInLog = 0; 347 | }; 348 | C3DB17418EB6B10CFB141570 /* [CP] Embed Pods Frameworks */ = { 349 | isa = PBXShellScriptBuildPhase; 350 | buildActionMask = 2147483647; 351 | files = ( 352 | ); 353 | inputFileListPaths = ( 354 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", 355 | ); 356 | name = "[CP] Embed Pods Frameworks"; 357 | outputFileListPaths = ( 358 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", 359 | ); 360 | runOnlyForDeploymentPostprocessing = 0; 361 | shellPath = /bin/sh; 362 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 363 | showEnvVarsInLog = 0; 364 | }; 365 | /* End PBXShellScriptBuildPhase section */ 366 | 367 | /* Begin PBXSourcesBuildPhase section */ 368 | 331C807D294A63A400263BE5 /* Sources */ = { 369 | isa = PBXSourcesBuildPhase; 370 | buildActionMask = 2147483647; 371 | files = ( 372 | 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, 373 | ); 374 | runOnlyForDeploymentPostprocessing = 0; 375 | }; 376 | 97C146EA1CF9000F007C117D /* Sources */ = { 377 | isa = PBXSourcesBuildPhase; 378 | buildActionMask = 2147483647; 379 | files = ( 380 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 381 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 382 | ); 383 | runOnlyForDeploymentPostprocessing = 0; 384 | }; 385 | /* End PBXSourcesBuildPhase section */ 386 | 387 | /* Begin PBXTargetDependency section */ 388 | 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { 389 | isa = PBXTargetDependency; 390 | target = 97C146ED1CF9000F007C117D /* Runner */; 391 | targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; 392 | }; 393 | /* End PBXTargetDependency section */ 394 | 395 | /* Begin PBXVariantGroup section */ 396 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 397 | isa = PBXVariantGroup; 398 | children = ( 399 | 97C146FB1CF9000F007C117D /* Base */, 400 | ); 401 | name = Main.storyboard; 402 | sourceTree = ""; 403 | }; 404 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 405 | isa = PBXVariantGroup; 406 | children = ( 407 | 97C147001CF9000F007C117D /* Base */, 408 | ); 409 | name = LaunchScreen.storyboard; 410 | sourceTree = ""; 411 | }; 412 | /* End PBXVariantGroup section */ 413 | 414 | /* Begin XCBuildConfiguration section */ 415 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 416 | isa = XCBuildConfiguration; 417 | buildSettings = { 418 | ALWAYS_SEARCH_USER_PATHS = NO; 419 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 420 | CLANG_ANALYZER_NONNULL = YES; 421 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 422 | CLANG_CXX_LIBRARY = "libc++"; 423 | CLANG_ENABLE_MODULES = YES; 424 | CLANG_ENABLE_OBJC_ARC = YES; 425 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 426 | CLANG_WARN_BOOL_CONVERSION = YES; 427 | CLANG_WARN_COMMA = YES; 428 | CLANG_WARN_CONSTANT_CONVERSION = YES; 429 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 430 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 431 | CLANG_WARN_EMPTY_BODY = YES; 432 | CLANG_WARN_ENUM_CONVERSION = YES; 433 | CLANG_WARN_INFINITE_RECURSION = YES; 434 | CLANG_WARN_INT_CONVERSION = YES; 435 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 436 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 437 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 438 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 439 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 440 | CLANG_WARN_STRICT_PROTOTYPES = YES; 441 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 442 | CLANG_WARN_UNREACHABLE_CODE = YES; 443 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 444 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 445 | COPY_PHASE_STRIP = NO; 446 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 447 | ENABLE_NS_ASSERTIONS = NO; 448 | ENABLE_STRICT_OBJC_MSGSEND = YES; 449 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 450 | GCC_C_LANGUAGE_STANDARD = gnu99; 451 | GCC_NO_COMMON_BLOCKS = YES; 452 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 453 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 454 | GCC_WARN_UNDECLARED_SELECTOR = YES; 455 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 456 | GCC_WARN_UNUSED_FUNCTION = YES; 457 | GCC_WARN_UNUSED_VARIABLE = YES; 458 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 459 | MTL_ENABLE_DEBUG_INFO = NO; 460 | SDKROOT = iphoneos; 461 | SUPPORTED_PLATFORMS = iphoneos; 462 | TARGETED_DEVICE_FAMILY = "1,2"; 463 | VALIDATE_PRODUCT = YES; 464 | }; 465 | name = Profile; 466 | }; 467 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 468 | isa = XCBuildConfiguration; 469 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 470 | buildSettings = { 471 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 472 | CLANG_ENABLE_MODULES = YES; 473 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 474 | DEVELOPMENT_TEAM = WT97Q5QWKF; 475 | ENABLE_BITCODE = NO; 476 | INFOPLIST_FILE = Runner/Info.plist; 477 | LD_RUNPATH_SEARCH_PATHS = ( 478 | "$(inherited)", 479 | "@executable_path/Frameworks", 480 | ); 481 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation; 482 | PRODUCT_NAME = "$(TARGET_NAME)"; 483 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 484 | SWIFT_VERSION = 5.0; 485 | VERSIONING_SYSTEM = "apple-generic"; 486 | }; 487 | name = Profile; 488 | }; 489 | 331C8088294A63A400263BE5 /* Debug */ = { 490 | isa = XCBuildConfiguration; 491 | baseConfigurationReference = 7B8545B1233E7EEB5D55E9C2 /* Pods-RunnerTests.debug.xcconfig */; 492 | buildSettings = { 493 | BUNDLE_LOADER = "$(TEST_HOST)"; 494 | CODE_SIGN_STYLE = Automatic; 495 | CURRENT_PROJECT_VERSION = 1; 496 | GENERATE_INFOPLIST_FILE = YES; 497 | MARKETING_VERSION = 1.0; 498 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation.RunnerTests; 499 | PRODUCT_NAME = "$(TARGET_NAME)"; 500 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 501 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 502 | SWIFT_VERSION = 5.0; 503 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 504 | }; 505 | name = Debug; 506 | }; 507 | 331C8089294A63A400263BE5 /* Release */ = { 508 | isa = XCBuildConfiguration; 509 | baseConfigurationReference = AF9E6FFA7380A27A1B55F8F8 /* Pods-RunnerTests.release.xcconfig */; 510 | buildSettings = { 511 | BUNDLE_LOADER = "$(TEST_HOST)"; 512 | CODE_SIGN_STYLE = Automatic; 513 | CURRENT_PROJECT_VERSION = 1; 514 | GENERATE_INFOPLIST_FILE = YES; 515 | MARKETING_VERSION = 1.0; 516 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation.RunnerTests; 517 | PRODUCT_NAME = "$(TARGET_NAME)"; 518 | SWIFT_VERSION = 5.0; 519 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 520 | }; 521 | name = Release; 522 | }; 523 | 331C808A294A63A400263BE5 /* Profile */ = { 524 | isa = XCBuildConfiguration; 525 | baseConfigurationReference = 7804EC35A5CBCC8A4D17A87A /* Pods-RunnerTests.profile.xcconfig */; 526 | buildSettings = { 527 | BUNDLE_LOADER = "$(TEST_HOST)"; 528 | CODE_SIGN_STYLE = Automatic; 529 | CURRENT_PROJECT_VERSION = 1; 530 | GENERATE_INFOPLIST_FILE = YES; 531 | MARKETING_VERSION = 1.0; 532 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation.RunnerTests; 533 | PRODUCT_NAME = "$(TARGET_NAME)"; 534 | SWIFT_VERSION = 5.0; 535 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; 536 | }; 537 | name = Profile; 538 | }; 539 | 97C147031CF9000F007C117D /* Debug */ = { 540 | isa = XCBuildConfiguration; 541 | buildSettings = { 542 | ALWAYS_SEARCH_USER_PATHS = NO; 543 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 544 | CLANG_ANALYZER_NONNULL = YES; 545 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 546 | CLANG_CXX_LIBRARY = "libc++"; 547 | CLANG_ENABLE_MODULES = YES; 548 | CLANG_ENABLE_OBJC_ARC = YES; 549 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 550 | CLANG_WARN_BOOL_CONVERSION = YES; 551 | CLANG_WARN_COMMA = YES; 552 | CLANG_WARN_CONSTANT_CONVERSION = YES; 553 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 554 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 555 | CLANG_WARN_EMPTY_BODY = YES; 556 | CLANG_WARN_ENUM_CONVERSION = YES; 557 | CLANG_WARN_INFINITE_RECURSION = YES; 558 | CLANG_WARN_INT_CONVERSION = YES; 559 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 560 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 561 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 562 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 563 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 564 | CLANG_WARN_STRICT_PROTOTYPES = YES; 565 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 566 | CLANG_WARN_UNREACHABLE_CODE = YES; 567 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 568 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 569 | COPY_PHASE_STRIP = NO; 570 | DEBUG_INFORMATION_FORMAT = dwarf; 571 | ENABLE_STRICT_OBJC_MSGSEND = YES; 572 | ENABLE_TESTABILITY = YES; 573 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 574 | GCC_C_LANGUAGE_STANDARD = gnu99; 575 | GCC_DYNAMIC_NO_PIC = NO; 576 | GCC_NO_COMMON_BLOCKS = YES; 577 | GCC_OPTIMIZATION_LEVEL = 0; 578 | GCC_PREPROCESSOR_DEFINITIONS = ( 579 | "DEBUG=1", 580 | "$(inherited)", 581 | ); 582 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 583 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 584 | GCC_WARN_UNDECLARED_SELECTOR = YES; 585 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 586 | GCC_WARN_UNUSED_FUNCTION = YES; 587 | GCC_WARN_UNUSED_VARIABLE = YES; 588 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 589 | MTL_ENABLE_DEBUG_INFO = YES; 590 | ONLY_ACTIVE_ARCH = YES; 591 | SDKROOT = iphoneos; 592 | TARGETED_DEVICE_FAMILY = "1,2"; 593 | }; 594 | name = Debug; 595 | }; 596 | 97C147041CF9000F007C117D /* Release */ = { 597 | isa = XCBuildConfiguration; 598 | buildSettings = { 599 | ALWAYS_SEARCH_USER_PATHS = NO; 600 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 601 | CLANG_ANALYZER_NONNULL = YES; 602 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 603 | CLANG_CXX_LIBRARY = "libc++"; 604 | CLANG_ENABLE_MODULES = YES; 605 | CLANG_ENABLE_OBJC_ARC = YES; 606 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 607 | CLANG_WARN_BOOL_CONVERSION = YES; 608 | CLANG_WARN_COMMA = YES; 609 | CLANG_WARN_CONSTANT_CONVERSION = YES; 610 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 611 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 612 | CLANG_WARN_EMPTY_BODY = YES; 613 | CLANG_WARN_ENUM_CONVERSION = YES; 614 | CLANG_WARN_INFINITE_RECURSION = YES; 615 | CLANG_WARN_INT_CONVERSION = YES; 616 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 617 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 618 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 619 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 620 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 621 | CLANG_WARN_STRICT_PROTOTYPES = YES; 622 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 623 | CLANG_WARN_UNREACHABLE_CODE = YES; 624 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 625 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 626 | COPY_PHASE_STRIP = NO; 627 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 628 | ENABLE_NS_ASSERTIONS = NO; 629 | ENABLE_STRICT_OBJC_MSGSEND = YES; 630 | ENABLE_USER_SCRIPT_SANDBOXING = NO; 631 | GCC_C_LANGUAGE_STANDARD = gnu99; 632 | GCC_NO_COMMON_BLOCKS = YES; 633 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 634 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 635 | GCC_WARN_UNDECLARED_SELECTOR = YES; 636 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 637 | GCC_WARN_UNUSED_FUNCTION = YES; 638 | GCC_WARN_UNUSED_VARIABLE = YES; 639 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 640 | MTL_ENABLE_DEBUG_INFO = NO; 641 | SDKROOT = iphoneos; 642 | SUPPORTED_PLATFORMS = iphoneos; 643 | SWIFT_COMPILATION_MODE = wholemodule; 644 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 645 | TARGETED_DEVICE_FAMILY = "1,2"; 646 | VALIDATE_PRODUCT = YES; 647 | }; 648 | name = Release; 649 | }; 650 | 97C147061CF9000F007C117D /* Debug */ = { 651 | isa = XCBuildConfiguration; 652 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 653 | buildSettings = { 654 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 655 | CLANG_ENABLE_MODULES = YES; 656 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 657 | DEVELOPMENT_TEAM = WT97Q5QWKF; 658 | ENABLE_BITCODE = NO; 659 | INFOPLIST_FILE = Runner/Info.plist; 660 | LD_RUNPATH_SEARCH_PATHS = ( 661 | "$(inherited)", 662 | "@executable_path/Frameworks", 663 | ); 664 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation; 665 | PRODUCT_NAME = "$(TARGET_NAME)"; 666 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 667 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 668 | SWIFT_VERSION = 5.0; 669 | VERSIONING_SYSTEM = "apple-generic"; 670 | }; 671 | name = Debug; 672 | }; 673 | 97C147071CF9000F007C117D /* Release */ = { 674 | isa = XCBuildConfiguration; 675 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 676 | buildSettings = { 677 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 678 | CLANG_ENABLE_MODULES = YES; 679 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 680 | DEVELOPMENT_TEAM = WT97Q5QWKF; 681 | ENABLE_BITCODE = NO; 682 | INFOPLIST_FILE = Runner/Info.plist; 683 | LD_RUNPATH_SEARCH_PATHS = ( 684 | "$(inherited)", 685 | "@executable_path/Frameworks", 686 | ); 687 | PRODUCT_BUNDLE_IDENTIFIER = com.example.foodAnimation; 688 | PRODUCT_NAME = "$(TARGET_NAME)"; 689 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 690 | SWIFT_VERSION = 5.0; 691 | VERSIONING_SYSTEM = "apple-generic"; 692 | }; 693 | name = Release; 694 | }; 695 | /* End XCBuildConfiguration section */ 696 | 697 | /* Begin XCConfigurationList section */ 698 | 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { 699 | isa = XCConfigurationList; 700 | buildConfigurations = ( 701 | 331C8088294A63A400263BE5 /* Debug */, 702 | 331C8089294A63A400263BE5 /* Release */, 703 | 331C808A294A63A400263BE5 /* Profile */, 704 | ); 705 | defaultConfigurationIsVisible = 0; 706 | defaultConfigurationName = Release; 707 | }; 708 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 709 | isa = XCConfigurationList; 710 | buildConfigurations = ( 711 | 97C147031CF9000F007C117D /* Debug */, 712 | 97C147041CF9000F007C117D /* Release */, 713 | 249021D3217E4FDB00AE95B9 /* Profile */, 714 | ); 715 | defaultConfigurationIsVisible = 0; 716 | defaultConfigurationName = Release; 717 | }; 718 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 719 | isa = XCConfigurationList; 720 | buildConfigurations = ( 721 | 97C147061CF9000F007C117D /* Debug */, 722 | 97C147071CF9000F007C117D /* Release */, 723 | 249021D4217E4FDB00AE95B9 /* Profile */, 724 | ); 725 | defaultConfigurationIsVisible = 0; 726 | defaultConfigurationName = Release; 727 | }; 728 | /* End XCConfigurationList section */ 729 | }; 730 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 731 | } 732 | --------------------------------------------------------------------------------