├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── ui_challenges
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
└── images
│ ├── delivery
│ ├── Take Away.gif
│ ├── boy.gif
│ ├── coffe1.png
│ ├── coffe2.png
│ ├── coffe3.png
│ ├── organic.png
│ ├── pessego.png
│ ├── roma.png
│ └── salad.png
│ ├── earbuds
│ ├── earbuds_blue.png
│ ├── earbuds_simple.png
│ ├── logo.png
│ └── single.png
│ ├── food
│ ├── image.png
│ ├── image1.png
│ ├── image10.png
│ ├── image11.png
│ ├── image12.png
│ ├── image13.png
│ ├── image2.png
│ └── image3.png
│ ├── pokemon
│ ├── Blastoise.webp
│ └── Charizard.webp
│ ├── travel_app
│ ├── image.jpg
│ ├── image1.jpg
│ ├── image10.jpg
│ ├── image11.jpg
│ ├── image12.jpg
│ ├── image13.jpeg
│ ├── image13.jpg
│ ├── image2.jpg
│ ├── image3.jfif
│ ├── image3.jpg
│ └── user.png
│ └── work
│ ├── logo (1).png
│ ├── logo (2).png
│ ├── logo (3).png
│ ├── logo (4).png
│ ├── logo (5).png
│ ├── logo (6).jpg
│ ├── logo.png
│ ├── logo.svg
│ └── logo_white.png
├── images
├── delivery.gif
├── lightswitch.gif
└── pokemon_ui.jfif
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── core
│ └── helpers
│ │ └── animation
│ │ └── scroll
│ │ └── animated_scroll_view_item.dart
├── costum_switch
│ └── custom_switch_screen.dart
├── delivery_app
│ ├── controller
│ │ └── delivery_controller.dart
│ ├── delivery_page.dart
│ ├── models
│ │ └── product_model.dart
│ ├── order_page.dart
│ ├── style.dart
│ ├── widgets
│ │ └── delivery_page
│ │ │ ├── coffes_page.dart
│ │ │ ├── custom_tabs.dart
│ │ │ ├── details_text.dart
│ │ │ ├── food_card.dart
│ │ │ ├── fruits_page.dart
│ │ │ ├── tab_bar_widget.dart
│ │ │ └── view_tab_bar_widget.dart
│ └── your_order_page.dart
├── earbuds_remote
│ ├── home_screen.dart
│ └── welcome_screen.dart
├── light_switch_ui
│ └── light_switch_screen.dart
├── main.dart
├── my_app.dart
├── pokemon_ui
│ ├── model
│ │ └── pokemon_model.dart
│ ├── pokemon_page.dart
│ ├── style.dart
│ └── widgets
│ │ ├── card_pokemon_info.dart
│ │ ├── rate_power_widget.dart
│ │ └── tag_wekeness.dart
├── settings_ui
│ └── settings_screen.dart
└── work_app
│ └── screens
│ ├── home
│ └── home_page.dart
│ ├── splash
│ └── splash_screen.dart
│ └── welcome
│ ├── components
│ └── random_user_card.dart
│ └── welcome_screen.dart
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ ├── Flutter-Release.xcconfig
│ └── GeneratedPluginRegistrant.swift
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── app_icon_1024.png
│ │ ├── app_icon_128.png
│ │ ├── app_icon_16.png
│ │ ├── app_icon_256.png
│ │ ├── app_icon_32.png
│ │ ├── app_icon_512.png
│ │ └── app_icon_64.png
│ ├── Base.lproj
│ └── MainMenu.xib
│ ├── Configs
│ ├── AppInfo.xcconfig
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
├── pubspec.lock
├── pubspec.yaml
└── web
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
├── Icon-maskable-192.png
└── Icon-maskable-512.png
├── index.html
└── manifest.json
/.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 | .packages
31 | .pub-cache/
32 | .pub/
33 | /build/
34 |
35 | # Web related
36 | lib/generated_plugin_registrant.dart
37 |
38 | # Symbolication related
39 | app.*.symbols
40 |
41 | # Obfuscation related
42 | app.*.map.json
43 |
44 | # Android Studio will place build artifacts here
45 | /android/app/debug
46 | /android/app/profile
47 | /android/app/release
48 |
49 | #no include
50 | /windows
51 | /linux
--------------------------------------------------------------------------------
/.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.
5 |
6 | version:
7 | revision: f1875d570e39de09040c8f79aa13cc56baab8db1
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: f1875d570e39de09040c8f79aa13cc56baab8db1
17 | base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1
18 | - platform: windows
19 | create_revision: f1875d570e39de09040c8f79aa13cc56baab8db1
20 | base_revision: f1875d570e39de09040c8f79aa13cc56baab8db1
21 |
22 | # User provided section
23 |
24 | # List of Local paths (relative to this file) that should be
25 | # ignored by the migrate tool.
26 | #
27 | # Files that are not part of the templates will be ignored by default.
28 | unmanaged_files:
29 | - 'lib/main.dart'
30 | - 'ios/Runner.xcodeproj/project.pbxproj'
31 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ui_challenges
2 |
3 | [](https://www.android.com)
4 | [](https://www.android.com)
5 | [](LICENSE)
6 | 
7 | 
8 | 
9 | 
10 |
11 | ## Getting Started 🚀
12 |
13 | A Very Good Project created by @TrindadeCode on linkedin.
14 | That contains various UI Challenges, made with Flutter 💙
15 |
16 | ## Challange Table 🚀
17 |
18 | | Folder name | Image |
19 | | ------ | ------ |
20 | | Settings UI | image here |
21 | | Earbuds remote | image here |
22 | | Delivery App |  |
23 | | Pokemon App |  |
24 | | Light Switch UI |  |
25 | | Job App | image here, date: 08/09/2022 |
26 |
27 | ## Contributions
28 |
29 | We love the open source flutter community!💙 If you'd like to contribute to one or all UI, feel free to open a pull-request at any time. To give new contributors exciting first challenges.
30 |
31 | ## Spread the word
32 |
33 | Liked the project? Just give it a star ⭐️ and spread the word!
34 |
35 | ## Questions or Issues?
36 |
37 | If something does not feel right or if you have questions, feel free to contact us. You can do so by [creating an issue](https://github.com/geekfabio/ui_challenges/issues)
38 |
--------------------------------------------------------------------------------
/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
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | def localProperties = new Properties()
2 | def localPropertiesFile = rootProject.file('local.properties')
3 | if (localPropertiesFile.exists()) {
4 | localPropertiesFile.withReader('UTF-8') { reader ->
5 | localProperties.load(reader)
6 | }
7 | }
8 |
9 | def flutterRoot = localProperties.getProperty('flutter.sdk')
10 | if (flutterRoot == null) {
11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 | }
13 |
14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
15 | if (flutterVersionCode == null) {
16 | flutterVersionCode = '1'
17 | }
18 |
19 | def flutterVersionName = localProperties.getProperty('flutter.versionName')
20 | if (flutterVersionName == null) {
21 | flutterVersionName = '1.0'
22 | }
23 |
24 | apply plugin: 'com.android.application'
25 | apply plugin: 'kotlin-android'
26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
27 |
28 | android {
29 | compileSdkVersion flutter.compileSdkVersion
30 | ndkVersion flutter.ndkVersion
31 |
32 | compileOptions {
33 | sourceCompatibility JavaVersion.VERSION_1_8
34 | targetCompatibility JavaVersion.VERSION_1_8
35 | }
36 |
37 | kotlinOptions {
38 | jvmTarget = '1.8'
39 | }
40 |
41 | sourceSets {
42 | main.java.srcDirs += 'src/main/kotlin'
43 | }
44 |
45 | defaultConfig {
46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
47 | applicationId "com.example.ui_challenges"
48 | // You can update the following values to match your application needs.
49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
50 | minSdkVersion 16
51 | targetSdkVersion flutter.targetSdkVersion
52 | versionCode flutterVersionCode.toInteger()
53 | versionName flutterVersionName
54 | }
55 |
56 | buildTypes {
57 | release {
58 | // TODO: Add your own signing config for the release build.
59 | // Signing with the debug keys for now, so `flutter run --release` works.
60 | signingConfig signingConfigs.debug
61 | }
62 | }
63 | }
64 |
65 | flutter {
66 | source '../..'
67 | }
68 |
69 | dependencies {
70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
71 | }
72 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
8 |
16 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
31 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/example/ui_challenges/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.ui_challenges
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.6.10'
3 | repositories {
4 | google()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:7.1.2'
10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | google()
17 | mavenCentral()
18 | }
19 | }
20 |
21 | rootProject.buildDir = '../build'
22 | subprojects {
23 | project.buildDir = "${rootProject.buildDir}/${project.name}"
24 | }
25 | subprojects {
26 | project.evaluationDependsOn(':app')
27 | }
28 |
29 | task clean(type: Delete) {
30 | delete rootProject.buildDir
31 | }
32 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
7 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
4 | def properties = new Properties()
5 |
6 | assert localPropertiesFile.exists()
7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
8 |
9 | def flutterSdkPath = properties.getProperty("flutter.sdk")
10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
12 |
--------------------------------------------------------------------------------
/assets/images/delivery/Take Away.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/Take Away.gif
--------------------------------------------------------------------------------
/assets/images/delivery/boy.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/boy.gif
--------------------------------------------------------------------------------
/assets/images/delivery/coffe1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/coffe1.png
--------------------------------------------------------------------------------
/assets/images/delivery/coffe2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/coffe2.png
--------------------------------------------------------------------------------
/assets/images/delivery/coffe3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/coffe3.png
--------------------------------------------------------------------------------
/assets/images/delivery/organic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/organic.png
--------------------------------------------------------------------------------
/assets/images/delivery/pessego.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/pessego.png
--------------------------------------------------------------------------------
/assets/images/delivery/roma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/roma.png
--------------------------------------------------------------------------------
/assets/images/delivery/salad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/delivery/salad.png
--------------------------------------------------------------------------------
/assets/images/earbuds/earbuds_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/earbuds/earbuds_blue.png
--------------------------------------------------------------------------------
/assets/images/earbuds/earbuds_simple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/earbuds/earbuds_simple.png
--------------------------------------------------------------------------------
/assets/images/earbuds/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/earbuds/logo.png
--------------------------------------------------------------------------------
/assets/images/earbuds/single.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/earbuds/single.png
--------------------------------------------------------------------------------
/assets/images/food/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image.png
--------------------------------------------------------------------------------
/assets/images/food/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image1.png
--------------------------------------------------------------------------------
/assets/images/food/image10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image10.png
--------------------------------------------------------------------------------
/assets/images/food/image11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image11.png
--------------------------------------------------------------------------------
/assets/images/food/image12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image12.png
--------------------------------------------------------------------------------
/assets/images/food/image13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image13.png
--------------------------------------------------------------------------------
/assets/images/food/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image2.png
--------------------------------------------------------------------------------
/assets/images/food/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/food/image3.png
--------------------------------------------------------------------------------
/assets/images/pokemon/Blastoise.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/pokemon/Blastoise.webp
--------------------------------------------------------------------------------
/assets/images/pokemon/Charizard.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/pokemon/Charizard.webp
--------------------------------------------------------------------------------
/assets/images/travel_app/image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image1.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image10.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image11.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image12.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image13.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image13.jpeg
--------------------------------------------------------------------------------
/assets/images/travel_app/image13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image13.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image2.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/image3.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image3.jfif
--------------------------------------------------------------------------------
/assets/images/travel_app/image3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/image3.jpg
--------------------------------------------------------------------------------
/assets/images/travel_app/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/travel_app/user.png
--------------------------------------------------------------------------------
/assets/images/work/logo (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (1).png
--------------------------------------------------------------------------------
/assets/images/work/logo (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (2).png
--------------------------------------------------------------------------------
/assets/images/work/logo (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (3).png
--------------------------------------------------------------------------------
/assets/images/work/logo (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (4).png
--------------------------------------------------------------------------------
/assets/images/work/logo (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (5).png
--------------------------------------------------------------------------------
/assets/images/work/logo (6).jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo (6).jpg
--------------------------------------------------------------------------------
/assets/images/work/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo.png
--------------------------------------------------------------------------------
/assets/images/work/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
36 |
--------------------------------------------------------------------------------
/assets/images/work/logo_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/assets/images/work/logo_white.png
--------------------------------------------------------------------------------
/images/delivery.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/images/delivery.gif
--------------------------------------------------------------------------------
/images/lightswitch.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/images/lightswitch.gif
--------------------------------------------------------------------------------
/images/pokemon_ui.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/images/pokemon_ui.jfif
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | 9.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
12 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
13 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
14 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
15 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXCopyFilesBuildPhase section */
19 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
20 | isa = PBXCopyFilesBuildPhase;
21 | buildActionMask = 2147483647;
22 | dstPath = "";
23 | dstSubfolderSpec = 10;
24 | files = (
25 | );
26 | name = "Embed Frameworks";
27 | runOnlyForDeploymentPostprocessing = 0;
28 | };
29 | /* End PBXCopyFilesBuildPhase section */
30 |
31 | /* Begin PBXFileReference section */
32 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
33 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
34 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
35 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
36 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
37 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
38 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
39 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
40 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
42 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
43 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
44 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | /* End PBXFileReference section */
46 |
47 | /* Begin PBXFrameworksBuildPhase section */
48 | 97C146EB1CF9000F007C117D /* Frameworks */ = {
49 | isa = PBXFrameworksBuildPhase;
50 | buildActionMask = 2147483647;
51 | files = (
52 | );
53 | runOnlyForDeploymentPostprocessing = 0;
54 | };
55 | /* End PBXFrameworksBuildPhase section */
56 |
57 | /* Begin PBXGroup section */
58 | 9740EEB11CF90186004384FC /* Flutter */ = {
59 | isa = PBXGroup;
60 | children = (
61 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
62 | 9740EEB21CF90195004384FC /* Debug.xcconfig */,
63 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
64 | 9740EEB31CF90195004384FC /* Generated.xcconfig */,
65 | );
66 | name = Flutter;
67 | sourceTree = "";
68 | };
69 | 97C146E51CF9000F007C117D = {
70 | isa = PBXGroup;
71 | children = (
72 | 9740EEB11CF90186004384FC /* Flutter */,
73 | 97C146F01CF9000F007C117D /* Runner */,
74 | 97C146EF1CF9000F007C117D /* Products */,
75 | );
76 | sourceTree = "";
77 | };
78 | 97C146EF1CF9000F007C117D /* Products */ = {
79 | isa = PBXGroup;
80 | children = (
81 | 97C146EE1CF9000F007C117D /* Runner.app */,
82 | );
83 | name = Products;
84 | sourceTree = "";
85 | };
86 | 97C146F01CF9000F007C117D /* Runner */ = {
87 | isa = PBXGroup;
88 | children = (
89 | 97C146FA1CF9000F007C117D /* Main.storyboard */,
90 | 97C146FD1CF9000F007C117D /* Assets.xcassets */,
91 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
92 | 97C147021CF9000F007C117D /* Info.plist */,
93 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
94 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
95 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
96 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
97 | );
98 | path = Runner;
99 | sourceTree = "";
100 | };
101 | /* End PBXGroup section */
102 |
103 | /* Begin PBXNativeTarget section */
104 | 97C146ED1CF9000F007C117D /* Runner */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
107 | buildPhases = (
108 | 9740EEB61CF901F6004384FC /* Run Script */,
109 | 97C146EA1CF9000F007C117D /* Sources */,
110 | 97C146EB1CF9000F007C117D /* Frameworks */,
111 | 97C146EC1CF9000F007C117D /* Resources */,
112 | 9705A1C41CF9048500538489 /* Embed Frameworks */,
113 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
114 | );
115 | buildRules = (
116 | );
117 | dependencies = (
118 | );
119 | name = Runner;
120 | productName = Runner;
121 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
122 | productType = "com.apple.product-type.application";
123 | };
124 | /* End PBXNativeTarget section */
125 |
126 | /* Begin PBXProject section */
127 | 97C146E61CF9000F007C117D /* Project object */ = {
128 | isa = PBXProject;
129 | attributes = {
130 | LastUpgradeCheck = 1300;
131 | ORGANIZATIONNAME = "";
132 | TargetAttributes = {
133 | 97C146ED1CF9000F007C117D = {
134 | CreatedOnToolsVersion = 7.3.1;
135 | LastSwiftMigration = 1100;
136 | };
137 | };
138 | };
139 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
140 | compatibilityVersion = "Xcode 9.3";
141 | developmentRegion = en;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = 97C146E51CF9000F007C117D;
148 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | 97C146ED1CF9000F007C117D /* Runner */,
153 | );
154 | };
155 | /* End PBXProject section */
156 |
157 | /* Begin PBXResourcesBuildPhase section */
158 | 97C146EC1CF9000F007C117D /* Resources */ = {
159 | isa = PBXResourcesBuildPhase;
160 | buildActionMask = 2147483647;
161 | files = (
162 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
163 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
164 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
165 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
166 | );
167 | runOnlyForDeploymentPostprocessing = 0;
168 | };
169 | /* End PBXResourcesBuildPhase section */
170 |
171 | /* Begin PBXShellScriptBuildPhase section */
172 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
173 | isa = PBXShellScriptBuildPhase;
174 | buildActionMask = 2147483647;
175 | files = (
176 | );
177 | inputPaths = (
178 | );
179 | name = "Thin Binary";
180 | outputPaths = (
181 | );
182 | runOnlyForDeploymentPostprocessing = 0;
183 | shellPath = /bin/sh;
184 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
185 | };
186 | 9740EEB61CF901F6004384FC /* Run Script */ = {
187 | isa = PBXShellScriptBuildPhase;
188 | buildActionMask = 2147483647;
189 | files = (
190 | );
191 | inputPaths = (
192 | );
193 | name = "Run Script";
194 | outputPaths = (
195 | );
196 | runOnlyForDeploymentPostprocessing = 0;
197 | shellPath = /bin/sh;
198 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
199 | };
200 | /* End PBXShellScriptBuildPhase section */
201 |
202 | /* Begin PBXSourcesBuildPhase section */
203 | 97C146EA1CF9000F007C117D /* Sources */ = {
204 | isa = PBXSourcesBuildPhase;
205 | buildActionMask = 2147483647;
206 | files = (
207 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
208 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
209 | );
210 | runOnlyForDeploymentPostprocessing = 0;
211 | };
212 | /* End PBXSourcesBuildPhase section */
213 |
214 | /* Begin PBXVariantGroup section */
215 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
216 | isa = PBXVariantGroup;
217 | children = (
218 | 97C146FB1CF9000F007C117D /* Base */,
219 | );
220 | name = Main.storyboard;
221 | sourceTree = "";
222 | };
223 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
224 | isa = PBXVariantGroup;
225 | children = (
226 | 97C147001CF9000F007C117D /* Base */,
227 | );
228 | name = LaunchScreen.storyboard;
229 | sourceTree = "";
230 | };
231 | /* End PBXVariantGroup section */
232 |
233 | /* Begin XCBuildConfiguration section */
234 | 249021D3217E4FDB00AE95B9 /* Profile */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | CLANG_ANALYZER_NONNULL = YES;
239 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
240 | CLANG_CXX_LIBRARY = "libc++";
241 | CLANG_ENABLE_MODULES = YES;
242 | CLANG_ENABLE_OBJC_ARC = YES;
243 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
244 | CLANG_WARN_BOOL_CONVERSION = YES;
245 | CLANG_WARN_COMMA = YES;
246 | CLANG_WARN_CONSTANT_CONVERSION = YES;
247 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
249 | CLANG_WARN_EMPTY_BODY = YES;
250 | CLANG_WARN_ENUM_CONVERSION = YES;
251 | CLANG_WARN_INFINITE_RECURSION = YES;
252 | CLANG_WARN_INT_CONVERSION = YES;
253 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
254 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
258 | CLANG_WARN_STRICT_PROTOTYPES = YES;
259 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
260 | CLANG_WARN_UNREACHABLE_CODE = YES;
261 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
262 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
263 | COPY_PHASE_STRIP = NO;
264 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
265 | ENABLE_NS_ASSERTIONS = NO;
266 | ENABLE_STRICT_OBJC_MSGSEND = YES;
267 | GCC_C_LANGUAGE_STANDARD = gnu99;
268 | GCC_NO_COMMON_BLOCKS = YES;
269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
271 | GCC_WARN_UNDECLARED_SELECTOR = YES;
272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
273 | GCC_WARN_UNUSED_FUNCTION = YES;
274 | GCC_WARN_UNUSED_VARIABLE = YES;
275 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
276 | MTL_ENABLE_DEBUG_INFO = NO;
277 | SDKROOT = iphoneos;
278 | SUPPORTED_PLATFORMS = iphoneos;
279 | TARGETED_DEVICE_FAMILY = "1,2";
280 | VALIDATE_PRODUCT = YES;
281 | };
282 | name = Profile;
283 | };
284 | 249021D4217E4FDB00AE95B9 /* Profile */ = {
285 | isa = XCBuildConfiguration;
286 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
287 | buildSettings = {
288 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
289 | CLANG_ENABLE_MODULES = YES;
290 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
291 | ENABLE_BITCODE = NO;
292 | INFOPLIST_FILE = Runner/Info.plist;
293 | LD_RUNPATH_SEARCH_PATHS = (
294 | "$(inherited)",
295 | "@executable_path/Frameworks",
296 | );
297 | PRODUCT_BUNDLE_IDENTIFIER = com.example.uiChallenges;
298 | PRODUCT_NAME = "$(TARGET_NAME)";
299 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
300 | SWIFT_VERSION = 5.0;
301 | VERSIONING_SYSTEM = "apple-generic";
302 | };
303 | name = Profile;
304 | };
305 | 97C147031CF9000F007C117D /* Debug */ = {
306 | isa = XCBuildConfiguration;
307 | buildSettings = {
308 | ALWAYS_SEARCH_USER_PATHS = NO;
309 | CLANG_ANALYZER_NONNULL = YES;
310 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
311 | CLANG_CXX_LIBRARY = "libc++";
312 | CLANG_ENABLE_MODULES = YES;
313 | CLANG_ENABLE_OBJC_ARC = YES;
314 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
315 | CLANG_WARN_BOOL_CONVERSION = YES;
316 | CLANG_WARN_COMMA = YES;
317 | CLANG_WARN_CONSTANT_CONVERSION = YES;
318 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
319 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
320 | CLANG_WARN_EMPTY_BODY = YES;
321 | CLANG_WARN_ENUM_CONVERSION = YES;
322 | CLANG_WARN_INFINITE_RECURSION = YES;
323 | CLANG_WARN_INT_CONVERSION = YES;
324 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
325 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
326 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
327 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
328 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
329 | CLANG_WARN_STRICT_PROTOTYPES = YES;
330 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
331 | CLANG_WARN_UNREACHABLE_CODE = YES;
332 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
333 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
334 | COPY_PHASE_STRIP = NO;
335 | DEBUG_INFORMATION_FORMAT = dwarf;
336 | ENABLE_STRICT_OBJC_MSGSEND = YES;
337 | ENABLE_TESTABILITY = YES;
338 | GCC_C_LANGUAGE_STANDARD = gnu99;
339 | GCC_DYNAMIC_NO_PIC = NO;
340 | GCC_NO_COMMON_BLOCKS = YES;
341 | GCC_OPTIMIZATION_LEVEL = 0;
342 | GCC_PREPROCESSOR_DEFINITIONS = (
343 | "DEBUG=1",
344 | "$(inherited)",
345 | );
346 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
347 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
348 | GCC_WARN_UNDECLARED_SELECTOR = YES;
349 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
350 | GCC_WARN_UNUSED_FUNCTION = YES;
351 | GCC_WARN_UNUSED_VARIABLE = YES;
352 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
353 | MTL_ENABLE_DEBUG_INFO = YES;
354 | ONLY_ACTIVE_ARCH = YES;
355 | SDKROOT = iphoneos;
356 | TARGETED_DEVICE_FAMILY = "1,2";
357 | };
358 | name = Debug;
359 | };
360 | 97C147041CF9000F007C117D /* Release */ = {
361 | isa = XCBuildConfiguration;
362 | buildSettings = {
363 | ALWAYS_SEARCH_USER_PATHS = NO;
364 | CLANG_ANALYZER_NONNULL = YES;
365 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
366 | CLANG_CXX_LIBRARY = "libc++";
367 | CLANG_ENABLE_MODULES = YES;
368 | CLANG_ENABLE_OBJC_ARC = YES;
369 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
370 | CLANG_WARN_BOOL_CONVERSION = YES;
371 | CLANG_WARN_COMMA = YES;
372 | CLANG_WARN_CONSTANT_CONVERSION = YES;
373 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
374 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
375 | CLANG_WARN_EMPTY_BODY = YES;
376 | CLANG_WARN_ENUM_CONVERSION = YES;
377 | CLANG_WARN_INFINITE_RECURSION = YES;
378 | CLANG_WARN_INT_CONVERSION = YES;
379 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
380 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
381 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
382 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
383 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
384 | CLANG_WARN_STRICT_PROTOTYPES = YES;
385 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
386 | CLANG_WARN_UNREACHABLE_CODE = YES;
387 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
388 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
389 | COPY_PHASE_STRIP = NO;
390 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
391 | ENABLE_NS_ASSERTIONS = NO;
392 | ENABLE_STRICT_OBJC_MSGSEND = YES;
393 | GCC_C_LANGUAGE_STANDARD = gnu99;
394 | GCC_NO_COMMON_BLOCKS = YES;
395 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
396 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
397 | GCC_WARN_UNDECLARED_SELECTOR = YES;
398 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
399 | GCC_WARN_UNUSED_FUNCTION = YES;
400 | GCC_WARN_UNUSED_VARIABLE = YES;
401 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
402 | MTL_ENABLE_DEBUG_INFO = NO;
403 | SDKROOT = iphoneos;
404 | SUPPORTED_PLATFORMS = iphoneos;
405 | SWIFT_COMPILATION_MODE = wholemodule;
406 | SWIFT_OPTIMIZATION_LEVEL = "-O";
407 | TARGETED_DEVICE_FAMILY = "1,2";
408 | VALIDATE_PRODUCT = YES;
409 | };
410 | name = Release;
411 | };
412 | 97C147061CF9000F007C117D /* Debug */ = {
413 | isa = XCBuildConfiguration;
414 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
415 | buildSettings = {
416 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
417 | CLANG_ENABLE_MODULES = YES;
418 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
419 | ENABLE_BITCODE = NO;
420 | INFOPLIST_FILE = Runner/Info.plist;
421 | LD_RUNPATH_SEARCH_PATHS = (
422 | "$(inherited)",
423 | "@executable_path/Frameworks",
424 | );
425 | PRODUCT_BUNDLE_IDENTIFIER = com.example.uiChallenges;
426 | PRODUCT_NAME = "$(TARGET_NAME)";
427 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
428 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
429 | SWIFT_VERSION = 5.0;
430 | VERSIONING_SYSTEM = "apple-generic";
431 | };
432 | name = Debug;
433 | };
434 | 97C147071CF9000F007C117D /* Release */ = {
435 | isa = XCBuildConfiguration;
436 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
437 | buildSettings = {
438 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
439 | CLANG_ENABLE_MODULES = YES;
440 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
441 | ENABLE_BITCODE = NO;
442 | INFOPLIST_FILE = Runner/Info.plist;
443 | LD_RUNPATH_SEARCH_PATHS = (
444 | "$(inherited)",
445 | "@executable_path/Frameworks",
446 | );
447 | PRODUCT_BUNDLE_IDENTIFIER = com.example.uiChallenges;
448 | PRODUCT_NAME = "$(TARGET_NAME)";
449 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
450 | SWIFT_VERSION = 5.0;
451 | VERSIONING_SYSTEM = "apple-generic";
452 | };
453 | name = Release;
454 | };
455 | /* End XCBuildConfiguration section */
456 |
457 | /* Begin XCConfigurationList section */
458 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
459 | isa = XCConfigurationList;
460 | buildConfigurations = (
461 | 97C147031CF9000F007C117D /* Debug */,
462 | 97C147041CF9000F007C117D /* Release */,
463 | 249021D3217E4FDB00AE95B9 /* Profile */,
464 | );
465 | defaultConfigurationIsVisible = 0;
466 | defaultConfigurationName = Release;
467 | };
468 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
469 | isa = XCConfigurationList;
470 | buildConfigurations = (
471 | 97C147061CF9000F007C117D /* Debug */,
472 | 97C147071CF9000F007C117D /* Release */,
473 | 249021D4217E4FDB00AE95B9 /* Profile */,
474 | );
475 | defaultConfigurationIsVisible = 0;
476 | defaultConfigurationName = Release;
477 | };
478 | /* End XCConfigurationList section */
479 | };
480 | rootObject = 97C146E61CF9000F007C117D /* Project object */;
481 | }
482 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import UIKit
2 | import Flutter
3 |
4 | @UIApplicationMain
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/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/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | Ui Challenges
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ui_challenges
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 | UIViewControllerBasedStatusBarAppearance
45 |
46 | CADisableMinimumFrameDurationOnPhone
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/core/helpers/animation/scroll/animated_scroll_view_item.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | ///An
4 | class AnimatedScrollViewItem extends StatefulWidget {
5 | const AnimatedScrollViewItem(
6 | {Key? key, required this.child, this.curves = Curves.easeInOut})
7 | : super(key: key);
8 |
9 | final Widget child;
10 | final Curve curves;
11 | @override
12 | State createState() => _AnimatedScrollViewItemState();
13 | }
14 |
15 | class _AnimatedScrollViewItemState extends State
16 | with TickerProviderStateMixin {
17 | late AnimationController _animationController;
18 | late Animation _animationScale;
19 |
20 | @override
21 | void initState() {
22 | super.initState();
23 | _animationController = AnimationController(
24 | vsync: this, duration: const Duration(milliseconds: 400))
25 | ..forward();
26 |
27 | _animationScale = Tween(begin: 0.5, end: 1).animate(CurvedAnimation(
28 | parent: _animationController,
29 | curve: widget.curves,
30 | ));
31 | }
32 |
33 | @override
34 | void dispose() {
35 | _animationController.dispose();
36 | super.dispose();
37 | }
38 |
39 | @override
40 | Widget build(BuildContext context) {
41 | return ScaleTransition(
42 | scale: _animationScale,
43 | child: widget.child,
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/costum_switch/custom_switch_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CustomSwitchScreen extends StatefulWidget {
4 | const CustomSwitchScreen({super.key});
5 |
6 | @override
7 | State createState() => _CustomSwitchScreenState();
8 | }
9 |
10 | class _CustomSwitchScreenState extends State
11 | with TickerProviderStateMixin {
12 | //Animate color on Switch value changed
13 | late AnimationController animationController;
14 | late Animation horizontalAnimation;
15 |
16 | @override
17 | void initState() {
18 | super.initState();
19 |
20 | //Animate color on Switch value changed
21 | animationController = AnimationController(
22 | duration: const Duration(milliseconds: 750), vsync: this);
23 |
24 | horizontalAnimation = CurvedAnimation(
25 | parent: animationController,
26 | curve: const Interval(0.0, 1.000, curve: Curves.fastLinearToSlowEaseIn),
27 | );
28 |
29 | animationController
30 | ..addStatusListener((status) {
31 | if (status == AnimationStatus.completed) {
32 | animationController.reset();
33 | }
34 | })
35 | ..addListener(() {
36 | if (animationController.value == 1.000 || isSelected) {
37 | isSelected ? _switchOn() : _switchOff();
38 | }
39 | });
40 | }
41 |
42 | Color _backgroundColor = Colors.black87;
43 | Color _textColor = Colors.white;
44 | Color _switchColor = Colors.black;
45 |
46 | double padding = 16.0;
47 | double paddingBtn = 6.0;
48 |
49 | double positionY = 6.0;
50 | bool isSelected = false;
51 |
52 | void _onPressed() {
53 | setState(() {
54 | isSelected = !isSelected;
55 | Future.delayed(const Duration(milliseconds: 1), () {
56 | isSelected ? _switchOn() : _switchOff();
57 | });
58 | animationController.forward();
59 | print("FINISH>>$isSelected");
60 | });
61 | }
62 |
63 | void _switchOn() {
64 | setState(() {
65 | positionY = 150.0 - (50.0 - paddingBtn * 2) - paddingBtn;
66 |
67 | // set color
68 | _backgroundColor = Colors.amber;
69 | _textColor = Colors.black;
70 | _switchColor = Colors.grey.withOpacity(0.5);
71 | });
72 | }
73 |
74 | void _switchOff() {
75 | setState(() {
76 | positionY = paddingBtn;
77 |
78 | // set color
79 | _backgroundColor = Colors.black;
80 | _textColor = Colors.white;
81 | _switchColor = const Color.fromARGB(255, 65, 65, 65);
82 | });
83 | }
84 |
85 | @override
86 | Widget build(BuildContext context) {
87 | final screenHeight = MediaQuery.of(context).size.height;
88 | return Scaffold(
89 | extendBodyBehindAppBar: true,
90 | appBar: AppBar(
91 | backgroundColor: Colors.transparent,
92 | elevation: 0,
93 | leading:
94 | // appbar
95 | IconButton(
96 | onPressed: () {},
97 | icon: Icon(Icons.arrow_back_ios, size: 24.0, color: _textColor),
98 | ),
99 | centerTitle: true,
100 | title: const Text("Study Room"),
101 | ),
102 | body: Stack(
103 | children: [
104 | //TODO create transition on change background color
105 | //start on bottom to top, Animate color on Switch value changed
106 | // Align(
107 | // alignment: Alignment.bottomCenter,
108 | // child: Stack(
109 | // children: const [],
110 | // ),
111 | // ),
112 |
113 | // background color
114 | Positioned.fill(
115 | child: AnimatedContainer(
116 | color: _backgroundColor,
117 | duration: const Duration(milliseconds: 300),
118 | curve: Curves.easeInOutCubicEmphasized,
119 | ),
120 | ),
121 |
122 | Positioned(
123 | top: 0,
124 | right: padding,
125 | child: SizedBox(
126 | height: screenHeight * 0.70,
127 | width: 50.0,
128 | child: Stack(
129 | children: [
130 | //Line Container
131 | Positioned(
132 | top: 0,
133 | left: (50.0 - 2.0) / 2,
134 | right: (50.0 - 2.0) / 2,
135 | bottom: paddingBtn,
136 | child: const ColoredBox(
137 | color: Colors.white,
138 | ),
139 | ),
140 |
141 | // switch
142 | Positioned(
143 | left: 0,
144 | right: 0,
145 | bottom: 0,
146 | child: InkWell(
147 | onTap: () {
148 | _onPressed();
149 | },
150 | //When changed color then add animation
151 | child: AnimatedContainer(
152 | duration: const Duration(milliseconds: 200),
153 | curve: Curves.fastOutSlowIn,
154 | height: 150.0,
155 | decoration: ShapeDecoration(
156 | shape: const StadiumBorder(),
157 | color: _switchColor,
158 | ),
159 | child: Stack(
160 | children: [
161 | // button in Switch
162 | // add animation
163 | AnimatedPositioned(
164 | duration: const Duration(milliseconds: 300),
165 | curve: Curves.fastOutSlowIn,
166 | top: positionY,
167 | left: paddingBtn,
168 | right: paddingBtn,
169 | child: Container(
170 | height: 50.0 - paddingBtn * 2,
171 | decoration: const BoxDecoration(
172 | shape: BoxShape.circle,
173 | color: Colors.white,
174 | boxShadow: [
175 | BoxShadow(
176 | color: Colors.black12,
177 | spreadRadius: 1,
178 | blurRadius: 1,
179 | ),
180 | ],
181 | ),
182 | ),
183 | ),
184 | ],
185 | ),
186 | ),
187 | ),
188 | ),
189 | ],
190 | ),
191 | ),
192 | ),
193 | ],
194 | ),
195 | );
196 | }
197 | }
198 |
--------------------------------------------------------------------------------
/lib/delivery_app/controller/delivery_controller.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/widgets.dart';
2 |
3 | class DeliveryController extends ChangeNotifier {
4 | //Custom tab selected
5 | int currentIndex = 0;
6 | //Page view selected
7 | int selectedIndex = 0;
8 |
9 | void onPressed(int value) {
10 | currentIndex = value;
11 | print(currentIndex);
12 | notifyListeners();
13 | }
14 |
15 | void onPageChanged(int value) {
16 | selectedIndex = value;
17 | print(selectedIndex);
18 | notifyListeners();
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/lib/delivery_app/delivery_page.dart:
--------------------------------------------------------------------------------
1 | // https://dribbble.com/shots/8231607-Delivery-App
2 | import 'package:flutter/material.dart';
3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4 | import 'package:provider/provider.dart';
5 | import 'package:ui_challenges/delivery_app/style.dart';
6 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/coffes_page.dart';
7 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/fruits_page.dart';
8 |
9 | import 'controller/delivery_controller.dart';
10 | import 'widgets/delivery_page/tab_bar_widget.dart';
11 |
12 | class DeliveryApp extends StatefulWidget {
13 | const DeliveryApp({Key? key}) : super(key: key);
14 |
15 | @override
16 | State createState() => _DeliveryAppState();
17 | }
18 |
19 | class _DeliveryAppState extends State {
20 | late DeliveryController _controller;
21 |
22 | List pages = [
23 | // initial pages
24 | FruitsPage(),
25 | //Next Pages
26 | CoffesPage(),
27 | Container(color: Colors.yellow),
28 | FruitsPage(),
29 | Container(color: Colors.pinkAccent),
30 | ];
31 |
32 | double padding = 24.0;
33 |
34 | @override
35 | Widget build(BuildContext context) {
36 | // _controller = Provider.of(context);
37 | _controller = context.watch();
38 |
39 | return Scaffold(
40 | // appbar
41 | appBar: PreferredSize(
42 | preferredSize: const Size.fromHeight(52.0),
43 | child: AppBar(
44 | backgroundColor: AppColors.white,
45 | elevation: 0,
46 | leading: IconButton(
47 | onPressed: () {},
48 | icon: const Icon(FontAwesomeIcons.arrowLeft,
49 | size: AppStyes.iconSize, color: AppColors.black),
50 | ),
51 | actions: [
52 | IconButton(
53 | onPressed: () {},
54 | icon: const Icon(FontAwesomeIcons.user,
55 | size: AppStyes.iconSize, color: AppColors.black),
56 | ),
57 | ],
58 | ),
59 | ),
60 |
61 | body: Column(
62 | children: [
63 | // ? tabbar
64 | const TabBarWidget(),
65 | // ? tabbarview
66 | Expanded(
67 | child: Container(
68 | color: Colors.white, child: pages[_controller.currentIndex]),
69 | )
70 | ],
71 | ),
72 | );
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/lib/delivery_app/models/product_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:ui_challenges/delivery_app/style.dart';
3 |
4 | class ProductList {
5 | Color color;
6 | String tag;
7 | String title;
8 | String image;
9 |
10 | String market;
11 | String distance;
12 | String grams;
13 | String kcal;
14 |
15 | ProductList(
16 | {this.color = AppColors.black,
17 | this.tag = "Fruits",
18 | this.title = "Pizza",
19 | this.image = "Hello",
20 | this.market = "dart",
21 | this.distance = "m",
22 | this.grams = "grama",
23 | this.kcal = "hhasa"});
24 | }
25 |
26 | List fruitList = [
27 | ProductList(
28 | color: AppColors.blue,
29 | title: "Salad",
30 | image: "assets/images/delivery/pessego.png",
31 | market: "Store Market",
32 | distance: "10min",
33 | grams: "250 grams",
34 | kcal: "697kcal",
35 | ),
36 | ProductList(
37 | color: AppColors.orangeCard,
38 | title: "Atom Plate",
39 | image: "assets/images/delivery/salad.png",
40 | market: "Nosso Super",
41 | distance: "15min",
42 | grams: "052 grams",
43 | kcal: "850kcal",
44 | ),
45 | ProductList(
46 | color: AppColors.pink,
47 | title: "Atom Plate",
48 | image: "assets/images/delivery/organic.png",
49 | market: "Colls Market",
50 | distance: "25min",
51 | grams: "052 grams",
52 | kcal: "676kcal",
53 | ),
54 | ];
55 |
56 | List coffeList = [
57 | ProductList(
58 | color: const Color.fromARGB(255, 0, 105, 53),
59 | title: "Coffe Basic",
60 | image: "assets/images/delivery/coffe1.png",
61 | market: "Supermercado",
62 | distance: "10min",
63 | grams: "052 grams",
64 | kcal: "437kcal",
65 | ),
66 | ProductList(
67 | color: const Color.fromARGB(255, 2, 151, 220),
68 | title: "Coffe Premiun",
69 | image: "assets/images/delivery/coffe2.png",
70 | market: "Nosso Super",
71 | distance: "15min",
72 | grams: "152 grams",
73 | kcal: "345kcal",
74 | ),
75 | ProductList(
76 | color: const Color.fromARGB(255, 164, 64, 203),
77 | title: "Coffe Delta",
78 | image: "assets/images/delivery/coffe3.png",
79 | market: "Candando",
80 | distance: "25min",
81 | grams: "150 grams",
82 | kcal: "476kcal",
83 | ),
84 | ];
85 |
--------------------------------------------------------------------------------
/lib/delivery_app/order_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 | import 'package:ui_challenges/delivery_app/style.dart';
4 | import 'package:ui_challenges/delivery_app/your_order_page.dart';
5 |
6 | import 'models/product_model.dart';
7 |
8 | class OrderPage extends StatefulWidget {
9 | const OrderPage({Key? key, required this.index, required this.isCoffe})
10 | : super(key: key);
11 | final int index;
12 | final bool isCoffe;
13 | @override
14 | State createState() => _OrderPageState();
15 | }
16 |
17 | class _OrderPageState extends State {
18 | // total price
19 | int itemCount = 1;
20 |
21 | final GlobalKey _scaffoldKey = GlobalKey();
22 |
23 | @override
24 | Widget build(BuildContext context) {
25 | var fruitsColor = [
26 | fruitList[widget.index].color.withOpacity(0.6),
27 | fruitList[widget.index].color.withOpacity(0.8),
28 | fruitList[widget.index].color
29 | ];
30 | var coffeColor = [
31 | coffeList[widget.index].color.withOpacity(0.6),
32 | coffeList[widget.index].color.withOpacity(0.8),
33 | coffeList[widget.index].color
34 | ];
35 | return Scaffold(
36 | key: _scaffoldKey,
37 | backgroundColor: Colors.white,
38 | appBar: PreferredSize(
39 | preferredSize: const Size.fromHeight(52.0),
40 | child: AppBar(
41 | backgroundColor: Colors.white,
42 | elevation: 0,
43 | leading: IconButton(
44 | onPressed: () {
45 | Navigator.pop(context);
46 | },
47 | icon: const Icon(FontAwesomeIcons.arrowLeft,
48 | size: AppStyes.iconSize, color: AppColors.black),
49 | ),
50 | actions: [
51 | IconButton(
52 | onPressed: () {},
53 | icon: const Icon(FontAwesomeIcons.user,
54 | size: AppStyes.iconSize, color: AppColors.black),
55 | ),
56 | ],
57 | ),
58 | ),
59 | body: Stack(
60 | children: [
61 | Positioned(
62 | top: MediaQuery.of(context).size.height * 0.30,
63 | left: 0,
64 | right: 0,
65 | bottom: 0,
66 | child: Hero(
67 | tag: "color ${widget.index}",
68 | child: Container(
69 | decoration: BoxDecoration(
70 | borderRadius: const BorderRadius.only(
71 | topLeft: Radius.circular(16.0),
72 | topRight: Radius.circular(16.0)),
73 | gradient: LinearGradient(
74 | colors: widget.isCoffe ? coffeColor : fruitsColor,
75 | begin: Alignment.topCenter,
76 | end: Alignment.bottomCenter,
77 | ),
78 | ),
79 | ),
80 | ),
81 | ),
82 | Positioned(
83 | top: 48.0,
84 | left: 0,
85 | right: 0,
86 | child: Hero(
87 | tag: "image ${widget.index}",
88 | child: Image.asset(
89 | !widget.isCoffe
90 | ? fruitList[widget.index].image
91 | : coffeList[widget.index].image,
92 | fit: BoxFit.contain,
93 | height: 280.0,
94 | width: 50,
95 | )),
96 | ),
97 | Positioned(
98 | top: MediaQuery.of(context).size.height * 0.50,
99 | left: 0,
100 | right: 0,
101 | bottom: AppStyes.padding,
102 | child: Column(
103 | crossAxisAlignment: CrossAxisAlignment.center,
104 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
105 | children: [
106 | // title
107 | Text(
108 | widget.isCoffe
109 | ? coffeList[widget.index].title
110 | : fruitList[widget.index].title,
111 | style: const TextStyle(
112 | fontSize: 28.0,
113 | color: Colors.black,
114 | fontWeight: FontWeight.bold),
115 | ),
116 |
117 | // ? Price
118 | Container(
119 | height: 40.0,
120 | width: 70.0,
121 | decoration: BoxDecoration(
122 | borderRadius: BorderRadius.circular(8.0),
123 | color: Colors.black),
124 | child: Row(
125 | crossAxisAlignment: CrossAxisAlignment.center,
126 | mainAxisAlignment: MainAxisAlignment.center,
127 | children: [
128 | const Text(
129 | "\$",
130 | style: TextStyle(
131 | fontSize: 16.0,
132 | color: Colors.white,
133 | fontWeight: FontWeight.w400),
134 | ),
135 | Text(
136 | (10 * itemCount).toString(),
137 | style: const TextStyle(
138 | fontSize: 24.0,
139 | color: Colors.white,
140 | fontWeight: FontWeight.w400),
141 | ),
142 | ],
143 | ),
144 | ),
145 |
146 | Container(
147 | height: 45.0,
148 | width: 150.0,
149 | decoration: BoxDecoration(
150 | borderRadius: BorderRadius.circular(8.0),
151 | color: Colors.white),
152 | child: Row(
153 | children: [
154 | Expanded(
155 | child: Center(
156 | child: IconButton(
157 | onPressed: () {
158 | setState(() {
159 | if (itemCount > 1) {
160 | itemCount--;
161 | }
162 | });
163 | },
164 | icon: const Icon(Icons.remove,
165 | size: AppStyes.iconSize,
166 | color: AppColors.black),
167 | ),
168 | ),
169 | ),
170 | Expanded(
171 | child: Center(
172 | child: Text(
173 | itemCount.toString(),
174 | style: const TextStyle(
175 | fontSize: 24.0,
176 | color: Colors.black,
177 | fontWeight: FontWeight.bold),
178 | ),
179 | ),
180 | ),
181 | Expanded(
182 | child: Center(
183 | child: IconButton(
184 | onPressed: () {
185 | setState(() {
186 | itemCount++;
187 | });
188 | },
189 | icon: const Icon(Icons.add,
190 | size: 28.0, color: Colors.black),
191 | ),
192 | ),
193 | ),
194 | ],
195 | ),
196 | ),
197 | // ? Button order
198 | Container(
199 | height: 48.0,
200 | width: 250.0,
201 | decoration: BoxDecoration(
202 | borderRadius: BorderRadius.circular(8.0),
203 | color: AppColors.blue),
204 | child: ElevatedButton(
205 | style:
206 | TextButton.styleFrom(backgroundColor: AppColors.blue),
207 | child: const Center(
208 | child: Text(
209 | "Order Now",
210 | style: TextStyle(
211 | fontSize: 16.0,
212 | color: Colors.white,
213 | fontWeight: FontWeight.w600),
214 | ),
215 | ),
216 | onPressed: () {
217 | Navigator.push(
218 | context,
219 | MaterialPageRoute(
220 | builder: (context) => YourOrderPage(widget.index),
221 | ),
222 | );
223 | },
224 | )),
225 | ],
226 | ),
227 | ),
228 | ],
229 | ),
230 | );
231 | }
232 | }
233 |
--------------------------------------------------------------------------------
/lib/delivery_app/style.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AppStyes {
4 | static const iconSize = 26.0;
5 | static const double padding = 24.0;
6 | static const textSelected = TextStyle(
7 | fontSize: 14.0, color: AppColors.orange, fontWeight: FontWeight.bold);
8 | static const textUnselected = TextStyle(
9 | fontSize: 12.0, color: AppColors.blackGray, fontWeight: FontWeight.w400);
10 | static const normalText = TextStyle(
11 | fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.w600);
12 | static const boldText = TextStyle(
13 | fontSize: 18.0, color: AppColors.black, fontWeight: FontWeight.bold);
14 | }
15 |
16 | class AppColors {
17 | static const white = Colors.white;
18 | static const black = Colors.black;
19 | static const blackGray = Color.fromARGB(255, 76, 78, 92);
20 | static const blackLines = Color.fromARGB(137, 0, 0, 0);
21 | static const orange = Color.fromARGB(240, 241, 169, 0);
22 | static const blue = Color.fromRGBO(1, 38, 230, 1);
23 | static const orangeCard = Color.fromRGBO(220, 162, 2, 1);
24 | static const pink = Color.fromRGBO(203, 65, 64, 1);
25 | }
26 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/coffes_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:ui_challenges/delivery_app/controller/delivery_controller.dart';
4 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/details_text.dart';
5 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/food_card.dart';
6 |
7 | import '../../models/product_model.dart';
8 |
9 | class CoffesPage extends StatelessWidget {
10 | CoffesPage({Key? key}) : super(key: key);
11 |
12 | late DeliveryController _controller;
13 | PageController pageController =
14 | PageController(initialPage: 0, viewportFraction: 0.80);
15 | @override
16 | Widget build(BuildContext context) {
17 | _controller = context.watch();
18 |
19 | return Column(
20 | children: [
21 | // container
22 | Expanded(
23 | child: PageView.builder(
24 | scrollDirection: Axis.horizontal,
25 | controller: pageController,
26 | physics: const BouncingScrollPhysics(),
27 | onPageChanged: (int selectedIndex) {
28 | _controller.onPageChanged(selectedIndex);
29 | },
30 | itemCount: coffeList.length,
31 | itemBuilder: (BuildContext context, int index) {
32 | return Column(
33 | children: [
34 | FoodCard(index: index, isCoffe: true),
35 | DetailsText(index: index)
36 | // bottom text
37 | ],
38 | );
39 | }),
40 | ),
41 | ],
42 | );
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/custom_tabs.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:ui_challenges/delivery_app/style.dart';
3 |
4 | class CustomTab extends StatelessWidget {
5 | final String text;
6 | final bool isSelected;
7 | final Function() onPressed;
8 | const CustomTab({
9 | Key? key,
10 | required this.text,
11 | required this.isSelected,
12 | required this.onPressed,
13 | }) : super(key: key);
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | return InkWell(
18 | onTap: onPressed,
19 | child: SizedBox(
20 | width: 100.0,
21 | child: Row(
22 | crossAxisAlignment: CrossAxisAlignment.center,
23 | mainAxisAlignment: MainAxisAlignment.center,
24 | children: [
25 | // circle container
26 | isSelected
27 | ? Container(
28 | margin: const EdgeInsets.only(right: 7.0),
29 | height: 7.2,
30 | width: 7.2,
31 | decoration: const BoxDecoration(
32 | shape: BoxShape.circle, color: AppColors.orange),
33 | )
34 | : Container(),
35 |
36 | // text
37 | AnimatedDefaultTextStyle(
38 | style: isSelected
39 | ? AppStyes.textSelected
40 | : AppStyes.textUnselected,
41 | duration: const Duration(milliseconds: 200),
42 | child: Text(
43 | text,
44 | ))
45 | ],
46 | ),
47 | ),
48 | );
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/details_text.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 | import 'package:provider/provider.dart';
4 | import 'package:ui_challenges/delivery_app/style.dart';
5 |
6 | import '../../controller/delivery_controller.dart';
7 | import '../../models/product_model.dart';
8 |
9 | class DetailsText extends StatelessWidget {
10 | final int index;
11 |
12 | DetailsText({
13 | Key? key,
14 | required this.index,
15 | }) : super(key: key);
16 |
17 | late DeliveryController _controller;
18 | @override
19 | Widget build(BuildContext context) {
20 | _controller = context.watch();
21 |
22 | return Container(
23 | margin: const EdgeInsets.only(
24 | right: AppStyes.padding * 2, bottom: AppStyes.padding * 2),
25 | height: 100.0,
26 | child: _controller.selectedIndex == index
27 | ? Column(
28 | crossAxisAlignment: CrossAxisAlignment.start,
29 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
30 | children: [
31 | Expanded(
32 | child: Row(
33 | children: [
34 | Text(
35 | fruitList[_controller.selectedIndex].market,
36 | style: AppStyes.boldText,
37 | ),
38 | const Spacer(),
39 | const Icon(FontAwesomeIcons.clock,
40 | size: 14.0, color: Colors.black),
41 | const SizedBox(width: 4.0),
42 | Text(
43 | fruitList[index].distance,
44 | style: AppStyes.normalText,
45 | ),
46 | ],
47 | ),
48 | ),
49 | const Divider(height: 1.0, color: AppColors.blackLines),
50 | const Expanded(
51 | child: Text(
52 | "Calories :",
53 | style: AppStyes.normalText,
54 | ),
55 | ),
56 | const Divider(height: 1.0, color: AppColors.blackLines),
57 | Expanded(
58 | child: Row(
59 | children: [
60 | Text(
61 | fruitList[_controller.selectedIndex].grams,
62 | style: AppStyes.normalText,
63 | ),
64 | const Spacer(),
65 | Text(
66 | fruitList[_controller.selectedIndex].kcal,
67 | style: AppStyes.normalText,
68 | ),
69 | ],
70 | ),
71 | ),
72 | ],
73 | )
74 | : const SizedBox(),
75 | );
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/food_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:ui_challenges/delivery_app/order_page.dart';
3 | import 'package:ui_challenges/delivery_app/style.dart';
4 |
5 | import '../../models/product_model.dart';
6 |
7 | class FoodCard extends StatefulWidget {
8 | const FoodCard({Key? key, required this.index, required this.isCoffe})
9 | : super(key: key);
10 | final int index;
11 | final bool isCoffe;
12 | @override
13 | State createState() => _FoodCardState();
14 | }
15 |
16 | class _FoodCardState extends State {
17 | @override
18 | Widget build(BuildContext context) {
19 | var fruitsColor = [
20 | fruitList[widget.index].color.withOpacity(0.6),
21 | fruitList[widget.index].color.withOpacity(0.8),
22 | fruitList[widget.index].color
23 | ];
24 | var coffeColor = [
25 | coffeList[widget.index].color.withOpacity(0.6),
26 | coffeList[widget.index].color.withOpacity(0.8),
27 | coffeList[widget.index].color
28 | ];
29 | return Expanded(
30 | child: Stack(
31 | children: [
32 | Positioned(
33 | top: 0,
34 | left: 0,
35 | right: 0,
36 | bottom: 0,
37 | child: InkWell(
38 | onTap: () {
39 | Navigator.push(
40 | context,
41 | MaterialPageRoute(
42 | builder: (context) => OrderPage(
43 | index: widget.index,
44 | isCoffe: widget.isCoffe,
45 | )));
46 | },
47 | child: Transform.translate(
48 | offset: const Offset(-AppStyes.padding, 0.0),
49 | child: Hero(
50 | // hero color tag
51 | tag: "color ${widget.index}",
52 | child: Container(
53 | margin: const EdgeInsets.only(
54 | top: AppStyes.padding,
55 | right: AppStyes.padding,
56 | bottom: AppStyes.padding),
57 | padding: const EdgeInsets.all(AppStyes.padding),
58 | decoration: BoxDecoration(
59 | borderRadius: BorderRadius.circular(32.0),
60 | gradient: LinearGradient(
61 | colors: widget.isCoffe ? coffeColor : fruitsColor,
62 | begin: Alignment.topCenter,
63 | end: Alignment.bottomCenter,
64 | ),
65 | ),
66 | ),
67 | ),
68 | ),
69 | ),
70 | ),
71 | Positioned(
72 | top: AppStyes.padding * 2,
73 | left: 0,
74 | right: AppStyes.padding * 3,
75 | bottom: AppStyes.padding,
76 | child: Column(
77 | crossAxisAlignment: CrossAxisAlignment.start,
78 | children: [
79 | // tag
80 | Text(
81 | widget.isCoffe
82 | ? coffeList[widget.index].tag
83 | : fruitList[widget.index].tag,
84 | style: const TextStyle(
85 | fontSize: 20.0,
86 | color: Colors.white,
87 | fontWeight: FontWeight.w600),
88 | ),
89 | const SizedBox(height: AppStyes.padding / 2),
90 | // title
91 | Text(
92 | widget.isCoffe
93 | ? coffeList[widget.index].title
94 | : fruitList[widget.index].title,
95 | style: const TextStyle(
96 | fontSize: 26.0,
97 | color: Colors.white,
98 | fontWeight: FontWeight.bold),
99 | ),
100 |
101 | const Spacer(),
102 |
103 | // image
104 | Hero(
105 | tag: "image ${widget.index}",
106 | flightShuttleBuilder: (
107 | BuildContext flightContext,
108 | Animation animation,
109 | HeroFlightDirection flightDirection,
110 | BuildContext fromHeroContext,
111 | BuildContext toHeroContext,
112 | ) {
113 | Animation newAnimation =
114 | Tween(begin: 0, end: 1.2).animate(animation);
115 | if (flightDirection == HeroFlightDirection.pop) {
116 | newAnimation = ReverseAnimation(newAnimation);
117 | }
118 | return RotationTransition(
119 | turns: newAnimation,
120 | child: toHeroContext.widget,
121 | );
122 | },
123 | child: Image.asset(
124 | widget.isCoffe
125 | ? coffeList[widget.index].image
126 | : fruitList[widget.index].image,
127 | fit: BoxFit.contain)),
128 | ],
129 | ),
130 | ),
131 | ],
132 | ),
133 | );
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/fruits_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:ui_challenges/delivery_app/controller/delivery_controller.dart';
4 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/details_text.dart';
5 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/food_card.dart';
6 |
7 | import '../../models/product_model.dart';
8 |
9 | class FruitsPage extends StatelessWidget {
10 | FruitsPage({Key? key}) : super(key: key);
11 |
12 | late DeliveryController _controller;
13 | PageController pageController =
14 | PageController(initialPage: 0, viewportFraction: 0.80);
15 | @override
16 | Widget build(BuildContext context) {
17 | _controller = context.watch();
18 | return Column(
19 | children: [
20 | // container
21 | Expanded(
22 | child: PageView.builder(
23 | scrollDirection: Axis.horizontal,
24 | controller: pageController,
25 | physics: const BouncingScrollPhysics(),
26 | onPageChanged: (int selectedIndex) {
27 | _controller.onPageChanged(selectedIndex);
28 | },
29 | itemCount: fruitList.length,
30 | itemBuilder: (BuildContext context, int index) {
31 | return Column(
32 | children: [
33 | FoodCard(index: index, isCoffe: false),
34 | DetailsText(index: index)
35 | // bottom text
36 | ],
37 | );
38 | }),
39 | ),
40 | ],
41 | );
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/tab_bar_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:ui_challenges/delivery_app/controller/delivery_controller.dart';
4 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/custom_tabs.dart';
5 |
6 | class TabBarWidget extends StatefulWidget {
7 | const TabBarWidget({Key? key}) : super(key: key);
8 |
9 | @override
10 | State createState() => _TabBarWidgetState();
11 | }
12 |
13 | class _TabBarWidgetState extends State {
14 | late DeliveryController _controller;
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | _controller = Provider.of(context);
19 |
20 | return Container(
21 | height: 52.0,
22 | color: Colors.white,
23 | child: ListView(
24 | physics: const BouncingScrollPhysics(),
25 | scrollDirection: Axis.horizontal,
26 | shrinkWrap: true,
27 | children: [
28 | CustomTab(
29 | text: "Fruits",
30 | isSelected: _controller.currentIndex == 0,
31 | onPressed: () {
32 | setState(() => _controller.onPressed(0));
33 | },
34 | ),
35 | CustomTab(
36 | text: "Coffees",
37 | isSelected: _controller.currentIndex == 1,
38 | onPressed: () {
39 | _controller.onPressed(1);
40 | },
41 | ),
42 | CustomTab(
43 | text: "Vegetables",
44 | isSelected: _controller.currentIndex == 2,
45 | onPressed: () {
46 | _controller.onPressed(2);
47 | },
48 | ),
49 | CustomTab(
50 | text: "IceCreams",
51 | isSelected: _controller.currentIndex == 3,
52 | onPressed: () {
53 | _controller.onPressed(3);
54 | },
55 | ),
56 | CustomTab(
57 | text: "Coffees",
58 | isSelected: _controller.currentIndex == 4,
59 | onPressed: () {
60 | _controller.onPressed(4);
61 | },
62 | ),
63 | ],
64 | ),
65 | );
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/lib/delivery_app/widgets/delivery_page/view_tab_bar_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:provider/provider.dart';
3 | import 'package:ui_challenges/delivery_app/controller/delivery_controller.dart';
4 | import 'package:ui_challenges/delivery_app/widgets/delivery_page/custom_tabs.dart';
5 |
6 | class ViewTabBarWidget extends StatefulWidget {
7 | const ViewTabBarWidget({Key? key}) : super(key: key);
8 |
9 | @override
10 | State createState() => _ViewTabBarWidgetState();
11 | }
12 |
13 | class _ViewTabBarWidgetState extends State {
14 | late DeliveryController _controller;
15 | @override
16 | Widget build(BuildContext context) {
17 | _controller = context.watch();
18 | return Container(
19 | height: 52.0,
20 | color: Colors.white,
21 | child: ListView(
22 | physics: const BouncingScrollPhysics(),
23 | scrollDirection: Axis.horizontal,
24 | shrinkWrap: true,
25 | children: [
26 | CustomTab(
27 | text: "Fruits",
28 | isSelected: _controller.currentIndex == 0,
29 | onPressed: () {
30 | setState(() {
31 | _controller.onPressed(0);
32 | });
33 | },
34 | ),
35 | CustomTab(
36 | text: "Vegetables",
37 | isSelected: _controller.currentIndex == 1,
38 | onPressed: () {
39 | setState(() {
40 | _controller.onPressed(1);
41 | });
42 | },
43 | ),
44 | CustomTab(
45 | text: "Coffees",
46 | isSelected: _controller.currentIndex == 2,
47 | onPressed: () {
48 | setState(() {
49 | _controller.onPressed(2);
50 | });
51 | },
52 | ),
53 | CustomTab(
54 | text: "IceCreams",
55 | isSelected: _controller.currentIndex == 3,
56 | onPressed: () {
57 | setState(() {
58 | _controller.onPressed(3);
59 | });
60 | },
61 | ),
62 | CustomTab(
63 | text: "Coffees",
64 | isSelected: _controller.currentIndex == 4,
65 | onPressed: () {
66 | setState(() {
67 | _controller.onPressed(4);
68 | });
69 | },
70 | ),
71 | ],
72 | ),
73 | );
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/lib/delivery_app/your_order_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:ui_challenges/delivery_app/style.dart';
3 |
4 | import 'models/product_model.dart';
5 |
6 | class YourOrderPage extends StatefulWidget {
7 | final int index;
8 |
9 | const YourOrderPage(this.index);
10 |
11 | @override
12 | _YourOrderPageState createState() => _YourOrderPageState();
13 | }
14 |
15 | class _YourOrderPageState extends State {
16 | double padding = 24.0;
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | return Scaffold(
21 | backgroundColor: AppColors.white,
22 | body: Column(
23 | children: [
24 | Expanded(
25 | flex: 4,
26 | child: Center(
27 | child: Image.asset("assets/images/delivery/boy.gif",
28 | fit: BoxFit.contain),
29 | ),
30 | ),
31 | Expanded(
32 | flex: 4,
33 | child: Stack(
34 | children: [
35 | Hero(
36 | tag: "color ${widget.index}",
37 | child: Container(
38 | padding: EdgeInsets.all(padding),
39 | decoration: BoxDecoration(
40 | borderRadius: const BorderRadius.only(
41 | topLeft: Radius.circular(16.0),
42 | topRight: Radius.circular(16.0)),
43 | gradient: LinearGradient(
44 | colors: [
45 | fruitList[widget.index].color.withOpacity(0.6),
46 | fruitList[widget.index].color.withOpacity(0.7),
47 | fruitList[widget.index].color
48 | ],
49 | begin: Alignment.topCenter,
50 | end: Alignment.bottomCenter,
51 | ),
52 | ),
53 | ),
54 | ),
55 | Positioned(
56 | top: padding,
57 | left: 0,
58 | right: 0,
59 | bottom: padding,
60 | child: Column(
61 | crossAxisAlignment: CrossAxisAlignment.center,
62 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
63 | children: [
64 | //
65 | const Text(
66 | "Your Order",
67 | style: TextStyle(
68 | fontSize: 20.0,
69 | color: Colors.black,
70 | fontWeight: FontWeight.w600,
71 | ),
72 | ),
73 |
74 | const Text(
75 | "On The Way",
76 | style: TextStyle(
77 | fontSize: 28.0,
78 | color: Colors.black,
79 | fontWeight: FontWeight.w600,
80 | ),
81 | ),
82 |
83 | const Spacer(),
84 |
85 | const Text(
86 | "#78376",
87 | style: TextStyle(
88 | fontSize: 28.0,
89 | color: Colors.white,
90 | fontWeight: FontWeight.w600,
91 | ),
92 | ),
93 |
94 | const Text(
95 | "Order Number",
96 | style: TextStyle(
97 | fontSize: 14.0,
98 | color: Colors.black,
99 | fontWeight: FontWeight.w400,
100 | ),
101 | ),
102 |
103 | const Spacer(),
104 |
105 | Container(
106 | height: 48.0,
107 | width: 250.0,
108 | decoration: BoxDecoration(
109 | borderRadius: BorderRadius.circular(8.0),
110 | color: AppColors.blue),
111 | child: ElevatedButton(
112 | style: TextButton.styleFrom(
113 | backgroundColor: AppColors.blue),
114 | child: const Center(
115 | child: Text(
116 | "Check The Recipe",
117 | style: TextStyle(
118 | fontSize: 16.0,
119 | color: Colors.white,
120 | fontWeight: FontWeight.w600),
121 | ),
122 | ),
123 | onPressed: () {},
124 | )),
125 | ],
126 | ),
127 | ),
128 | ],
129 | ),
130 | ),
131 | ],
132 | ),
133 | );
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/lib/earbuds_remote/home_screen.dart:
--------------------------------------------------------------------------------
1 | //https://dribbble.com/shots/19140480-earbuds-remote-control-application
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:simple_circular_progress_bar/simple_circular_progress_bar.dart';
5 |
6 | class HomeScreen extends StatefulWidget {
7 | const HomeScreen({Key? key}) : super(key: key);
8 |
9 | @override
10 | State createState() => _HomeScreenState();
11 | }
12 |
13 | class _HomeScreenState extends State {
14 | @override
15 | Widget build(BuildContext context) {
16 | final screenSize = MediaQuery.of(context).size;
17 | ValueNotifier? valueNotifier = ValueNotifier(40.0);
18 | return Scaffold(
19 | body: SafeArea(
20 | child: SizedBox(
21 | //color: Colors.black,
22 | height: screenSize.height,
23 | width: screenSize.width,
24 | child: ListView(
25 | children: [
26 | const Divider(),
27 | Row(
28 | children: [
29 | Container(
30 | padding: const EdgeInsets.only(bottom: 15),
31 | width: 150,
32 | height: 160,
33 | decoration: BoxDecoration(
34 | color: Colors.white,
35 | borderRadius: BorderRadius.circular(10),
36 | border: Border.all(color: Colors.grey)),
37 | child: Stack(children: [
38 | Align(
39 | alignment: Alignment.center,
40 | child: SimpleCircularProgressBar(
41 | progressColors: const [
42 | Color.fromRGBO(244, 154, 17, 1)
43 | ],
44 | backColor: const Color.fromRGBO(255, 235, 203, 1),
45 | fullProgressColor:
46 | const Color.fromRGBO(22, 94, 222, 1),
47 | progressStrokeWidth: 10,
48 | backStrokeWidth: 10,
49 | startAngle: 180,
50 | valueNotifier: valueNotifier,
51 | onGetText: (double value) {
52 | return const Text(
53 | '60% \n Baterry',
54 | textAlign: TextAlign.center,
55 | style: TextStyle(
56 | fontSize: 14,
57 | fontWeight: FontWeight.bold,
58 | color: Color.fromARGB(255, 4, 44, 77)),
59 | );
60 | },
61 | ),
62 | ),
63 | Positioned(
64 | bottom: 0,
65 | right: 20,
66 | left: 20,
67 | child: Container(
68 | decoration: const BoxDecoration(
69 | shape: BoxShape.circle,
70 | color: Color.fromARGB(255, 255, 255, 255),
71 | ),
72 | width: 55,
73 | height: 55,
74 | ),
75 | ),
76 | Positioned(
77 | bottom: 1,
78 | right: 0,
79 | left: 0,
80 | child: Container(
81 | decoration: const BoxDecoration(
82 | shape: BoxShape.circle,
83 | color: Color.fromRGBO(255, 235, 203, 1),
84 | ),
85 | width: 40,
86 | height: 40,
87 | child: const Icon(
88 | Icons.save,
89 | color: Color.fromRGBO(244, 154, 17, 1),
90 | ),
91 | ),
92 | ),
93 | ]),
94 | ),
95 | ],
96 | )
97 | ],
98 | ))),
99 | appBar: AppBar(
100 | backgroundColor:
101 | const Color.fromARGB(255, 206, 37, 37).withOpacity(0.5),
102 | actions: const [Icon(Icons.arrow_back), Icon(Icons.arrow_back)],
103 | title: Row(
104 | mainAxisSize: MainAxisSize.min,
105 | children: [
106 | Image.asset(
107 | "assets/images/earbuds/logo.png",
108 | width: 25,
109 | height: 25,
110 | ),
111 | //Image.asset("assets/images/earbuds/logo.png"),
112 | const SizedBox(
113 | width: 5,
114 | ),
115 | const Text(
116 | "Onipod",
117 | style: TextStyle(
118 | fontWeight: FontWeight.w700,
119 | color: Color.fromRGBO(4, 13, 37, 1)),
120 | )
121 | ],
122 | ),
123 | elevation: 0,
124 | centerTitle: true,
125 | ),
126 | bottomNavigationBar: BottomNavigationBar(
127 | unselectedItemColor: const Color.fromARGB(255, 56, 70, 82),
128 | selectedItemColor: const Color.fromARGB(255, 11, 42, 68),
129 | items: const [
130 | BottomNavigationBarItem(icon: Icon(Icons.home), label: ""),
131 | BottomNavigationBarItem(icon: Icon(Icons.search), label: ""),
132 | BottomNavigationBarItem(icon: Icon(Icons.bookmarks), label: ""),
133 | BottomNavigationBarItem(icon: Icon(Icons.settings), label: "")
134 | ]),
135 | );
136 | }
137 | }
138 |
--------------------------------------------------------------------------------
/lib/earbuds_remote/welcome_screen.dart:
--------------------------------------------------------------------------------
1 | //https://dribbble.com/shots/19140480-earbuds-remote-control-application
2 |
3 | import 'dart:ui';
4 |
5 | import 'package:flutter/cupertino.dart';
6 | import 'package:flutter/material.dart';
7 |
8 | class MyState {
9 | final int _counter = 0;
10 | }
11 |
12 | class WelcomeScreen extends StatelessWidget implements MyState {
13 | WelcomeScreen({Key? key}) : super(key: key);
14 |
15 | @override
16 | int _counter = 0;
17 | @override
18 | _increment() => _counter++;
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | const String subTitle = "Full control over your oniexpod";
23 | return Scaffold(
24 | extendBodyBehindAppBar: true,
25 | backgroundColor: Colors.white,
26 | appBar: AppBar(
27 | backgroundColor: Colors.white.withOpacity(0.0),
28 | title: Row(
29 | mainAxisSize: MainAxisSize.min,
30 | children: [
31 | Image.asset(
32 | "assets/images/earbuds/logo.png",
33 | width: 25,
34 | height: 25,
35 | ),
36 | //Image.asset("assets/images/earbuds/logo.png"),
37 | const SizedBox(
38 | width: 5,
39 | ),
40 | const Text(
41 | "Onipod",
42 | style: TextStyle(
43 | fontWeight: FontWeight.w700,
44 | color: Color.fromRGBO(4, 13, 37, 1)),
45 | )
46 | ],
47 | ),
48 | elevation: 0,
49 | centerTitle: true,
50 | ),
51 | body: Stack(
52 | children: [
53 | // ? Blured background image
54 | Positioned(
55 | right: -20,
56 | child: Transform.rotate(
57 | angle: 150,
58 | child: Container(
59 | width: 150,
60 | height: 150,
61 | decoration: const BoxDecoration(
62 | shape: BoxShape.circle,
63 | image: DecorationImage(
64 | image: AssetImage(
65 | "assets/images/earbuds/single.png",
66 | ),
67 | ),
68 | ),
69 | ),
70 | ),
71 | ),
72 | //Blured Background circle
73 | Positioned(
74 | left: -50,
75 | bottom: 50,
76 | child: Stack(
77 | children: [
78 | Container(
79 | width: 180,
80 | height: 180,
81 | decoration: const BoxDecoration(
82 | shape: BoxShape.circle,
83 | gradient: LinearGradient(
84 | begin: Alignment.topRight,
85 | end: Alignment.bottomLeft,
86 | colors: [
87 | Colors.orange,
88 | Colors.red,
89 | Colors.orange,
90 | Colors.red,
91 | ],
92 | ),
93 | ),
94 | child: BackdropFilter(
95 | filter: ImageFilter.blur(sigmaX: 35, sigmaY: 35),
96 | child: const SizedBox(),
97 | )),
98 | ],
99 | ),
100 | ),
101 |
102 | Align(
103 | alignment: Alignment.bottomCenter,
104 | child: Container(
105 | color: Colors.transparent,
106 | width: 400,
107 | height: 300,
108 | padding: const EdgeInsets.only(
109 | right: 10,
110 | left: 2,
111 | bottom: 10,
112 | ),
113 | child: Column(
114 | children: [
115 | Container(
116 | margin: const EdgeInsets.symmetric(
117 | vertical: 10, horizontal: 20),
118 | child: Text(
119 | _counter.toString(),
120 | style: const TextStyle(
121 | fontWeight: FontWeight.w900,
122 | fontSize: 40,
123 | color: Color.fromRGBO(4, 13, 37, 1)),
124 | ),
125 | ),
126 | const Spacer(),
127 | //Button lets go
128 |
129 | Container(
130 | margin: const EdgeInsets.symmetric(horizontal: 20),
131 | height: 50,
132 | width: MediaQuery.of(context).size.width,
133 | child: TextButton(
134 | onPressed: () {
135 | _increment();
136 | },
137 | style: TextButton.styleFrom(
138 | backgroundColor: const Color.fromRGBO(3, 23, 55, 1),
139 | side: const BorderSide(
140 | color: Color.fromRGBO(3, 23, 55, 1)),
141 | shape: RoundedRectangleBorder(
142 | borderRadius: BorderRadius.circular(50),
143 | side: const BorderSide(color: Colors.red)),
144 | ),
145 | child: Row(
146 | // crossAxisAlignment: CrossAxisAlignment.center,
147 | mainAxisAlignment: MainAxisAlignment.center,
148 | children: const [
149 | Text(
150 | "Lets Go",
151 | style: TextStyle(color: Colors.white),
152 | ),
153 | SizedBox(width: 8),
154 | Icon(
155 | CupertinoIcons.arrow_right,
156 | color: Colors.white,
157 | size: 18,
158 | )
159 | ],
160 | )),
161 | ),
162 | // ElevatedButton(
163 | // style: ButtonStyle(
164 | // minimumSize: MaterialStateProperty(100, 50)),
165 | // onPressed: () {},
166 | // child: const Text("HELLO"))
167 | ],
168 | ),
169 | ),
170 | )
171 | ],
172 | ),
173 | );
174 | }
175 | }
176 |
--------------------------------------------------------------------------------
/lib/light_switch_ui/light_switch_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class LightSwitchScreen extends StatefulWidget {
4 | const LightSwitchScreen({super.key});
5 |
6 | @override
7 | State createState() => _LightSwitchScreenState();
8 | }
9 |
10 | class _LightSwitchScreenState extends State
11 | with TickerProviderStateMixin {
12 | //Animate color on Switch value changed
13 | late AnimationController animationController;
14 | late Animation horizontalAnimation;
15 |
16 | @override
17 | void initState() {
18 | super.initState();
19 |
20 | //Animate color on Switch value changed
21 | animationController = AnimationController(
22 | duration: const Duration(milliseconds: 750), vsync: this);
23 |
24 | horizontalAnimation = CurvedAnimation(
25 | parent: animationController,
26 | curve: const Interval(0.0, 1.000, curve: Curves.fastLinearToSlowEaseIn),
27 | );
28 |
29 | animationController
30 | ..addStatusListener((status) {
31 | if (status == AnimationStatus.completed) {
32 | animationController.reset();
33 | }
34 | })
35 | ..addListener(() {
36 | if (animationController.value == 1.000 || isSelected) {
37 | isSelected ? _switchOn() : _switchOff();
38 | }
39 | });
40 | }
41 |
42 | Color _backgroundColor = Colors.black87;
43 | Color _textColor = Colors.white;
44 | Color _switchColor = Colors.black;
45 |
46 | double padding = 16.0;
47 | double paddingBtn = 6.0;
48 |
49 | double positionY = 6.0;
50 | bool isSelected = false;
51 |
52 | void _onPressed() {
53 | setState(() {
54 | isSelected = !isSelected;
55 | Future.delayed(const Duration(milliseconds: 1), () {
56 | isSelected ? _switchOn() : _switchOff();
57 | });
58 | animationController.forward();
59 | print("FINISH>>$isSelected");
60 | });
61 | }
62 |
63 | void _switchOn() {
64 | setState(() {
65 | positionY = 150.0 - (50.0 - paddingBtn * 2) - paddingBtn;
66 |
67 | // set color
68 | _backgroundColor = Colors.amber;
69 | _textColor = Colors.black;
70 | _switchColor = Colors.grey.withOpacity(0.5);
71 | });
72 | }
73 |
74 | void _switchOff() {
75 | setState(() {
76 | positionY = paddingBtn;
77 |
78 | // set color
79 | _backgroundColor = Colors.black;
80 | _textColor = Colors.white;
81 | _switchColor = const Color.fromARGB(255, 65, 65, 65);
82 | });
83 | }
84 |
85 | @override
86 | Widget build(BuildContext context) {
87 | final screenHeight = MediaQuery.of(context).size.height;
88 | return Scaffold(
89 | extendBodyBehindAppBar: true,
90 | appBar: AppBar(
91 | backgroundColor: Colors.transparent,
92 | elevation: 0,
93 | leading:
94 | // appbar
95 | IconButton(
96 | onPressed: () {},
97 | icon: Icon(Icons.arrow_back_ios, size: 24.0, color: _textColor),
98 | ),
99 | centerTitle: true,
100 | title: const Text("Study Room"),
101 | ),
102 | body: Stack(
103 | children: [
104 | //TODO create transition on change background color
105 | //start on bottom to top, Animate color on Switch value changed
106 | // Align(
107 | // alignment: Alignment.bottomCenter,
108 | // child: Stack(
109 | // children: const [],
110 | // ),
111 | // ),
112 |
113 | // background color
114 | Positioned.fill(
115 | child: AnimatedContainer(
116 | color: _backgroundColor,
117 | duration: const Duration(milliseconds: 600),
118 | curve: Curves.easeInOutCubicEmphasized,
119 | ),
120 | ),
121 |
122 | Positioned(
123 | top: 0,
124 | right: padding,
125 | child: SizedBox(
126 | height: screenHeight * 0.70,
127 | width: 50.0,
128 | child: Stack(
129 | children: [
130 | //Line Container
131 | Positioned(
132 | top: 0,
133 | left: (50.0 - 2.0) / 2,
134 | right: (50.0 - 2.0) / 2,
135 | bottom: paddingBtn,
136 | child: const ColoredBox(
137 | color: Colors.white,
138 | ),
139 | ),
140 |
141 | // switch
142 | Positioned(
143 | left: 0,
144 | right: 0,
145 | bottom: 0,
146 | child: InkWell(
147 | onTap: () {
148 | _onPressed();
149 | },
150 | //When changed color then add animation
151 | child: AnimatedContainer(
152 | duration: const Duration(milliseconds: 200),
153 | curve: Curves.fastOutSlowIn,
154 | height: 150.0,
155 | decoration: ShapeDecoration(
156 | shape: const StadiumBorder(),
157 | color: _switchColor,
158 | ),
159 | child: Stack(
160 | children: [
161 | // button in Switch
162 | // add animation
163 | AnimatedPositioned(
164 | duration: const Duration(milliseconds: 300),
165 | curve: Curves.fastOutSlowIn,
166 | top: positionY,
167 | left: paddingBtn,
168 | right: paddingBtn,
169 | child: Container(
170 | height: 50.0 - paddingBtn * 2,
171 | decoration: const BoxDecoration(
172 | shape: BoxShape.circle,
173 | color: Colors.white,
174 | boxShadow: [
175 | BoxShadow(
176 | color: Colors.black12,
177 | spreadRadius: 1,
178 | blurRadius: 1,
179 | ),
180 | ],
181 | ),
182 | ),
183 | ),
184 | ],
185 | ),
186 | ),
187 | ),
188 | ),
189 | ],
190 | ),
191 | ),
192 | ),
193 | ],
194 | ),
195 | );
196 | }
197 | }
198 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'my_app.dart';
4 |
5 | // ? device preview run
6 | // void main() => runApp(DevicePreview(
7 | // enabled: !kReleaseMode,
8 | // builder: (context) => const MyApp(), // Wrap your app
9 | // ));
10 |
11 | // ? normal run app
12 | void main() {
13 | runApp(const MyApp());
14 | }
15 |
16 |
17 |
18 | // ? delivery run app
19 | // void main() {
20 | // runApp(ChangeNotifierProvider(
21 | // create: (context) => DeliveryController(),
22 | // child: const MyApp()));
23 | // }
24 |
--------------------------------------------------------------------------------
/lib/my_app.dart:
--------------------------------------------------------------------------------
1 | import 'package:device_preview/device_preview.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:ui_challenges/light_switch_ui/light_switch_screen.dart';
4 |
5 | class MyApp extends StatelessWidget {
6 | const MyApp({Key? key}) : super(key: key);
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return MaterialApp(
11 | useInheritedMediaQuery: true,
12 | locale: DevicePreview.locale(context),
13 | builder: DevicePreview.appBuilder,
14 | title: 'UI Challenges',
15 | theme: ThemeData(
16 | primarySwatch: Colors.blue,
17 | ),
18 | //home: WelcomeScreen(),
19 | //home: SettingsScreenUi(),
20 | // home: const PokemonPage(),
21 | //home: const WelcomeScreen(), // Work App
22 | home: const LightSwitchScreen(),
23 | );
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/model/pokemon_model.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 |
4 | class PokemonModel {
5 | String name;
6 | String element;
7 | String height;
8 | String weight;
9 | double tagWidth;
10 | List listFraquezas;
11 | PokemonModel({
12 | this.tagWidth = 80,
13 | required this.name,
14 | required this.element,
15 | required this.height,
16 | required this.weight,
17 | required this.listFraquezas,
18 | });
19 | }
20 |
21 | class FraquezasModel {
22 | String text;
23 | IconData iconData;
24 | Color color;
25 | Color borderColor;
26 | FraquezasModel({
27 | required this.text,
28 | required this.iconData,
29 | required this.color,
30 | required this.borderColor,
31 | });
32 | }
33 |
34 | List fraquezasBlastoise = [
35 | FraquezasModel(
36 | text: "Eletrico",
37 | iconData: Icons.electric_bolt,
38 | color: Colors.yellow,
39 | borderColor: Colors.yellowAccent),
40 | FraquezasModel(
41 | text: "Grama",
42 | iconData: Icons.electric_bolt,
43 | color: Colors.green,
44 | borderColor: Colors.greenAccent),
45 | FraquezasModel(
46 | text: "Agua",
47 | iconData: FontAwesomeIcons.droplet,
48 | color: Colors.blue,
49 | borderColor: Colors.blueAccent),
50 | ];
51 | List fraquezasCharizard = [
52 | FraquezasModel(
53 | text: "Eletrico",
54 | iconData: Icons.electric_bolt,
55 | color: Colors.yellow,
56 | borderColor: Colors.yellowAccent),
57 | FraquezasModel(
58 | text: "Rocha",
59 | iconData: Icons.category,
60 | color: Colors.brown,
61 | borderColor: Colors.brown),
62 | FraquezasModel(
63 | text: "Agua",
64 | iconData: FontAwesomeIcons.droplet,
65 | color: Colors.blue,
66 | borderColor: Colors.blueAccent),
67 | ];
68 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/pokemon_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 | import 'package:ui_challenges/pokemon_ui/style.dart';
4 | import 'package:ui_challenges/pokemon_ui/widgets/card_pokemon_info.dart';
5 |
6 | class PokemonPage extends StatelessWidget {
7 | const PokemonPage({Key? key}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | Size screenSize = MediaQuery.of(context).size;
12 | //Testing
13 | String weightPokemon = "123.05kg";
14 |
15 | return Scaffold(
16 | extendBodyBehindAppBar: true,
17 | appBar: AppBar(
18 | backgroundColor: Colors.transparent,
19 | elevation: 0,
20 | leading: IconButton(
21 | onPressed: () {},
22 | icon: const Icon(
23 | FontAwesomeIcons.arrowLeft,
24 | ),
25 | ),
26 | actions: [
27 | IconButton(
28 | onPressed: () {},
29 | icon: const Icon(
30 | FontAwesomeIcons.star,
31 | ),
32 | ),
33 | ],
34 | ),
35 | body: Container(
36 | decoration: const BoxDecoration(
37 | gradient: LinearGradient(
38 | begin: Alignment.topCenter,
39 | end: Alignment.bottomCenter,
40 | colors: [
41 | AppColors.topBlue,
42 | AppColors.centerBlue,
43 | AppColors.primaryBlue
44 | ])),
45 | child: SizedBox(
46 | width: screenSize.width,
47 | height: screenSize.height,
48 | child: Stack(alignment: Alignment.center, children: [
49 | // ? Main image
50 | Positioned(
51 | top: 40,
52 | child: SizedBox(
53 | height: 200,
54 | child: Image.asset("assets/images/pokemon/Blastoise.webp"),
55 | ),
56 | ),
57 | Positioned(
58 | bottom: 0.5,
59 | child: Transform.rotate(
60 | angle: 300,
61 | alignment: Alignment.centerLeft,
62 | child: Text(
63 | "BLASTOISE",
64 | style: const TextStyle(
65 | fontSize: 100,
66 | fontWeight: FontWeight.w900,
67 | ).copyWith(
68 | foreground: Paint()
69 | ..style = PaintingStyle.stroke
70 | ..color = Colors.white.withOpacity(0.3)
71 | ..strokeWidth = 1,
72 | ),
73 | ),
74 | ),
75 | ),
76 | // ? Letter Main center
77 | Align(
78 | alignment: Alignment.center,
79 | child: Container(
80 | margin: const EdgeInsets.only(top: 40),
81 | height: 50,
82 | child: const Text("Blastoise",
83 | style: TextStyle(
84 | fontSize: 30.0,
85 | color: Colors.white,
86 | letterSpacing: 1.2,
87 | fontWeight: FontWeight.w600)),
88 | ),
89 | ),
90 |
91 | // ? Card
92 | Align(
93 | alignment: Alignment.bottomCenter,
94 | child: CardPokemonInfo(
95 | screenSize: screenSize, weightPokemon: weightPokemon),
96 | ),
97 | ]),
98 | ),
99 | ),
100 | );
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/style.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AppStyle {}
4 |
5 | class AppColors {
6 | //Primary colors
7 | static const primaryBlue = Color.fromRGBO(17, 87, 149, 1);
8 | static const topBlue = Color.fromRGBO(31, 207, 255, 1);
9 | static const centerBlue = Color.fromRGBO(29, 138, 195, 1);
10 | static const primaryRed = Color.fromRGBO(215, 18, 0, 1);
11 | }
12 |
13 | class AppImages {
14 | static String pokemon1 = "assets/images/pokemon";
15 | static String pokemon2 = "";
16 | static String pokemon3 = "";
17 | }
18 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/widgets/card_pokemon_info.dart:
--------------------------------------------------------------------------------
1 | import 'dart:ui';
2 |
3 | import 'package:flutter/material.dart';
4 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
5 | import 'package:ui_challenges/pokemon_ui/widgets/rate_power_widget.dart';
6 | import 'package:ui_challenges/pokemon_ui/widgets/tag_wekeness.dart';
7 |
8 | import '../style.dart';
9 |
10 | class CardPokemonInfo extends StatelessWidget {
11 | const CardPokemonInfo({
12 | Key? key,
13 | required this.screenSize,
14 | required this.weightPokemon,
15 | }) : super(key: key);
16 |
17 | final Size screenSize;
18 | final String weightPokemon;
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | return Container(
23 | margin: const EdgeInsets.symmetric(horizontal: 20, vertical: 15),
24 | width: screenSize.width,
25 | height: 200,
26 | decoration: BoxDecoration(
27 | border: Border.all(color: Colors.white24),
28 | borderRadius: BorderRadius.circular(8),
29 | color: Colors.white.withOpacity(0.12),
30 | ),
31 | child: ClipRect(
32 | child: BackdropFilter(
33 | filter: ImageFilter.blur(sigmaX: 2.0, sigmaY: 2.0),
34 | child: Padding(
35 | padding:
36 | const EdgeInsets.only(top: 10.0, left: 15, right: 15, bottom: 10),
37 | child: Column(
38 | children: [
39 | //? Row header
40 | Row(
41 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
42 | children: [
43 | const Text("123.05kg",
44 | style: TextStyle(
45 | fontSize: 18.0,
46 | color: Colors.white,
47 | fontWeight: FontWeight.w500)),
48 | Container(
49 | width: 30,
50 | height: 30,
51 | decoration: const BoxDecoration(
52 | color: AppColors.primaryBlue, shape: BoxShape.circle),
53 | child: const Icon(
54 | FontAwesomeIcons.droplet,
55 | color: Colors.white,
56 | size: 15,
57 | )),
58 | const Text(
59 | "2m",
60 | style: TextStyle(
61 | fontSize: 18.0,
62 | color: Colors.white,
63 | fontWeight: FontWeight.w500),
64 | ),
65 | ],
66 | ), //? Row Header Elementes
67 | Row(
68 | mainAxisAlignment: MainAxisAlignment.spaceBetween,
69 | children: [
70 | SizedBox(
71 | //TODO add model here
72 | width: 75 + weightPokemon.length.toDouble(),
73 | child: const Text(
74 | "Peso",
75 | style: TextStyle(
76 | color: Colors.white,
77 | ),
78 | ),
79 | ),
80 | const Text(
81 | "Elemento",
82 | style: TextStyle(
83 | color: Colors.white,
84 | ),
85 | ),
86 | const Text(
87 | "Altura",
88 | style: TextStyle(
89 | color: Colors.white,
90 | ),
91 | ),
92 | ],
93 | ),
94 |
95 | // ? Spacer
96 | const SizedBox(
97 | height: 5,
98 | ),
99 |
100 | //Row Spacer
101 | Column(
102 | mainAxisAlignment: MainAxisAlignment.center,
103 | crossAxisAlignment: CrossAxisAlignment.start,
104 | children: [
105 | const Text("Ataques",
106 | style: TextStyle(
107 | color: Colors.white,
108 | fontSize: 15,
109 | fontWeight: FontWeight.w600)),
110 | const SizedBox(
111 | height: 5,
112 | ),
113 | Row(
114 | children: [
115 | Container(
116 | width: 18,
117 | height: 18,
118 | decoration: const BoxDecoration(
119 | color: AppColors.primaryBlue,
120 | shape: BoxShape.circle),
121 | child: const Icon(
122 | FontAwesomeIcons.droplet,
123 | color: Colors.white,
124 | size: 8,
125 | )),
126 | const Text(" Revolver de Agua",
127 | style: TextStyle(
128 | color: Colors.white,
129 | )),
130 | const Spacer(),
131 | const RatePowerWidget(
132 | powerLevel: PowerLevel.max,
133 | color: Color.fromARGB(255, 17, 12, 66),
134 | ),
135 | ],
136 | ),
137 | const SizedBox(
138 | height: 3,
139 | ),
140 | Row(
141 | children: [
142 | Container(
143 | width: 18,
144 | height: 18,
145 | decoration: const BoxDecoration(
146 | color: Color.fromARGB(255, 28, 61, 29),
147 | shape: BoxShape.circle),
148 | child: const Icon(
149 | FontAwesomeIcons.circle,
150 | color: Colors.white,
151 | size: 8,
152 | )),
153 | const Text(" Canhão Flash",
154 | style: TextStyle(
155 | color: Colors.white,
156 | )),
157 | const Spacer(),
158 | const RatePowerWidget(
159 | powerLevel: PowerLevel.high,
160 | color: Color.fromARGB(255, 17, 12, 66),
161 | ),
162 | ],
163 | )
164 | ],
165 | ),
166 | // ? Spacer
167 | const SizedBox(
168 | height: 6,
169 | ),
170 | // Header Fraquezas
171 | SizedBox(
172 | height: 45,
173 | child: Column(
174 | mainAxisAlignment: MainAxisAlignment.start,
175 | crossAxisAlignment: CrossAxisAlignment.start,
176 | children: [
177 | const Text("Fraquezas",
178 | style: TextStyle(
179 | color: Colors.white,
180 | fontSize: 15,
181 | fontWeight: FontWeight.w600)),
182 | const SizedBox(
183 | height: 2,
184 | ),
185 | Row(
186 | crossAxisAlignment: CrossAxisAlignment.center,
187 | children: const [
188 | TagWeakness(
189 | text: "Grama",
190 | icon: Icons.electrical_services_rounded,
191 | backgroundColor: Color.fromARGB(255, 28, 61, 29),
192 | borderColor: Colors.green,
193 | borderIconColor: Colors.green,
194 | backgroundIconColor: Color.fromARGB(255, 40, 170, 44),
195 | width: 80,
196 | ),
197 | SizedBox(
198 | width: 6,
199 | ),
200 | TagWeakness(
201 | text: "Eletrecidade",
202 | icon: Icons.electrical_services_rounded,
203 | backgroundColor: Colors.yellow,
204 | borderColor: Colors.white,
205 | borderIconColor: Colors.yellowAccent,
206 | backgroundIconColor: Colors.yellow,
207 | width: 100,
208 | ),
209 | ],
210 | )
211 | ],
212 | ),
213 | )
214 | ],
215 | ),
216 | ),
217 | )),
218 | );
219 | }
220 | }
221 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/widgets/rate_power_widget.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | enum PowerLevel { low, normal, high, max }
4 |
5 | class RatePowerWidget extends StatelessWidget {
6 | final PowerLevel powerLevel;
7 | final Color color;
8 | const RatePowerWidget(
9 | {Key? key, required this.powerLevel, this.color = Colors.grey})
10 | : super(key: key);
11 | @override
12 | Widget build(BuildContext context) {
13 | List text = [];
14 | text = _buildPowerLever(text);
15 | return Row(
16 | mainAxisSize: MainAxisSize.min,
17 | children: List.generate(text.length, (index) {
18 | return Container(
19 | width: 4,
20 | height: 10,
21 | color: color,
22 | margin: const EdgeInsets.only(left: 3),
23 | );
24 | }),
25 | );
26 | }
27 |
28 | List _buildPowerLever(List text) {
29 | if (powerLevel == PowerLevel.high) {
30 | text = [1, 2, 3, 4, 5, 6, 7];
31 | } else if (powerLevel == PowerLevel.max) {
32 | text = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
33 | } else if (powerLevel == PowerLevel.normal) {
34 | text = [1, 2, 3, 4, 5];
35 | } else if (powerLevel == PowerLevel.low) {
36 | text = [1, 2, 3];
37 | }
38 | return text;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/lib/pokemon_ui/widgets/tag_wekeness.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 |
4 | class TagWeakness extends StatelessWidget {
5 | final Color borderIconColor;
6 | final Color backgroundIconColor;
7 | final Color backgroundColor;
8 | final Color borderColor;
9 | final String text;
10 | final IconData icon;
11 | final double width;
12 |
13 | const TagWeakness({
14 | Key? key,
15 | required this.borderIconColor,
16 | required this.backgroundIconColor,
17 | required this.backgroundColor,
18 | required this.borderColor,
19 | required this.text,
20 | required this.icon,
21 | this.width = 100,
22 | }) : super(key: key);
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | return Container(
27 | width: width,
28 | height: 22,
29 | decoration: BoxDecoration(
30 | color: backgroundColor.withOpacity(0.5),
31 | border: Border.all(color: borderColor.withOpacity(0.5)),
32 | borderRadius: BorderRadius.circular(5),
33 | shape: BoxShape.rectangle),
34 | child: Row(
35 | mainAxisAlignment: MainAxisAlignment.center,
36 | crossAxisAlignment: CrossAxisAlignment.center,
37 | children: [
38 | Container(
39 | width: 12,
40 | height: 12,
41 | decoration: BoxDecoration(
42 | color: backgroundIconColor,
43 | borderRadius: BorderRadius.circular(10),
44 | border: Border.all(color: borderIconColor.withOpacity(0.5)),
45 | shape: BoxShape.rectangle),
46 | child: const Icon(
47 | FontAwesomeIcons.firefoxBrowser,
48 | color: Colors.white,
49 | size: 5,
50 | ),
51 | ),
52 | const SizedBox(
53 | width: 3.5,
54 | ),
55 | Text(
56 | text,
57 | style: const TextStyle(color: Colors.white),
58 | ),
59 | ],
60 | ));
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/lib/settings_ui/settings_screen.dart:
--------------------------------------------------------------------------------
1 | //Finished on 1 Pomodoro
2 |
3 | import 'package:flutter/cupertino.dart';
4 | import 'package:flutter/material.dart';
5 |
6 | class SettingsScreenUi extends StatelessWidget {
7 | const SettingsScreenUi({Key? key}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return Scaffold(
12 | backgroundColor: _AppUtils.background,
13 | body: SafeArea(
14 | child: Column(
15 | mainAxisAlignment: MainAxisAlignment.start,
16 | crossAxisAlignment: CrossAxisAlignment.start,
17 | children: [
18 | const SizedBox(
19 | height: 20,
20 | ),
21 | // ? Top Text
22 | Container(
23 | padding: _AppUtils.symetric,
24 | margin: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 10),
25 | child: const Text(
26 | "Settings",
27 | style: TextStyle(
28 | color: Colors.white,
29 | fontSize: 20,
30 | fontWeight: FontWeight.w600),
31 | ),
32 | ),
33 | // ? List Settings
34 | Expanded(
35 | child: ListView(
36 | padding: const EdgeInsets.all(5.0),
37 | children: [
38 | SettingsButton(
39 | iconData: Icons.accessibility,
40 | text: "accessibility",
41 | onTap: () {},
42 | ),
43 | SettingsButton(
44 | iconData: Icons.person,
45 | text: "Person",
46 | onTap: () {},
47 | ),
48 | SettingsButton(
49 | iconData: Icons.settings,
50 | text: "Settings",
51 | onTap: () {},
52 | ),
53 | SettingsButton(
54 | iconData: Icons.search, text: "Search", onTap: () {}),
55 | SettingsButton(
56 | iconData: Icons.account_balance,
57 | text: "Account Balance",
58 | onTap: () {},
59 | ),
60 | SettingsButton(
61 | iconData: Icons.document_scanner,
62 | text: "Documents",
63 | onTap: () {},
64 | ),
65 | SettingsButton(
66 | iconData: Icons.accessibility,
67 | text: "accessibility",
68 | onTap: () {},
69 | ),
70 | SettingsButton(
71 | iconData: Icons.accessibility,
72 | text: "accessibility",
73 | onTap: () {},
74 | ),
75 | SettingsButton(
76 | iconData: Icons.accessibility,
77 | text: "accessibility",
78 | onTap: () {},
79 | ),
80 | ],
81 | ))
82 | ],
83 | )),
84 | );
85 | }
86 | }
87 |
88 | class SettingsButton extends StatelessWidget {
89 | const SettingsButton({
90 | Key? key,
91 | required this.iconData,
92 | required this.text,
93 | required this.onTap,
94 | }) : super(key: key);
95 | final Function() onTap;
96 | final IconData iconData;
97 | final String text;
98 |
99 | @override
100 | Widget build(BuildContext context) {
101 | return Stack(children: [
102 | GestureDetector(
103 | onTap: onTap,
104 | child: Container(
105 | width: 400,
106 | height: 40,
107 | margin: const EdgeInsets.only(bottom: 15),
108 | padding: const EdgeInsets.symmetric(horizontal: 16),
109 | decoration: BoxDecoration(
110 | color: _AppUtils.primary,
111 | borderRadius: BorderRadius.circular(10)),
112 | child: Row(
113 | children: [
114 | Icon(
115 | iconData,
116 | size: 19,
117 | color: Colors.white,
118 | ),
119 | const SizedBox(
120 | width: 10,
121 | ),
122 | Flexible(
123 | fit: FlexFit.tight,
124 | flex: 15,
125 | child: Text(
126 | text,
127 | style: _AppUtils.flatButtonStyle,
128 | ),
129 | ),
130 | const Spacer(),
131 | const Icon(
132 | CupertinoIcons.arrow_right,
133 | color: Colors.white,
134 | )
135 | ],
136 | ),
137 | ),
138 | ),
139 | ]);
140 | }
141 | }
142 |
143 | class _AppUtils {
144 | // ! Colors
145 | static const Color background = Color.fromRGBO(39, 27, 45, 1);
146 | static const Color primary = Color.fromRGBO(50, 40, 60, 1);
147 | static const Color white = Color.fromRGBO(255, 255, 255, 1);
148 | // ! Paddings
149 | static const symetric = EdgeInsets.symmetric(horizontal: 10.0);
150 | // ! Button Style
151 | static TextStyle flatButtonStyle = const TextStyle(
152 | color: white,
153 | fontSize: 15,
154 | );
155 | }
156 |
--------------------------------------------------------------------------------
/lib/work_app/screens/home/home_page.dart:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/lib/work_app/screens/splash/splash_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class SplashScreen extends StatelessWidget {
4 | const SplashScreen({Key? key}) : super(key: key);
5 |
6 | @override
7 | Widget build(BuildContext context) {
8 | return Scaffold(
9 | body: Center(
10 | child: Column(
11 | crossAxisAlignment: CrossAxisAlignment.center,
12 | mainAxisAlignment: MainAxisAlignment.center,
13 | children: [
14 | Image.asset(
15 | "assets/images/work/logo.png",
16 | width: MediaQuery.of(context).size.width * 0.20,
17 | ),
18 | const SizedBox(
19 | height: 8,
20 | ),
21 | const Text(
22 | "PNE - Projeto Nacional \n de Empregabilidade",
23 | style: TextStyle(fontWeight: FontWeight.bold),
24 | )
25 | ],
26 | ),
27 | ));
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/work_app/screens/welcome/components/random_user_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CompanyCard extends StatelessWidget {
4 | final String imageUrl;
5 | final String userName;
6 | final double opacity;
7 |
8 | const CompanyCard({
9 | Key? key,
10 | required this.imageUrl,
11 | required this.userName,
12 | this.opacity = 1,
13 | }) : super(key: key);
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | return Opacity(
18 | opacity: opacity,
19 | child: Container(
20 | margin: const EdgeInsets.all(5),
21 | padding: const EdgeInsets.all(10),
22 | decoration: BoxDecoration(
23 | borderRadius: BorderRadius.circular(15),
24 | color: const Color.fromRGBO(43, 46, 48, 1),
25 | ),
26 | child: Column(
27 | crossAxisAlignment: CrossAxisAlignment.center,
28 | mainAxisAlignment: MainAxisAlignment.center,
29 | children: [
30 | CircleAvatar(
31 | backgroundImage: AssetImage(imageUrl),
32 | radius: MediaQuery.of(context).size.width * 0.11,
33 | ),
34 | const SizedBox(height: 10),
35 | Text(
36 | userName,
37 | style: const TextStyle(
38 | color: Color.fromRGBO(133, 134, 136, 1),
39 | ),
40 | ),
41 | ],
42 | ),
43 | ),
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/work_app/screens/welcome/welcome_screen.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'components/random_user_card.dart';
4 |
5 | class WelcomeScreen extends StatelessWidget {
6 | static const String routeName = '/App1MainScreen';
7 |
8 | const WelcomeScreen({Key? key}) : super(key: key);
9 |
10 | @override
11 | Widget build(BuildContext context) {
12 | return Scaffold(
13 | backgroundColor: const Color.fromRGBO(27, 27, 29, 1),
14 | body: Stack(
15 | alignment: Alignment.center,
16 | children: [
17 | Column(
18 | crossAxisAlignment: CrossAxisAlignment.center,
19 | children: [
20 | const SizedBox(height: 40),
21 | Row(
22 | crossAxisAlignment: CrossAxisAlignment.start,
23 | children: [
24 | const Spacer(),
25 | Column(
26 | children: const [
27 | SizedBox(height: 25),
28 | CompanyCard(
29 | imageUrl: 'assets/images/work/logo (2).png',
30 | userName: 'Rido',
31 | opacity: .3,
32 | ),
33 | CompanyCard(
34 | imageUrl: 'assets/images/work/logo (3).png',
35 | userName: 'Sulis',
36 | ),
37 | CompanyCard(
38 | imageUrl: 'assets/images/work/logo (5).png',
39 | userName: 'John',
40 | opacity: .4,
41 | ),
42 | ],
43 | ),
44 | Column(
45 | children: const [
46 | SizedBox(height: 80),
47 | CompanyCard(
48 | imageUrl: 'assets/images/work/logo (6).jpg',
49 | userName: 'Jihan',
50 | ),
51 | CompanyCard(
52 | imageUrl: 'assets/images/work/logo (4).png',
53 | userName: 'Wohy',
54 | opacity: .4,
55 | ),
56 | CompanyCard(
57 | imageUrl: 'assets/images/work/logo (4).png',
58 | userName: 'Kenan',
59 | opacity: .3,
60 | ),
61 | ],
62 | ),
63 | Column(
64 | children: const [
65 | CompanyCard(
66 | imageUrl: 'assets/images/work/logo (5).png',
67 | userName: 'Renan',
68 | opacity: .2,
69 | ),
70 | CompanyCard(
71 | imageUrl: 'assets/images/work/logo (1).png',
72 | userName: 'Oji',
73 | ),
74 | CompanyCard(
75 | imageUrl: 'assets/images/work/logo (4).png',
76 | userName: 'Aly',
77 | opacity: .2,
78 | ),
79 | ],
80 | ),
81 | const Spacer(),
82 | ],
83 | ),
84 | ],
85 | ),
86 | Positioned(
87 | bottom: 0,
88 | child: Container(
89 | alignment: Alignment.bottomCenter,
90 | height: MediaQuery.of(context).size.height * .7,
91 | width: MediaQuery.of(context).size.width,
92 | decoration: BoxDecoration(
93 | gradient: LinearGradient(
94 | colors: [
95 | const Color.fromRGBO(27, 27, 29, 1),
96 | const Color.fromRGBO(27, 27, 29, 1),
97 | const Color.fromARGB(255, 21, 21, 1).withOpacity(0),
98 | ],
99 | begin: Alignment.bottomCenter,
100 | end: Alignment.topCenter,
101 | ),
102 | ),
103 | child: Column(
104 | crossAxisAlignment: CrossAxisAlignment.center,
105 | mainAxisAlignment: MainAxisAlignment.end,
106 | children: [
107 | const SizedBox(height: 50),
108 | const Text(
109 | 'Find New Friends\nWith Sosmad!',
110 | style: TextStyle(
111 | fontWeight: FontWeight.w900,
112 | fontSize: 32,
113 | color: Colors.white,
114 | height: 1.1,
115 | ),
116 | textAlign: TextAlign.center,
117 | ),
118 | const SizedBox(height: 20),
119 | const Text(
120 | 'With sosmad then you will find new\nfriends from various countires and\nregions throughout the region',
121 | style: TextStyle(
122 | color: Colors.grey,
123 | ),
124 | textAlign: TextAlign.center,
125 | ),
126 | const SizedBox(height: 25),
127 | GestureDetector(
128 | onTap: () {},
129 | child: Container(
130 | width: 180,
131 | height: 45,
132 | alignment: Alignment.center,
133 | decoration: BoxDecoration(
134 | color: const Color.fromARGB(255, 19, 94, 156),
135 | borderRadius: BorderRadius.circular(50),
136 | ),
137 | child: const Text(
138 | 'Get Started',
139 | style: TextStyle(
140 | color: Colors.white,
141 | fontSize: 16,
142 | ),
143 | ),
144 | ),
145 | ),
146 | const SizedBox(height: 40),
147 | ],
148 | ),
149 | ),
150 | ),
151 | ],
152 | ),
153 | );
154 | }
155 | }
156 |
--------------------------------------------------------------------------------
/macos/.gitignore:
--------------------------------------------------------------------------------
1 | # Flutter-related
2 | **/Flutter/ephemeral/
3 | **/Pods/
4 |
5 | # Xcode-related
6 | **/dgph
7 | **/xcuserdata/
8 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "ephemeral/Flutter-Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/macos/Flutter/Flutter-Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "ephemeral/Flutter-Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/macos/Flutter/GeneratedPluginRegistrant.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Generated file. Do not edit.
3 | //
4 |
5 | import FlutterMacOS
6 | import Foundation
7 |
8 | import shared_preferences_macos
9 |
10 | func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
11 | SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
12 | }
13 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
37 |
38 |
39 |
40 |
41 |
42 |
52 |
54 |
60 |
61 |
62 |
63 |
69 |
71 |
77 |
78 |
79 |
80 |
82 |
83 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macos/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | @NSApplicationMain
5 | class AppDelegate: FlutterAppDelegate {
6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
7 | return true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "app_icon_16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "app_icon_32.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "app_icon_32.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "app_icon_64.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "app_icon_128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "app_icon_256.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "app_icon_256.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "app_icon_512.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "app_icon_512.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "app_icon_1024.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
--------------------------------------------------------------------------------
/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
--------------------------------------------------------------------------------
/macos/Runner/Configs/AppInfo.xcconfig:
--------------------------------------------------------------------------------
1 | // Application-level settings for the Runner target.
2 | //
3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
4 | // future. If not, the values below would default to using the project name when this becomes a
5 | // 'flutter create' template.
6 |
7 | // The application's name. By default this is also the title of the Flutter window.
8 | PRODUCT_NAME = ui_challenges
9 |
10 | // The application's bundle identifier
11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.uiChallenges
12 |
13 | // The copyright displayed in application information
14 | PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved.
15 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Debug.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "../../Flutter/Flutter-Release.xcconfig"
2 | #include "Warnings.xcconfig"
3 |
--------------------------------------------------------------------------------
/macos/Runner/Configs/Warnings.xcconfig:
--------------------------------------------------------------------------------
1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
2 | GCC_WARN_UNDECLARED_SELECTOR = YES
3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
6 | CLANG_WARN_PRAGMA_PACK = YES
7 | CLANG_WARN_STRICT_PROTOTYPES = YES
8 | CLANG_WARN_COMMA = YES
9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES
10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
12 | GCC_WARN_SHADOW = YES
13 | CLANG_WARN_UNREACHABLE_CODE = YES
14 |
--------------------------------------------------------------------------------
/macos/Runner/DebugProfile.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.cs.allow-jit
8 |
9 | com.apple.security.network.server
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/macos/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(FLUTTER_BUILD_NAME)
21 | CFBundleVersion
22 | $(FLUTTER_BUILD_NUMBER)
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | $(PRODUCT_COPYRIGHT)
27 | NSMainNibFile
28 | MainMenu
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/macos/Runner/MainFlutterWindow.swift:
--------------------------------------------------------------------------------
1 | import Cocoa
2 | import FlutterMacOS
3 |
4 | class MainFlutterWindow: NSWindow {
5 | override func awakeFromNib() {
6 | let flutterViewController = FlutterViewController.init()
7 | let windowFrame = self.frame
8 | self.contentViewController = flutterViewController
9 | self.setFrame(windowFrame, display: true)
10 |
11 | RegisterGeneratedPlugins(registry: flutterViewController)
12 |
13 | super.awakeFromNib()
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/macos/Runner/Release.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/pubspec.lock:
--------------------------------------------------------------------------------
1 | # Generated by pub
2 | # See https://dart.dev/tools/pub/glossary#lockfile
3 | packages:
4 | async:
5 | dependency: transitive
6 | description:
7 | name: async
8 | url: "https://pub.dartlang.org"
9 | source: hosted
10 | version: "2.8.2"
11 | boolean_selector:
12 | dependency: transitive
13 | description:
14 | name: boolean_selector
15 | url: "https://pub.dartlang.org"
16 | source: hosted
17 | version: "2.1.0"
18 | characters:
19 | dependency: transitive
20 | description:
21 | name: characters
22 | url: "https://pub.dartlang.org"
23 | source: hosted
24 | version: "1.2.0"
25 | charcode:
26 | dependency: transitive
27 | description:
28 | name: charcode
29 | url: "https://pub.dartlang.org"
30 | source: hosted
31 | version: "1.3.1"
32 | clock:
33 | dependency: transitive
34 | description:
35 | name: clock
36 | url: "https://pub.dartlang.org"
37 | source: hosted
38 | version: "1.1.0"
39 | collection:
40 | dependency: transitive
41 | description:
42 | name: collection
43 | url: "https://pub.dartlang.org"
44 | source: hosted
45 | version: "1.16.0"
46 | cupertino_icons:
47 | dependency: "direct main"
48 | description:
49 | name: cupertino_icons
50 | url: "https://pub.dartlang.org"
51 | source: hosted
52 | version: "1.0.5"
53 | device_frame:
54 | dependency: transitive
55 | description:
56 | name: device_frame
57 | url: "https://pub.dartlang.org"
58 | source: hosted
59 | version: "1.1.0"
60 | device_preview:
61 | dependency: "direct main"
62 | description:
63 | name: device_preview
64 | url: "https://pub.dartlang.org"
65 | source: hosted
66 | version: "1.1.0"
67 | fake_async:
68 | dependency: transitive
69 | description:
70 | name: fake_async
71 | url: "https://pub.dartlang.org"
72 | source: hosted
73 | version: "1.3.0"
74 | ffi:
75 | dependency: transitive
76 | description:
77 | name: ffi
78 | url: "https://pub.dartlang.org"
79 | source: hosted
80 | version: "2.0.1"
81 | file:
82 | dependency: transitive
83 | description:
84 | name: file
85 | url: "https://pub.dartlang.org"
86 | source: hosted
87 | version: "6.1.4"
88 | flutter:
89 | dependency: "direct main"
90 | description: flutter
91 | source: sdk
92 | version: "0.0.0"
93 | flutter_lints:
94 | dependency: "direct dev"
95 | description:
96 | name: flutter_lints
97 | url: "https://pub.dartlang.org"
98 | source: hosted
99 | version: "2.0.1"
100 | flutter_localizations:
101 | dependency: transitive
102 | description: flutter
103 | source: sdk
104 | version: "0.0.0"
105 | flutter_svg:
106 | dependency: "direct main"
107 | description:
108 | name: flutter_svg
109 | url: "https://pub.dartlang.org"
110 | source: hosted
111 | version: "1.1.4"
112 | flutter_test:
113 | dependency: "direct dev"
114 | description: flutter
115 | source: sdk
116 | version: "0.0.0"
117 | flutter_web_plugins:
118 | dependency: transitive
119 | description: flutter
120 | source: sdk
121 | version: "0.0.0"
122 | font_awesome_flutter:
123 | dependency: "direct main"
124 | description:
125 | name: font_awesome_flutter
126 | url: "https://pub.dartlang.org"
127 | source: hosted
128 | version: "10.1.0"
129 | freezed_annotation:
130 | dependency: transitive
131 | description:
132 | name: freezed_annotation
133 | url: "https://pub.dartlang.org"
134 | source: hosted
135 | version: "2.1.0"
136 | intl:
137 | dependency: transitive
138 | description:
139 | name: intl
140 | url: "https://pub.dartlang.org"
141 | source: hosted
142 | version: "0.17.0"
143 | js:
144 | dependency: transitive
145 | description:
146 | name: js
147 | url: "https://pub.dartlang.org"
148 | source: hosted
149 | version: "0.6.4"
150 | json_annotation:
151 | dependency: transitive
152 | description:
153 | name: json_annotation
154 | url: "https://pub.dartlang.org"
155 | source: hosted
156 | version: "4.6.0"
157 | lints:
158 | dependency: transitive
159 | description:
160 | name: lints
161 | url: "https://pub.dartlang.org"
162 | source: hosted
163 | version: "2.0.0"
164 | matcher:
165 | dependency: transitive
166 | description:
167 | name: matcher
168 | url: "https://pub.dartlang.org"
169 | source: hosted
170 | version: "0.12.11"
171 | material_color_utilities:
172 | dependency: transitive
173 | description:
174 | name: material_color_utilities
175 | url: "https://pub.dartlang.org"
176 | source: hosted
177 | version: "0.1.4"
178 | meta:
179 | dependency: transitive
180 | description:
181 | name: meta
182 | url: "https://pub.dartlang.org"
183 | source: hosted
184 | version: "1.7.0"
185 | nested:
186 | dependency: transitive
187 | description:
188 | name: nested
189 | url: "https://pub.dartlang.org"
190 | source: hosted
191 | version: "1.0.0"
192 | path:
193 | dependency: transitive
194 | description:
195 | name: path
196 | url: "https://pub.dartlang.org"
197 | source: hosted
198 | version: "1.8.1"
199 | path_drawing:
200 | dependency: transitive
201 | description:
202 | name: path_drawing
203 | url: "https://pub.dartlang.org"
204 | source: hosted
205 | version: "1.0.1"
206 | path_parsing:
207 | dependency: transitive
208 | description:
209 | name: path_parsing
210 | url: "https://pub.dartlang.org"
211 | source: hosted
212 | version: "1.0.1"
213 | path_provider_linux:
214 | dependency: transitive
215 | description:
216 | name: path_provider_linux
217 | url: "https://pub.dartlang.org"
218 | source: hosted
219 | version: "2.1.7"
220 | path_provider_platform_interface:
221 | dependency: transitive
222 | description:
223 | name: path_provider_platform_interface
224 | url: "https://pub.dartlang.org"
225 | source: hosted
226 | version: "2.0.4"
227 | path_provider_windows:
228 | dependency: transitive
229 | description:
230 | name: path_provider_windows
231 | url: "https://pub.dartlang.org"
232 | source: hosted
233 | version: "2.1.2"
234 | petitparser:
235 | dependency: transitive
236 | description:
237 | name: petitparser
238 | url: "https://pub.dartlang.org"
239 | source: hosted
240 | version: "5.0.0"
241 | platform:
242 | dependency: transitive
243 | description:
244 | name: platform
245 | url: "https://pub.dartlang.org"
246 | source: hosted
247 | version: "3.1.0"
248 | plugin_platform_interface:
249 | dependency: transitive
250 | description:
251 | name: plugin_platform_interface
252 | url: "https://pub.dartlang.org"
253 | source: hosted
254 | version: "2.1.2"
255 | process:
256 | dependency: transitive
257 | description:
258 | name: process
259 | url: "https://pub.dartlang.org"
260 | source: hosted
261 | version: "4.2.4"
262 | provider:
263 | dependency: "direct main"
264 | description:
265 | name: provider
266 | url: "https://pub.dartlang.org"
267 | source: hosted
268 | version: "6.0.3"
269 | shared_preferences:
270 | dependency: transitive
271 | description:
272 | name: shared_preferences
273 | url: "https://pub.dartlang.org"
274 | source: hosted
275 | version: "2.0.15"
276 | shared_preferences_android:
277 | dependency: transitive
278 | description:
279 | name: shared_preferences_android
280 | url: "https://pub.dartlang.org"
281 | source: hosted
282 | version: "2.0.12"
283 | shared_preferences_ios:
284 | dependency: transitive
285 | description:
286 | name: shared_preferences_ios
287 | url: "https://pub.dartlang.org"
288 | source: hosted
289 | version: "2.1.1"
290 | shared_preferences_linux:
291 | dependency: transitive
292 | description:
293 | name: shared_preferences_linux
294 | url: "https://pub.dartlang.org"
295 | source: hosted
296 | version: "2.1.1"
297 | shared_preferences_macos:
298 | dependency: transitive
299 | description:
300 | name: shared_preferences_macos
301 | url: "https://pub.dartlang.org"
302 | source: hosted
303 | version: "2.0.4"
304 | shared_preferences_platform_interface:
305 | dependency: transitive
306 | description:
307 | name: shared_preferences_platform_interface
308 | url: "https://pub.dartlang.org"
309 | source: hosted
310 | version: "2.1.0"
311 | shared_preferences_web:
312 | dependency: transitive
313 | description:
314 | name: shared_preferences_web
315 | url: "https://pub.dartlang.org"
316 | source: hosted
317 | version: "2.0.4"
318 | shared_preferences_windows:
319 | dependency: transitive
320 | description:
321 | name: shared_preferences_windows
322 | url: "https://pub.dartlang.org"
323 | source: hosted
324 | version: "2.1.1"
325 | simple_circular_progress_bar:
326 | dependency: "direct main"
327 | description:
328 | name: simple_circular_progress_bar
329 | url: "https://pub.dartlang.org"
330 | source: hosted
331 | version: "1.0.2"
332 | sky_engine:
333 | dependency: transitive
334 | description: flutter
335 | source: sdk
336 | version: "0.0.99"
337 | source_span:
338 | dependency: transitive
339 | description:
340 | name: source_span
341 | url: "https://pub.dartlang.org"
342 | source: hosted
343 | version: "1.8.2"
344 | stack_trace:
345 | dependency: transitive
346 | description:
347 | name: stack_trace
348 | url: "https://pub.dartlang.org"
349 | source: hosted
350 | version: "1.10.0"
351 | stream_channel:
352 | dependency: transitive
353 | description:
354 | name: stream_channel
355 | url: "https://pub.dartlang.org"
356 | source: hosted
357 | version: "2.1.0"
358 | string_scanner:
359 | dependency: transitive
360 | description:
361 | name: string_scanner
362 | url: "https://pub.dartlang.org"
363 | source: hosted
364 | version: "1.1.0"
365 | term_glyph:
366 | dependency: transitive
367 | description:
368 | name: term_glyph
369 | url: "https://pub.dartlang.org"
370 | source: hosted
371 | version: "1.2.0"
372 | test_api:
373 | dependency: transitive
374 | description:
375 | name: test_api
376 | url: "https://pub.dartlang.org"
377 | source: hosted
378 | version: "0.4.9"
379 | vector_math:
380 | dependency: transitive
381 | description:
382 | name: vector_math
383 | url: "https://pub.dartlang.org"
384 | source: hosted
385 | version: "2.1.2"
386 | win32:
387 | dependency: transitive
388 | description:
389 | name: win32
390 | url: "https://pub.dartlang.org"
391 | source: hosted
392 | version: "2.7.0"
393 | xdg_directories:
394 | dependency: transitive
395 | description:
396 | name: xdg_directories
397 | url: "https://pub.dartlang.org"
398 | source: hosted
399 | version: "0.2.0+2"
400 | xml:
401 | dependency: transitive
402 | description:
403 | name: xml
404 | url: "https://pub.dartlang.org"
405 | source: hosted
406 | version: "6.1.0"
407 | sdks:
408 | dart: ">=2.17.6 <3.0.0"
409 | flutter: ">=3.0.0"
410 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: ui_challenges
2 | description: A new Flutter project.
3 |
4 | # The following line prevents the package from being accidentally published to
5 | # pub.dev using `flutter pub publish`. This is preferred for private packages.
6 | publish_to: "none" # Remove this line if you wish to publish to pub.dev
7 |
8 | # The following defines the version and build number for your application.
9 | # A version number is three numbers separated by dots, like 1.2.43
10 | # followed by an optional build number separated by a +.
11 | # Both the version and the builder number may be overridden in flutter
12 | # build by specifying --build-name and --build-number, respectively.
13 | # In Android, build-name is used as versionName while build-number used as versionCode.
14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning
15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
16 | # Read more about iOS versioning at
17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
18 | version: 1.0.0+1
19 |
20 | environment:
21 | sdk: ">=2.17.6 <3.0.0"
22 |
23 | # Dependencies specify other packages that your package needs in order to work.
24 | # To automatically upgrade your package dependencies to the latest versions
25 | # consider running `flutter pub upgrade --major-versions`. Alternatively,
26 | # dependencies can be manually updated by changing the version numbers below to
27 | # the latest version available on pub.dev. To see which dependencies have newer
28 | # versions available, run `flutter pub outdated`.
29 | dependencies:
30 | cupertino_icons: ^1.0.2
31 | device_preview: ^1.1.0
32 | flutter:
33 | sdk: flutter
34 | flutter_svg: ^1.1.4
35 | font_awesome_flutter: ^10.1.0
36 | provider: ^6.0.3
37 | simple_circular_progress_bar: ^1.0.2
38 |
39 | dev_dependencies:
40 | flutter_lints: ^2.0.0
41 | flutter_test:
42 | sdk: flutter
43 |
44 | # For information on the generic Dart part of this file, see the
45 | # following page: https://dart.dev/tools/pub/pubspec
46 | # The following section is specific to Flutter packages.
47 | flutter:
48 | # The following line ensures that the Material Icons font is
49 | # included with your application, so that you can use the icons in
50 | # the material Icons class.
51 | uses-material-design: true
52 |
53 | # To add assets to your application, add an assets section, like this:
54 | assets:
55 | - assets/images/pokemon/
56 | - assets/images/earbuds/
57 | - assets/images/travel_app/
58 | - assets/images/delivery/
59 | - assets/images/work/
60 | # An image asset can refer to one or more resolution-specific "variants", see
61 | # https://flutter.dev/assets-and-images/#resolution-aware
62 | # For details regarding adding assets from package dependencies, see
63 | # https://flutter.dev/assets-and-images/#from-packages
64 | # To add custom fonts to your application, add a fonts section here,
65 | # in this "flutter" section. Each entry in this list should have a
66 | # "family" key with the font family name, and a "fonts" key with a
67 | # list giving the asset and other descriptors for the font. For
68 | # example:
69 | # fonts:
70 | # - family: Schyler
71 | # fonts:
72 | # - asset: fonts/Schyler-Regular.ttf
73 | # - asset: fonts/Schyler-Italic.ttf
74 | # style: italic
75 | # - family: Trajan Pro
76 | # fonts:
77 | # - asset: fonts/TrajanPro.ttf
78 | # - asset: fonts/TrajanPro_Bold.ttf
79 | # weight: 700
80 | #
81 | # For details regarding fonts from package dependencies,
82 | # see https://flutter.dev/custom-fonts/#from-packages
83 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/geekfabio/ui_challenges/b7dfee0d9d359faa0507fb0429a9f3e9c2331e8d/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | ui_challenges
33 |
34 |
35 |
39 |
40 |
41 |
42 |
43 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ui_challenges",
3 | "short_name": "ui_challenges",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------