├── LICENSE
├── README.md
├── bookreader
├── .gitignore
├── .metadata
├── README.md
├── android.iml
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── flutteruichallenge
│ │ │ │ └── bookreader
│ │ │ │ └── MainActivity.java
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── assets
│ ├── fonts
│ │ └── fontello.ttf
│ └── images
│ │ ├── book1.gif
│ │ ├── book2.gif
│ │ ├── book3.gif
│ │ ├── book4.gif
│ │ └── owl.png
├── bookreader.iml
├── bookreader_android.iml
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Runner
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── 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
│ │ └── main.m
├── lib
│ ├── book.dart
│ ├── book_row.dart
│ ├── book_shelf.dart
│ ├── icons.dart
│ └── main.dart
├── pubspec.lock
├── pubspec.yaml
└── test
│ └── widget_test.dart
├── drinkshop.gif
├── drinkshop
├── .gitignore
├── .metadata
├── README.md
├── android.iml
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── flutteruichallenge
│ │ │ │ └── drinkshop
│ │ │ │ └── MainActivity.java
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── assets
│ ├── fonts
│ │ ├── fontello.ttf
│ │ └── ionicons.ttf
│ └── images
│ │ ├── folded_card.png
│ │ ├── frappe.png
│ │ ├── frappe_with_straw.png
│ │ ├── glass.png
│ │ └── glass_with_straw.png
├── drinkshop.iml
├── drinkshop_android.iml
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Runner
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── 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
│ │ └── main.m
├── lib
│ ├── add_button.dart
│ ├── colors.dart
│ ├── drink_carousel.dart
│ ├── drink_carousel_card.dart
│ ├── drink_carousel_item.dart
│ ├── drink_selection_panel.dart
│ ├── drink_shop_home.dart
│ ├── drink_switch_menu.dart
│ ├── header.dart
│ ├── icons.dart
│ ├── main.dart
│ ├── models.dart
│ └── settings_button.dart
├── pubspec.lock
├── pubspec.yaml
└── test
│ └── widget_test.dart
├── profile.png
├── profile
├── .gitignore
├── .metadata
├── README.md
├── android.iml
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java
│ │ │ └── com
│ │ │ │ └── flutteruichallenge
│ │ │ │ └── profile
│ │ │ │ └── MainActivity.java
│ │ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ └── values
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ ├── gradle-wrapper.jar
│ │ │ └── gradle-wrapper.properties
│ ├── gradlew
│ ├── gradlew.bat
│ └── settings.gradle
├── assets
│ ├── fonts
│ │ ├── line-awesome.ttf
│ │ ├── themify.ttf
│ │ ├── timeburnerbold.ttf
│ │ └── timeburnernormal.ttf
│ └── images
│ │ ├── emma-watson.jpg
│ │ ├── joystick.png
│ │ ├── microphone.png
│ │ └── wallet.png
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── Runner
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── 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
│ │ └── main.m
├── lib
│ ├── main.dart
│ ├── main_menu.dart
│ ├── models.dart
│ ├── profile_colors.dart
│ ├── profile_fonts.dart
│ ├── profile_header.dart
│ ├── profile_icons.dart
│ └── quick_actions.dart
├── profile.iml
├── profile_android.iml
├── profile_screen.png
├── pubspec.lock
├── pubspec.yaml
└── test
│ └── widget_test.dart
├── travel.gif
└── travel
├── .gitignore
├── .metadata
├── README.md
├── android.iml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── flutteruichallenge
│ │ │ └── travel
│ │ │ └── MainActivity.java
│ │ └── res
│ │ ├── drawable
│ │ └── launch_background.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ └── values
│ │ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── assets
└── bar.jpg
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ └── contents.xcworkspacedata
└── Runner
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── 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
│ └── main.m
├── lib
├── animated_background.dart
├── animated_locations_text.dart
├── animated_text.dart
├── circles.dart
├── landing_page.dart
├── main.dart
├── splash_page.dart
├── spread_circles.dart
└── stacked_circles.dart
├── pubspec.lock
├── pubspec.yaml
├── test
└── widget_test.dart
├── travel.iml
├── travel_android.iml
└── travel_app.gif
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Tomi Alagbe
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FLUTTER UI CHALLENGE
2 |
3 | Put your Flutter experience to test with these UI Challenges.
4 |
5 | :warning: **Contributions must be made in this repository.**:warning:
6 |
7 | **Levels:**
8 | - [Beginner](#beginner)
9 | - [Intermediate](#intermediate)
10 | - [Advanced](#advanced)
11 | - [Impossible](#impossible)
12 |
13 |
14 |
15 | # Beginner
16 |
17 | ### [Profile App](https://github.com/tomialagbe/flutter_ui_challenges/tree/master/profile) (Completed)
18 | Design made by **Shahin Srowar**
19 |
20 | [
](https://dribbble.com/shots/4249249-Profile-App-Screen-Exploration)
21 |
22 | # Intermediate
23 |
24 | ### [Travel App](https://github.com/tomialagbe/flutter_ui_challenges/tree/master/travel) (Completed)
25 | Design made by **Daryl Ginn**
26 |
27 | [
](https://dribbble.com/shots/4301490-Travel-App)
28 |
29 |
30 | ### [Book Reader](https://dribbble.com/shots/3911197-DesignBetter-co-app-concept-in-InVision-Studio)
31 | Design made by **Noam Liss**
32 |
33 | [
](https://dribbble.com/shots/3911197-DesignBetter-co-app-concept-in-InVision-Studio)
34 |
35 | # Advanced
36 |
37 | ### [Drink Shop](https://github.com/tomialagbe/flutter_ui_challenges/tree/master/drinkshop)
38 | Design made by **Yaroslav Zubko**
39 |
40 | [
](https://dribbble.com/shots/3843453-Drink-Shop)
41 |
42 | # Impossible
43 |
44 | ** Insert impossible challenge here **
45 |
46 | ## Getting Started
47 |
48 | For help getting started with Flutter, view our online
49 | [documentation](https://flutter.io/docs).
50 |
--------------------------------------------------------------------------------
/bookreader/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .idea
4 | .vscode/
5 | .packages
6 | .pub/
7 | build/
8 | ios/.generated/
9 | packages
10 | .flutter-plugins
11 |
--------------------------------------------------------------------------------
/bookreader/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 3ea4d06340a97a1e9d7cae97567c64e0569dcaa2
8 | channel: beta
9 |
--------------------------------------------------------------------------------
/bookreader/README.md:
--------------------------------------------------------------------------------
1 | # bookreader
2 |
3 | A new Flutter application.
4 |
5 | ## Getting Started
6 |
7 | For help getting started with Flutter, view our online
8 | [documentation](https://flutter.io/).
9 |
--------------------------------------------------------------------------------
/bookreader/android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/bookreader/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.class
3 | .gradle
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | GeneratedPluginRegistrant.java
11 |
--------------------------------------------------------------------------------
/bookreader/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 | apply plugin: 'com.android.application'
15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
16 |
17 | android {
18 | compileSdkVersion 27
19 |
20 | lintOptions {
21 | disable 'InvalidPackage'
22 | }
23 |
24 | defaultConfig {
25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
26 | applicationId "com.flutteruichallenge.bookreader"
27 | minSdkVersion 16
28 | targetSdkVersion 27
29 | versionCode 1
30 | versionName "1.0"
31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32 | }
33 |
34 | buildTypes {
35 | release {
36 | // TODO: Add your own signing config for the release build.
37 | // Signing with the debug keys for now, so `flutter run --release` works.
38 | signingConfig signingConfigs.debug
39 | }
40 | }
41 | }
42 |
43 | flutter {
44 | source '../..'
45 | }
46 |
47 | dependencies {
48 | testImplementation 'junit:junit:4.12'
49 | androidTestImplementation 'com.android.support.test:runner:1.0.1'
50 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
51 | }
52 |
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
15 |
19 |
26 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/java/com/flutteruichallenge/bookreader/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.flutteruichallenge.bookreader;
2 |
3 | import android.os.Bundle;
4 |
5 | import io.flutter.app.FlutterActivity;
6 | import io.flutter.plugins.GeneratedPluginRegistrant;
7 |
8 | public class MainActivity extends FlutterActivity {
9 | @Override
10 | protected void onCreate(Bundle savedInstanceState) {
11 | super.onCreate(savedInstanceState);
12 | GeneratedPluginRegistrant.registerWith(this);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bookreader/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/bookreader/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.0.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | }
18 |
19 | rootProject.buildDir = '../build'
20 | subprojects {
21 | project.buildDir = "${rootProject.buildDir}/${project.name}"
22 | }
23 | subprojects {
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/bookreader/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
--------------------------------------------------------------------------------
/bookreader/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/bookreader/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-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/bookreader/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/bookreader/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/bookreader/assets/fonts/fontello.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/fonts/fontello.ttf
--------------------------------------------------------------------------------
/bookreader/assets/images/book1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/images/book1.gif
--------------------------------------------------------------------------------
/bookreader/assets/images/book2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/images/book2.gif
--------------------------------------------------------------------------------
/bookreader/assets/images/book3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/images/book3.gif
--------------------------------------------------------------------------------
/bookreader/assets/images/book4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/images/book4.gif
--------------------------------------------------------------------------------
/bookreader/assets/images/owl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/assets/images/owl.png
--------------------------------------------------------------------------------
/bookreader/bookreader.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/bookreader/bookreader_android.iml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/bookreader/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | *.pbxuser
16 | *.mode1v3
17 | *.mode2v3
18 | *.perspectivev3
19 |
20 | !default.pbxuser
21 | !default.mode1v3
22 | !default.mode2v3
23 | !default.perspectivev3
24 |
25 | xcuserdata
26 |
27 | *.moved-aside
28 |
29 | *.pyc
30 | *sync/
31 | Icon?
32 | .tags*
33 |
34 | /Flutter/app.flx
35 | /Flutter/app.zip
36 | /Flutter/flutter_assets/
37 | /Flutter/App.framework
38 | /Flutter/Flutter.framework
39 | /Flutter/Generated.xcconfig
40 | /ServiceDefinitions.json
41 |
42 | Pods/
43 |
--------------------------------------------------------------------------------
/bookreader/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 | UIRequiredDeviceCapabilities
24 |
25 | arm64
26 |
27 | MinimumOSVersion
28 | 8.0
29 |
30 |
31 |
--------------------------------------------------------------------------------
/bookreader/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/bookreader/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
7 | [GeneratedPluginRegistrant registerWithRegistry:self];
8 | // Override point for customization after application launch.
9 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
10 | }
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/bookreader/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 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/bookreader/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 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/bookreader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/bookreader/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.
--------------------------------------------------------------------------------
/bookreader/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 |
--------------------------------------------------------------------------------
/bookreader/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 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | bookreader
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | arm64
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/bookreader/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/bookreader/lib/book.dart:
--------------------------------------------------------------------------------
1 |
2 | class Book {
3 |
4 | String asset;
5 | String title;
6 | String author;
7 |
8 | Book(this.asset, this.title, this.author);
9 |
10 | }
11 |
12 | List books = [
13 | Book('assets/images/book1.gif', 'The Fault In Our Stars', 'by John Green and Rodrigo Corral'),
14 | Book('assets/images/book2.gif', 'Mr Mercedes', 'by Stephen King'),
15 | Book('assets/images/book3.gif', 'Panic', 'by Lauren Oliver'),
16 | //Book('assets/images/book4.gif', 'The 5th Wave', 'Rick Yancey')
17 | ];
--------------------------------------------------------------------------------
/bookreader/lib/book_shelf.dart:
--------------------------------------------------------------------------------
1 | import 'package:bookreader/book_row.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | class BookShelf extends StatelessWidget {
5 | @override
6 | Widget build(BuildContext context) {
7 | return new Scaffold(
8 | body: new Container(
9 | color: Colors.blue[900],
10 | child: new Column(
11 | mainAxisAlignment: MainAxisAlignment.end,
12 | children: [
13 | new Hero(
14 | tag: 'image-hero',
15 | child: new Container(
16 | margin: const EdgeInsets.only(bottom: 20.0),
17 | child: new Image.asset('assets/images/owl.png',
18 | width: 50.0, height: 50.0, color: Colors.white),
19 | )),
20 | new Container(
21 | margin: const EdgeInsets.only(bottom: 20.0),
22 | child: new Text('Discover. Learn. Elevate.',
23 | style: const TextStyle(
24 | fontSize: 20.0,
25 | color: Colors.white,
26 | fontWeight: FontWeight.w200)),
27 | ),
28 | new Container(
29 | height: 450.0,
30 | width: double.infinity,
31 | decoration: new BoxDecoration(
32 | borderRadius: new BorderRadius.only(topLeft: const Radius.circular(30.0), topRight: const Radius.circular(30.0)),
33 | color: Colors.white,
34 | ),
35 | child: new DefaultTabController(
36 | length: 3,
37 | child: new Column(
38 | children: [
39 | new TabBar(
40 | indicatorWeight: 3.0,
41 | isScrollable: true,
42 | labelColor: Colors.black87,
43 | tabs: [
44 | new Tab(text: 'BOOKS'),
45 | new Tab(text: 'PODCAST'),
46 | new Tab(text: 'WORKSHOPS'),
47 | ],
48 | ),
49 | new BookRow(),
50 | ],
51 | ),
52 | ),
53 | ),
54 | ],
55 | ),
56 | ),
57 | );
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/bookreader/lib/icons.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class BookReaderIcons {
4 |
5 | static final IconData menu = new IconData(0xe80d, fontFamily: 'Fontello');
6 |
7 | }
--------------------------------------------------------------------------------
/bookreader/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: bookreader
2 | description: A new Flutter application.
3 |
4 | dependencies:
5 | flutter:
6 | sdk: flutter
7 |
8 | # The following adds the Cupertino Icons font to your application.
9 | # Use with the CupertinoIcons class for iOS style icons.
10 | cupertino_icons: ^0.1.0
11 |
12 | dev_dependencies:
13 | flutter_test:
14 | sdk: flutter
15 |
16 |
17 | # For information on the generic Dart part of this file, see the
18 | # following page: https://www.dartlang.org/tools/pub/pubspec
19 |
20 | # The following section is specific to Flutter.
21 | flutter:
22 |
23 | # The following line ensures that the Material Icons font is
24 | # included with your application, so that you can use the icons in
25 | # the material Icons class.
26 | uses-material-design: true
27 |
28 | # To add assets to your application, add an assets section, like this:
29 | # assets:
30 | # - images/a_dot_burr.jpeg
31 | # - images/a_dot_ham.jpeg
32 |
33 | assets:
34 | - assets/images/owl.png
35 | - assets/images/book1.gif
36 | - assets/images/book2.gif
37 | - assets/images/book3.gif
38 | - assets/images/book4.gif
39 |
40 | fonts:
41 | - family: Fontello
42 | fonts:
43 | - asset: assets/fonts/fontello.ttf
44 |
45 | # An image asset can refer to one or more resolution-specific "variants", see
46 | # https://flutter.io/assets-and-images/#resolution-aware.
47 |
48 | # For details regarding adding assets from package dependencies, see
49 | # https://flutter.io/assets-and-images/#from-packages
50 |
51 | # To add custom fonts to your application, add a fonts section here,
52 | # in this "flutter" section. Each entry in this list should have a
53 | # "family" key with the font family name, and a "fonts" key with a
54 | # list giving the asset and other descriptors for the font. For
55 | # example:
56 | # fonts:
57 | # - family: Schyler
58 | # fonts:
59 | # - asset: fonts/Schyler-Regular.ttf
60 | # - asset: fonts/Schyler-Italic.ttf
61 | # style: italic
62 | # - family: Trajan Pro
63 | # fonts:
64 | # - asset: fonts/TrajanPro.ttf
65 | # - asset: fonts/TrajanPro_Bold.ttf
66 | # weight: 700
67 | #
68 | # For details regarding fonts from package dependencies,
69 | # see https://flutter.io/custom-fonts/#from-packages
70 |
--------------------------------------------------------------------------------
/bookreader/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:bookreader/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(new BookReaderApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/drinkshop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop.gif
--------------------------------------------------------------------------------
/drinkshop/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .idea
4 | .vscode/
5 | .packages
6 | .pub/
7 | build/
8 | ios/.generated/
9 | packages
10 | .flutter-plugins
11 |
--------------------------------------------------------------------------------
/drinkshop/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 3ea4d06340a97a1e9d7cae97567c64e0569dcaa2
8 | channel: beta
9 |
--------------------------------------------------------------------------------
/drinkshop/README.md:
--------------------------------------------------------------------------------
1 | # drinkshop
2 |
3 | A new Flutter project.
4 |
5 | ## Getting Started
6 |
7 | For help getting started with Flutter, view our online
8 | [documentation](https://flutter.io/).
9 |
--------------------------------------------------------------------------------
/drinkshop/android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/drinkshop/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.class
3 | .gradle
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | GeneratedPluginRegistrant.java
11 |
--------------------------------------------------------------------------------
/drinkshop/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 | apply plugin: 'com.android.application'
15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
16 |
17 | android {
18 | compileSdkVersion 27
19 |
20 | lintOptions {
21 | disable 'InvalidPackage'
22 | }
23 |
24 | defaultConfig {
25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
26 | applicationId "com.flutteruichallenge.drinkshop"
27 | minSdkVersion 16
28 | targetSdkVersion 27
29 | versionCode 1
30 | versionName "1.0"
31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32 | }
33 |
34 | buildTypes {
35 | release {
36 | // TODO: Add your own signing config for the release build.
37 | // Signing with the debug keys for now, so `flutter run --release` works.
38 | signingConfig signingConfigs.debug
39 | }
40 | }
41 | }
42 |
43 | flutter {
44 | source '../..'
45 | }
46 |
47 | dependencies {
48 | testImplementation 'junit:junit:4.12'
49 | androidTestImplementation 'com.android.support.test:runner:1.0.1'
50 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
51 | }
52 |
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
15 |
19 |
26 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/java/com/flutteruichallenge/drinkshop/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.flutteruichallenge.drinkshop;
2 |
3 | import android.os.Bundle;
4 |
5 | import io.flutter.app.FlutterActivity;
6 | import io.flutter.plugins.GeneratedPluginRegistrant;
7 |
8 | public class MainActivity extends FlutterActivity {
9 | @Override
10 | protected void onCreate(Bundle savedInstanceState) {
11 | super.onCreate(savedInstanceState);
12 | GeneratedPluginRegistrant.registerWith(this);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/drinkshop/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/drinkshop/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.0.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | }
18 |
19 | rootProject.buildDir = '../build'
20 | subprojects {
21 | project.buildDir = "${rootProject.buildDir}/${project.name}"
22 | }
23 | subprojects {
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/drinkshop/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
--------------------------------------------------------------------------------
/drinkshop/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/drinkshop/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-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/drinkshop/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/drinkshop/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/drinkshop/assets/fonts/fontello.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/fonts/fontello.ttf
--------------------------------------------------------------------------------
/drinkshop/assets/fonts/ionicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/fonts/ionicons.ttf
--------------------------------------------------------------------------------
/drinkshop/assets/images/folded_card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/images/folded_card.png
--------------------------------------------------------------------------------
/drinkshop/assets/images/frappe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/images/frappe.png
--------------------------------------------------------------------------------
/drinkshop/assets/images/frappe_with_straw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/images/frappe_with_straw.png
--------------------------------------------------------------------------------
/drinkshop/assets/images/glass.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/images/glass.png
--------------------------------------------------------------------------------
/drinkshop/assets/images/glass_with_straw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/assets/images/glass_with_straw.png
--------------------------------------------------------------------------------
/drinkshop/drinkshop.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/drinkshop/drinkshop_android.iml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/drinkshop/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | *.pbxuser
16 | *.mode1v3
17 | *.mode2v3
18 | *.perspectivev3
19 |
20 | !default.pbxuser
21 | !default.mode1v3
22 | !default.mode2v3
23 | !default.perspectivev3
24 |
25 | xcuserdata
26 |
27 | *.moved-aside
28 |
29 | *.pyc
30 | *sync/
31 | Icon?
32 | .tags*
33 |
34 | /Flutter/app.flx
35 | /Flutter/app.zip
36 | /Flutter/flutter_assets/
37 | /Flutter/App.framework
38 | /Flutter/Flutter.framework
39 | /Flutter/Generated.xcconfig
40 | /ServiceDefinitions.json
41 |
42 | Pods/
43 |
--------------------------------------------------------------------------------
/drinkshop/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 | UIRequiredDeviceCapabilities
24 |
25 | arm64
26 |
27 | MinimumOSVersion
28 | 8.0
29 |
30 |
31 |
--------------------------------------------------------------------------------
/drinkshop/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/drinkshop/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
7 | [GeneratedPluginRegistrant registerWithRegistry:self];
8 | // Override point for customization after application launch.
9 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
10 | }
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/drinkshop/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 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/drinkshop/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 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/drinkshop/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/drinkshop/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.
--------------------------------------------------------------------------------
/drinkshop/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 |
--------------------------------------------------------------------------------
/drinkshop/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 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | drinkshop
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | arm64
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/drinkshop/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/drinkshop/lib/add_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:drinkshop/colors.dart';
2 | import 'package:drinkshop/icons.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:meta/meta.dart';
5 |
6 | class AddButton extends StatefulWidget {
7 | final VoidCallback onTap;
8 |
9 | AddButton({@required this.onTap});
10 |
11 | @override
12 | State createState() => new _AddButtonState();
13 | }
14 |
15 | class _AddButtonState extends State
16 | with SingleTickerProviderStateMixin {
17 | final double radius = 90.0;
18 | double radiusScale = 1.0;
19 |
20 | AnimationController buttonAnimationController;
21 | Animation buttonScaleAnimation;
22 |
23 | @override
24 | void initState() {
25 | super.initState();
26 |
27 | buttonAnimationController = new AnimationController(
28 | vsync: this, duration: new Duration(milliseconds: 150));
29 | buttonScaleAnimation = new Tween(begin: 1.0, end: 0.8).animate(
30 | new CurvedAnimation(
31 | parent: buttonAnimationController, curve: Curves.easeIn));
32 | buttonScaleAnimation.addListener(() {
33 | setState(() {});
34 | });
35 | }
36 |
37 | @override
38 | void dispose() {
39 | buttonAnimationController.dispose();
40 | super.dispose();
41 | }
42 |
43 | @override
44 | Widget build(BuildContext context) {
45 | return new GestureDetector(
46 | onTap: () async {
47 | await buttonAnimationController.forward();
48 | widget.onTap();
49 | await buttonAnimationController.reverse();
50 | },
51 | child: new Container(
52 | width: radius * buttonScaleAnimation.value,
53 | height: radius * buttonScaleAnimation.value,
54 | decoration: new BoxDecoration(
55 | color: DrinkShopColors.buttonColor,
56 | shape: BoxShape.circle,
57 | boxShadow: [
58 | new BoxShadow(
59 | color: Colors.black26,
60 | spreadRadius: 1.0,
61 | blurRadius: 3.0,
62 | offset: new Offset(1.0, 2.0),
63 | ),
64 | ],
65 | ),
66 | child: new Icon(
67 | DrinkShopIcons.plus,
68 | color: Colors.white,
69 | ),
70 | ),
71 | );
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/drinkshop/lib/colors.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/painting.dart';
2 |
3 | class DrinkShopColors {
4 | static final Color backgroundColor = new Color(0xFF251829);
5 | static final Color backgroundAccentColor = new Color(0xFF4b3053);
6 | static final Color buttonColor = new Color(0xFFFd5fb5);
7 | static final Color buttonAccentColor = new Color(0xFFEE8AE1);
8 | static final Color headerIconColor = new Color(0xFF7A4E87);
9 | static final Color carouselCardColor = new Color(0xFFEE8AE1);
10 | static final Color carouselCardBackColor = new Color(0xFFD67CCA);
11 | static final Color carouselCardLineColor = new Color(0xFFEEABE1);
12 | }
13 |
--------------------------------------------------------------------------------
/drinkshop/lib/drink_carousel_card.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | import 'package:drinkshop/colors.dart';
4 | import 'package:flutter/material.dart';
5 |
6 | class DrinkCarouselCard extends StatelessWidget {
7 | @override
8 | Widget build(BuildContext context) {
9 | return new CustomPaint(
10 | size: new Size(110.0, 80.0),
11 | painter: new DrinkCarouselCardPainter(),
12 | );
13 | }
14 | }
15 |
16 | class DrinkCarouselCardPainter extends CustomPainter {
17 | final Paint cardPaint;
18 | final Paint cardLinePaint;
19 | final Paint cardBackPaint;
20 |
21 | DrinkCarouselCardPainter()
22 | : cardPaint = new Paint(),
23 | cardBackPaint = new Paint(),
24 | cardLinePaint = new Paint() {
25 | cardPaint.color = DrinkShopColors.carouselCardColor;
26 | cardPaint.style = PaintingStyle.fill;
27 | cardLinePaint.color = DrinkShopColors.carouselCardLineColor;
28 | cardLinePaint.style = PaintingStyle.fill;
29 | cardBackPaint.color = DrinkShopColors.carouselCardBackColor;
30 | cardBackPaint.style = PaintingStyle.fill;
31 | }
32 |
33 | @override
34 | void paint(Canvas canvas, Size size) {
35 | Path cardBackPath = new Path();
36 | cardBackPath.moveTo(0.8 * size.width, 0.0);
37 | cardBackPath.lineTo(size.width, 0.6 * size.height);
38 | cardBackPath.lineTo(0.2 * size.width, 0.6 * size.height);
39 | cardBackPath.close();
40 | canvas.drawPath(cardBackPath, cardBackPaint);
41 |
42 | Path cardPath = new Path();
43 | cardPath.moveTo(0.2 * size.width, 0.0);
44 | cardPath.lineTo(0.0, 0.7 * size.height);
45 | cardPath.lineTo(0.6 * size.width, size.height);
46 | cardPath.lineTo(0.8 * size.width, 0.0);
47 | cardPath.close();
48 | canvas.drawPath(cardPath, cardPaint);
49 |
50 | canvas.rotate(8 * (PI / 180));
51 | canvas.save();
52 |
53 | final horizontalPadding = 5.0;
54 | final verticalPadding = 10.0;
55 | final lineHeight = 20.0;
56 | var rrect = new RRect.fromLTRBR(
57 | 0.2 * size.width + horizontalPadding,
58 | verticalPadding,
59 | 0.7 * size.width - horizontalPadding,
60 | lineHeight,
61 | new Radius.circular(5.0),
62 | );
63 | canvas.drawRRect(rrect, cardLinePaint);
64 |
65 | canvas.rotate(4 * (PI / 180));
66 |
67 | rrect = new RRect.fromLTRBR(
68 | 0.2 * size.width + horizontalPadding,
69 | (verticalPadding) + lineHeight,
70 | 0.7 * size.width - horizontalPadding,
71 | (2 * verticalPadding) + (lineHeight),
72 | new Radius.circular(5.0),
73 | );
74 | canvas.drawRRect(rrect, cardLinePaint);
75 | canvas.restore();
76 | }
77 |
78 | @override
79 | bool shouldRepaint(CustomPainter oldDelegate) => true;
80 | }
81 |
--------------------------------------------------------------------------------
/drinkshop/lib/drink_carousel_item.dart:
--------------------------------------------------------------------------------
1 | import 'dart:math';
2 |
3 | import 'package:drinkshop/models.dart';
4 | import 'package:flutter/material.dart';
5 |
6 | class DrinkCarouselItem extends StatefulWidget {
7 | final Size size;
8 | final Drink drink;
9 | final bool active;
10 | final Function(Drink) onDrinkSelected;
11 |
12 | DrinkCarouselItem({
13 | this.size,
14 | this.drink,
15 | this.active: false,
16 | this.onDrinkSelected,
17 | });
18 |
19 | @override
20 | State createState() => new DrinkCarouselItemState();
21 | }
22 |
23 | class DrinkCarouselItemState extends State
24 | with SingleTickerProviderStateMixin {
25 | AnimationController onTapAnimationController;
26 | Animation tiltAnimation;
27 | Animation translateAnimation;
28 |
29 | @override
30 | void initState() {
31 | super.initState();
32 |
33 | onTapAnimationController = new AnimationController(
34 | vsync: this, duration: new Duration(milliseconds: 300));
35 | tiltAnimation = new Tween(begin: 0.0, end: 40.0).animate(
36 | new CurvedAnimation(
37 | parent: onTapAnimationController,
38 | curve: new Interval(0.0, 1.0, curve: Curves.easeInOut)));
39 | translateAnimation = new Tween(begin: 0.0, end: 60.0).animate(
40 | new CurvedAnimation(
41 | parent: onTapAnimationController,
42 | curve: new Interval(0.0, 1.0, curve: Curves.easeInOut)));
43 |
44 | tiltAnimation.addListener(() {
45 | setState(() {});
46 | });
47 | translateAnimation.addListener(() {
48 | setState(() {});
49 | });
50 | }
51 |
52 | @override
53 | Widget build(BuildContext context) {
54 | final transform = new Matrix4.translationValues(
55 | (-1 * translateAnimation.value) + 10.0,
56 | -1 * translateAnimation.value,
57 | 0.0)
58 | ..rotateZ(-1 * tiltAnimation.value * (PI / 180));
59 | return new GestureDetector(
60 | onTap: _tapped,
61 | child: new Transform(
62 | alignment: Alignment.center,
63 | transform: transform,
64 | child: new SizedBox(
65 | width: widget.size.width,
66 | height: widget.size.height,
67 | child: new Image.asset(
68 | widget.drink.asset,
69 | fit: BoxFit.cover,
70 | ),
71 | ),
72 | ),
73 | );
74 | }
75 |
76 | void _tapped() async {
77 | if (widget.active) {
78 | await onTapAnimationController.forward();
79 | await onTapAnimationController.reverse();
80 | if (null != widget.onDrinkSelected) {
81 | widget.onDrinkSelected(widget.drink);
82 | }
83 | }
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/drinkshop/lib/drink_shop_home.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:drinkshop/colors.dart';
4 | import 'package:drinkshop/drink_selection_panel.dart';
5 | import 'package:drinkshop/header.dart';
6 | import 'package:drinkshop/models.dart';
7 | import 'package:flutter/material.dart';
8 |
9 | class DrinkShopHome extends StatefulWidget {
10 | @override
11 | State createState() => new DrinkShopHomeState();
12 | }
13 |
14 | class DrinkShopHomeState extends State {
15 | StreamController drinkTypeStream;
16 |
17 | @override
18 | void initState() {
19 | super.initState();
20 | drinkTypeStream = new StreamController();
21 | }
22 |
23 | @override
24 | void dispose() {
25 | drinkTypeStream.close();
26 | super.dispose();
27 | }
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | final screenHeight = MediaQuery.of(context).size.height;
32 | final screenWidth = MediaQuery.of(context).size.width;
33 | final panelSize = new Size(screenWidth, screenHeight * (3 / 4));
34 | return new Scaffold(
35 | body: new Container(
36 | color: DrinkShopColors.backgroundColor,
37 | padding: EdgeInsets.zero,
38 | margin: EdgeInsets.zero,
39 | child: new Stack(
40 | children: [
41 | new DrinkSelectionPanel(drinkTypeStream, panelSize),
42 | new DrinkShopHeader(drinkTypeStream),
43 | _buildOrderItems(),
44 | ],
45 | ),
46 | ),
47 | );
48 | }
49 |
50 | Widget _buildOrderItems() {
51 | return new Align(
52 | alignment: new Alignment(0.0, 0.8),
53 | child: new Text(
54 | "YOUR ORDER WILL APPEAR HERE",
55 | style: new TextStyle(
56 | color: DrinkShopColors.backgroundAccentColor,
57 | ),
58 | ),
59 | );
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/drinkshop/lib/header.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:drinkshop/colors.dart';
4 | import 'package:drinkshop/drink_switch_menu.dart';
5 | import 'package:drinkshop/icons.dart';
6 | import 'package:flutter/material.dart';
7 |
8 | class DrinkShopHeader extends StatelessWidget {
9 |
10 | final StreamController drinkTypeStream;
11 |
12 | DrinkShopHeader(this.drinkTypeStream);
13 |
14 | @override
15 | Widget build(BuildContext context) {
16 | return new Container(
17 | height: 100.0,
18 | padding: new EdgeInsets.only(
19 | top: MediaQuery.of(context).padding.top + 20,
20 | left: 20.0,
21 | right: 20.0),
22 | child: new Row(
23 | mainAxisAlignment: MainAxisAlignment.center,
24 | crossAxisAlignment: CrossAxisAlignment.start,
25 | children: [
26 | new IconButton(
27 | icon: new Icon(
28 | DrinkShopIcons.menu,
29 | color: DrinkShopColors.headerIconColor,
30 | size: 30.0,
31 | ),
32 | onPressed: () {}),
33 | new Expanded(
34 | child: new Container(),
35 | ),
36 | new DrinkSwitchMenu(drinkTypeStream),
37 | ],
38 | ),
39 | );
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/drinkshop/lib/icons.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/widgets.dart';
2 |
3 | class DrinkShopIcons {
4 | static final String fontFamily = "ionicons";
5 | static final IconData plus = new IconData(0xf217, fontFamily: fontFamily);
6 | static final IconData controls = new IconData(0xf39d, fontFamily: fontFamily);
7 | static final IconData menu = new IconData(0xf20d, fontFamily: fontFamily);
8 | static final IconData snowflake = new IconData(0xe80c, fontFamily: "fontello");
9 | static final IconData iceCubes = new IconData(0xe80b, fontFamily: "fontello");
10 | }
11 |
--------------------------------------------------------------------------------
/drinkshop/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:drinkshop/drink_shop_home.dart';
2 | import 'package:flutter/material.dart';
3 | import 'package:flutter/services.dart';
4 |
5 | class DrinkShopApp extends StatelessWidget {
6 | DrinkShopApp() {
7 | SystemChrome.setPreferredOrientations(
8 | [DeviceOrientation.portraitUp]);
9 | }
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return new MaterialApp(
14 | debugShowCheckedModeBanner: false,
15 | title: "Drink Shop",
16 | home: new DrinkShopHome(),
17 | );
18 | }
19 | }
20 |
21 | void main() => runApp(new DrinkShopApp());
22 |
--------------------------------------------------------------------------------
/drinkshop/lib/models.dart:
--------------------------------------------------------------------------------
1 | enum DrinkType { frappe, glass }
2 |
3 | class Drink {
4 | DrinkType drinkType;
5 | String name;
6 | double price;
7 |
8 | String get asset => drinkType == DrinkType.glass
9 | ? "assets/images/glass_with_straw.png"
10 | : "assets/images/frappe_with_straw.png";
11 | }
12 |
13 | List getDrinks(DrinkType type) {
14 | return _drinks[type];
15 | }
16 |
17 | Map> _drinks = >{
18 | DrinkType.frappe: [
19 | new Drink()
20 | ..drinkType = DrinkType.frappe
21 | ..name = 'Latte Macchiato'
22 | ..price = 7.0,
23 | new Drink()
24 | ..drinkType = DrinkType.frappe
25 | ..name = 'Doppio'
26 | ..price = 8.0,
27 | new Drink()
28 | ..drinkType = DrinkType.frappe
29 | ..name = 'Americano'
30 | ..price = 7.0,
31 | new Drink()
32 | ..drinkType = DrinkType.frappe
33 | ..name = 'Espresso Macchiato'
34 | ..price = 8.0,
35 | new Drink()
36 | ..drinkType = DrinkType.frappe
37 | ..name = 'Latte'
38 | ..price = 7.0,
39 | new Drink()
40 | ..drinkType = DrinkType.frappe
41 | ..name = 'Cappuccino'
42 | ..price = 8.0,
43 | new Drink()
44 | ..drinkType = DrinkType.frappe
45 | ..name = 'Caramel Macchiato'
46 | ..price = 7.0,
47 | new Drink()
48 | ..drinkType = DrinkType.frappe
49 | ..name = 'Mocha'
50 | ..price = 8.0,
51 | ],
52 | DrinkType.glass: [
53 | new Drink()
54 | ..drinkType = DrinkType.glass
55 | ..name = 'Cool Lime'
56 | ..price = 15.0,
57 | new Drink()
58 | ..drinkType = DrinkType.glass
59 | ..name = 'Ombré Pink Drink'
60 | ..price = 12.0,
61 | new Drink()
62 | ..drinkType = DrinkType.glass
63 | ..name = 'Vanilla Sweet Cream'
64 | ..price = 15.0,
65 | new Drink()
66 | ..drinkType = DrinkType.glass
67 | ..name = 'Nariño 70'
68 | ..price = 12.0,
69 | new Drink()
70 | ..drinkType = DrinkType.glass
71 | ..name = 'Iced Coffee'
72 | ..price = 15.0,
73 | new Drink()
74 | ..drinkType = DrinkType.glass
75 | ..name = 'Nitro'
76 | ..price = 12.0,
77 | new Drink()
78 | ..drinkType = DrinkType.glass
79 | ..name = 'Strawberry Acai Beverage'
80 | ..price = 15.0,
81 | new Drink()
82 | ..drinkType = DrinkType.glass
83 | ..name = 'Violet Drink'
84 | ..price = 12.0,
85 | ],
86 | };
87 |
--------------------------------------------------------------------------------
/drinkshop/lib/settings_button.dart:
--------------------------------------------------------------------------------
1 | import 'package:drinkshop/colors.dart';
2 | import 'package:drinkshop/icons.dart';
3 | import 'package:flutter/material.dart';
4 |
5 | class SettingsButton extends StatelessWidget {
6 | @override
7 | Widget build(BuildContext context) {
8 | return new Container(
9 | width: 50.0,
10 | height: 50.0,
11 | decoration: new BoxDecoration(
12 | color: DrinkShopColors.buttonAccentColor,
13 | shape: BoxShape.circle,
14 | boxShadow: [
15 | new BoxShadow(
16 | color: Colors.black26,
17 | spreadRadius: 1.0,
18 | blurRadius: 3.0,
19 | offset: new Offset(1.0, 2.0),
20 | ),
21 | ],
22 | ),
23 | child: new Icon(
24 | DrinkShopIcons.controls,
25 | color: Colors.white,
26 | ),
27 | );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/drinkshop/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: drinkshop
2 | description: A new Flutter project.
3 |
4 | dependencies:
5 | flutter:
6 | sdk: flutter
7 |
8 | # The following adds the Cupertino Icons font to your application.
9 | # Use with the CupertinoIcons class for iOS style icons.
10 | cupertino_icons: ^0.1.0
11 |
12 | dev_dependencies:
13 | flutter_test:
14 | sdk: flutter
15 |
16 |
17 | # For information on the generic Dart part of this file, see the
18 | # following page: https://www.dartlang.org/tools/pub/pubspec
19 |
20 | # The following section is specific to Flutter.
21 | flutter:
22 |
23 | # The following line ensures that the Material Icons font is
24 | # included with your application, so that you can use the icons in
25 | # the material Icons class.
26 | uses-material-design: true
27 |
28 | assets:
29 | - assets/images/frappe.png
30 | - assets/images/glass.png
31 | - assets/images/frappe_with_straw.png
32 | - assets/images/glass_with_straw.png
33 |
34 | fonts:
35 | - family: ionicons
36 | fonts:
37 | - asset: assets/fonts/ionicons.ttf
38 | - family: fontello
39 | fonts:
40 | - asset: assets/fonts/fontello.ttf
41 |
42 | # To add assets to your application, add an assets section, like this:
43 | # assets:
44 | # - images/a_dot_burr.jpeg
45 | # - images/a_dot_ham.jpeg
46 |
47 | # An image asset can refer to one or more resolution-specific "variants", see
48 | # https://flutter.io/assets-and-images/#resolution-aware.
49 |
50 | # For details regarding adding assets from package dependencies, see
51 | # https://flutter.io/assets-and-images/#from-packages
52 |
53 | # To add custom fonts to your application, add a fonts section here,
54 | # in this "flutter" section. Each entry in this list should have a
55 | # "family" key with the font family name, and a "fonts" key with a
56 | # list giving the asset and other descriptors for the font. For
57 | # example:
58 | # fonts:
59 | # - family: Schyler
60 | # fonts:
61 | # - asset: fonts/Schyler-Regular.ttf
62 | # - asset: fonts/Schyler-Italic.ttf
63 | # style: italic
64 | # - family: Trajan Pro
65 | # fonts:
66 | # - asset: fonts/TrajanPro.ttf
67 | # - asset: fonts/TrajanPro_Bold.ttf
68 | # weight: 700
69 | #
70 | # For details regarding fonts from package dependencies,
71 | # see https://flutter.io/custom-fonts/#from-packages
72 |
--------------------------------------------------------------------------------
/drinkshop/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:drinkshop/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(new DrinkShopApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/profile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile.png
--------------------------------------------------------------------------------
/profile/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .idea
4 | .vscode/
5 | .packages
6 | .pub/
7 | build/
8 | ios/.generated/
9 | packages
10 | .flutter-plugins
11 |
--------------------------------------------------------------------------------
/profile/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 3ea4d06340a97a1e9d7cae97567c64e0569dcaa2
8 | channel: beta
9 |
--------------------------------------------------------------------------------
/profile/README.md:
--------------------------------------------------------------------------------
1 | # Profile
2 |
3 | A new Flutter project.
4 |
5 |
6 |
7 | ## Getting Started
8 |
9 | For help getting started with Flutter, view our online
10 | [documentation](https://flutter.io/).
11 |
--------------------------------------------------------------------------------
/profile/android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/profile/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.class
3 | .gradle
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | GeneratedPluginRegistrant.java
11 |
--------------------------------------------------------------------------------
/profile/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 | apply plugin: 'com.android.application'
15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
16 |
17 | android {
18 | compileSdkVersion 27
19 |
20 | lintOptions {
21 | disable 'InvalidPackage'
22 | }
23 |
24 | defaultConfig {
25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
26 | applicationId "com.flutteruichallenge.profile"
27 | minSdkVersion 16
28 | targetSdkVersion 27
29 | versionCode 1
30 | versionName "1.0"
31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32 | }
33 |
34 | buildTypes {
35 | release {
36 | // TODO: Add your own signing config for the release build.
37 | // Signing with the debug keys for now, so `flutter run --release` works.
38 | signingConfig signingConfigs.debug
39 | }
40 | }
41 | }
42 |
43 | flutter {
44 | source '../..'
45 | }
46 |
47 | dependencies {
48 | testImplementation 'junit:junit:4.12'
49 | androidTestImplementation 'com.android.support.test:runner:1.0.1'
50 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
51 | }
52 |
--------------------------------------------------------------------------------
/profile/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
15 |
19 |
26 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/profile/android/app/src/main/java/com/flutteruichallenge/profile/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.flutteruichallenge.profile;
2 |
3 | import android.os.Bundle;
4 |
5 | import io.flutter.app.FlutterActivity;
6 | import io.flutter.plugins.GeneratedPluginRegistrant;
7 |
8 | public class MainActivity extends FlutterActivity {
9 | @Override
10 | protected void onCreate(Bundle savedInstanceState) {
11 | super.onCreate(savedInstanceState);
12 | GeneratedPluginRegistrant.registerWith(this);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/profile/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/profile/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.0.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | }
18 |
19 | rootProject.buildDir = '../build'
20 | subprojects {
21 | project.buildDir = "${rootProject.buildDir}/${project.name}"
22 | }
23 | subprojects {
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/profile/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
--------------------------------------------------------------------------------
/profile/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/profile/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-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/profile/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/profile/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/profile/assets/fonts/line-awesome.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/fonts/line-awesome.ttf
--------------------------------------------------------------------------------
/profile/assets/fonts/themify.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/fonts/themify.ttf
--------------------------------------------------------------------------------
/profile/assets/fonts/timeburnerbold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/fonts/timeburnerbold.ttf
--------------------------------------------------------------------------------
/profile/assets/fonts/timeburnernormal.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/fonts/timeburnernormal.ttf
--------------------------------------------------------------------------------
/profile/assets/images/emma-watson.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/images/emma-watson.jpg
--------------------------------------------------------------------------------
/profile/assets/images/joystick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/images/joystick.png
--------------------------------------------------------------------------------
/profile/assets/images/microphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/images/microphone.png
--------------------------------------------------------------------------------
/profile/assets/images/wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/assets/images/wallet.png
--------------------------------------------------------------------------------
/profile/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | *.pbxuser
16 | *.mode1v3
17 | *.mode2v3
18 | *.perspectivev3
19 |
20 | !default.pbxuser
21 | !default.mode1v3
22 | !default.mode2v3
23 | !default.perspectivev3
24 |
25 | xcuserdata
26 |
27 | *.moved-aside
28 |
29 | *.pyc
30 | *sync/
31 | Icon?
32 | .tags*
33 |
34 | /Flutter/app.flx
35 | /Flutter/app.zip
36 | /Flutter/flutter_assets/
37 | /Flutter/App.framework
38 | /Flutter/Flutter.framework
39 | /Flutter/Generated.xcconfig
40 | /ServiceDefinitions.json
41 |
42 | Pods/
43 |
--------------------------------------------------------------------------------
/profile/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 | UIRequiredDeviceCapabilities
24 |
25 | arm64
26 |
27 | MinimumOSVersion
28 | 8.0
29 |
30 |
31 |
--------------------------------------------------------------------------------
/profile/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/profile/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/profile/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/profile/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/profile/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/profile/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
7 | [GeneratedPluginRegistrant registerWithRegistry:self];
8 | // Override point for customization after application launch.
9 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
10 | }
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/profile/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 |
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/profile/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 |
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/profile/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.
--------------------------------------------------------------------------------
/profile/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 |
--------------------------------------------------------------------------------
/profile/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 |
--------------------------------------------------------------------------------
/profile/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | profile
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | arm64
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/profile/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/profile/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:profile/main_menu.dart';
3 | import 'package:profile/models.dart';
4 | import 'package:profile/profile_colors.dart';
5 | import 'package:profile/profile_icons.dart';
6 | import 'package:profile/profile_header.dart';
7 | import 'package:profile/quick_actions.dart';
8 |
9 | void main() => runApp(new ProfileApp());
10 |
11 |
12 | class ProfileApp extends StatelessWidget {
13 | @override
14 | Widget build(BuildContext context) {
15 | return new MaterialApp(
16 | title: 'Profile Challenge',
17 | home: new ProfileHomePage()
18 | );
19 | }
20 | }
21 |
22 | class ProfileHomePage extends StatelessWidget {
23 | @override
24 | Widget build(BuildContext context) {
25 | final iconColor = new Color(0xFFCCCCCC);
26 | final navigationItems = [
27 | new BottomNavigationBarItem(
28 | icon: new Icon(LineAwesomeIcons.home, color: iconColor),
29 | title: new Text("")),
30 | new BottomNavigationBarItem(
31 | icon: new Icon(LineAwesomeIcons.bookmark, color: iconColor,),
32 | title: new Text("")),
33 | new BottomNavigationBarItem(
34 | icon: new Icon(LineAwesomeIcons.thumbsUp, color: iconColor,),
35 | title: new Text("")),
36 | new BottomNavigationBarItem(
37 | icon: new Icon(
38 | LineAwesomeIcons.user, color: ProfileColors.primaryColor,),
39 | title: new Text(""))
40 | ];
41 |
42 | final profile = getProfile();
43 |
44 | return new Scaffold(
45 | body: new ListView(
46 | padding: const EdgeInsets.all(0.0),
47 | children: [
48 | new ProfileHeader(profile),
49 | new QuickActions(),
50 | new MainMenu(),
51 | ],
52 | ),
53 | bottomNavigationBar: new BottomNavigationBar(
54 | currentIndex: 0,
55 | items: navigationItems,
56 | onTap: (index) {},
57 | fixedColor: ProfileColors.primaryColor,
58 | iconSize: 25.0,
59 | type: BottomNavigationBarType.fixed,
60 | ),
61 | );
62 | }
63 |
64 | }
--------------------------------------------------------------------------------
/profile/lib/main_menu.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:font_awesome_flutter/font_awesome_flutter.dart';
3 |
4 |
5 | class MainMenu extends StatelessWidget {
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | return new Container(
10 | constraints: const BoxConstraints(maxHeight: 240.0),
11 | child: new ListView(
12 | padding: const EdgeInsets.only(left: 5.0),
13 | children: [
14 | _buildListItem("Memories", Icons.camera, () {}),
15 | _buildListItem("Favourites", Icons.favorite, () {}),
16 | _buildListItem("Presents", Icons.card_giftcard, () {}),
17 | _buildListItem("Friends", Icons.people, () {}),
18 | _buildListItem("Achievement", FontAwesomeIcons.trophy, () {}),
19 | ],
20 | ),
21 | );
22 | }
23 |
24 | Widget _buildListItem(String title, IconData iconData, VoidCallback action) {
25 | final textStyle = new TextStyle(
26 | color: Colors.black54, fontSize: 18.0, fontWeight: FontWeight.w600);
27 |
28 | return new InkWell(
29 | onTap: action,
30 | child: new Padding(
31 | padding: const EdgeInsets.only(
32 | left: 10.0, right: 10.0, bottom: 5.0, top: 5.0),
33 | child: new Row(
34 | mainAxisAlignment: MainAxisAlignment.start,
35 | crossAxisAlignment: CrossAxisAlignment.center,
36 | children: [
37 | new Container(
38 | width: 35.0,
39 | height: 35.0,
40 | margin: const EdgeInsets.only(right: 10.0),
41 | decoration: new BoxDecoration(
42 | color: Colors.purple,
43 | borderRadius: new BorderRadius.circular(5.0),
44 | ),
45 | alignment: Alignment.center,
46 | child: new Icon(iconData, color: Colors.white, size: 24.0),
47 | ),
48 | new Text(title, style: textStyle),
49 | new Expanded(child: new Container()),
50 | new IconButton(
51 | icon: new Icon(Icons.chevron_right, color: Colors.black26),
52 | onPressed: action)
53 | ],
54 | ),
55 | ),
56 | );
57 | }
58 |
59 | }
--------------------------------------------------------------------------------
/profile/lib/models.dart:
--------------------------------------------------------------------------------
1 | class Profile {
2 | String firstName;
3 | String lastName;
4 | String location;
5 | int numberOfFollowers;
6 | int numberFollowing;
7 | int totalLikes;
8 |
9 | String get fullName => "$firstName $lastName";
10 |
11 | String get numberOfFollowersString => _abbreviatedCount(numberOfFollowers);
12 |
13 | String get numberFollowingString => _abbreviatedCount(numberFollowing);
14 |
15 | String get totalLikesString => _abbreviatedCount(totalLikes);
16 |
17 | String _abbreviatedCount(int num) {
18 | if (num < 1000) return "$num";
19 | if (num >= 1000 && num < 1000000) {
20 | String s = (num / 1000).toStringAsFixed(1);
21 | if (s.endsWith(".0")) {
22 | int idx = s.indexOf(".0");
23 | s = s.substring(0, idx);
24 | }
25 | return "${s}K";
26 | } else if (num >= 1000000 && num < 1000000000) {
27 | String s = (num / 1000000).toStringAsFixed(1);
28 | if (s.endsWith(".0")) {
29 | int idx = s.indexOf(".0");
30 | s = s.substring(0, idx);
31 | }
32 | return "${s}M";
33 | }
34 | return "";
35 | }
36 | }
37 |
38 | Profile getProfile() {
39 | return new Profile()
40 | ..firstName = "Emma"
41 | ..lastName = "Watson"
42 | ..location = "New York"
43 | ..numberOfFollowers = 5700000
44 | ..numberFollowing = 924
45 | ..totalLikes = 1700;
46 | }
--------------------------------------------------------------------------------
/profile/lib/profile_colors.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class ProfileColors {
4 | static final Color primaryColor = new Color(0xFF9A10FF);
5 | }
--------------------------------------------------------------------------------
/profile/lib/profile_fonts.dart:
--------------------------------------------------------------------------------
1 | class ProfileFontNames {
2 | static final String TimeBurner = "Timeburner";
3 | }
--------------------------------------------------------------------------------
/profile/lib/profile_icons.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/widgets.dart';
2 |
3 | /// Themify icon font https://themify.me/themify-icons
4 | class ThemifyIcons {
5 | static const fontFamily = "Themify";
6 |
7 | static final IconData bell = new IconData(0xe6b8, fontFamily: fontFamily);
8 | static final IconData home = new IconData(0xe69b, fontFamily: fontFamily);
9 | static final IconData user = new IconData(0xe602, fontFamily: fontFamily);
10 | static final IconData thumbUp = new IconData(0xe670, fontFamily: fontFamily);
11 | static final IconData tag = new IconData(0xe608, fontFamily: fontFamily);
12 | }
13 |
14 | class LineAwesomeIcons {
15 | static const fontFamily = "LineAwesome";
16 |
17 | static final IconData bell = new IconData(0xf141, fontFamily: fontFamily);
18 | static final IconData home = new IconData(0xf237, fontFamily: fontFamily);
19 | static final IconData user = new IconData(0xf364, fontFamily: fontFamily);
20 | static final IconData thumbsUp = new IconData(0xf33f, fontFamily: fontFamily);
21 | static final IconData bookmark = new IconData(0xf14f, fontFamily: fontFamily);
22 | }
--------------------------------------------------------------------------------
/profile/profile.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/profile/profile_android.iml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/profile/profile_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/profile/profile_screen.png
--------------------------------------------------------------------------------
/profile/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: profile
2 | description: A new Flutter project.
3 |
4 | dependencies:
5 | flutter:
6 | sdk: flutter
7 | font_awesome_flutter: "^6.0.0"
8 |
9 | # The following adds the Cupertino Icons font to your application.
10 | # Use with the CupertinoIcons class for iOS style icons.
11 | cupertino_icons: ^0.1.0
12 |
13 | dev_dependencies:
14 | flutter_test:
15 | sdk: flutter
16 |
17 |
18 | # For information on the generic Dart part of this file, see the
19 | # following page: https://www.dartlang.org/tools/pub/pubspec
20 |
21 | # The following section is specific to Flutter.
22 | flutter:
23 |
24 | # The following line ensures that the Material Icons font is
25 | # included with your application, so that you can use the icons in
26 | # the material Icons class.
27 | uses-material-design: true
28 |
29 | # To add assets to your application, add an assets section, like this:
30 | # assets:
31 | # - images/a_dot_burr.jpeg
32 | # - images/a_dot_ham.jpeg
33 |
34 | assets:
35 | - assets/images/emma-watson.jpg
36 | - assets/images/microphone.png
37 | - assets/images/wallet.png
38 | - assets/images/joystick.png
39 |
40 | fonts:
41 | - family: Themify
42 | fonts:
43 | - asset: assets/fonts/themify.ttf
44 | - family: LineAwesome
45 | fonts:
46 | - asset: assets/fonts/line-awesome.ttf
47 | - family: Timeburner
48 | fonts:
49 | - asset: assets/fonts/timeburnernormal.ttf
50 | - asset: assets/fonts/timeburnerbold.ttf
51 | weight: 700
52 |
53 | # An image asset can refer to one or more resolution-specific "variants", see
54 | # https://flutter.io/assets-and-images/#resolution-aware.
55 |
56 | # For details regarding adding assets from package dependencies, see
57 | # https://flutter.io/assets-and-images/#from-packages
58 |
59 | # To add custom fonts to your application, add a fonts section here,
60 | # in this "flutter" section. Each entry in this list should have a
61 | # "family" key with the font family name, and a "fonts" key with a
62 | # list giving the asset and other descriptors for the font. For
63 | # example:
64 | # fonts:
65 | # - family: Schyler
66 | # fonts:
67 | # - asset: fonts/Schyler-Regular.ttf
68 | # - asset: fonts/Schyler-Italic.ttf
69 | # style: italic
70 | # - family: Trajan Pro
71 | # fonts:
72 | # - asset: fonts/TrajanPro.ttf
73 | # - asset: fonts/TrajanPro_Bold.ttf
74 | # weight: 700
75 | #
76 | # For details regarding fonts from package dependencies,
77 | # see https://flutter.io/custom-fonts/#from-packages
78 |
--------------------------------------------------------------------------------
/profile/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:profile/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(new ProfileApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/travel.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel.gif
--------------------------------------------------------------------------------
/travel/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .atom/
3 | .idea
4 | .vscode/
5 | .packages
6 | .pub/
7 | build/
8 | ios/.generated/
9 | packages
10 | .flutter-plugins
11 |
--------------------------------------------------------------------------------
/travel/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled and should not be manually edited.
5 |
6 | version:
7 | revision: 3ea4d06340a97a1e9d7cae97567c64e0569dcaa2
8 | channel: beta
9 |
--------------------------------------------------------------------------------
/travel/README.md:
--------------------------------------------------------------------------------
1 | # Travel App
2 |
3 | A new Flutter project.
4 |
5 |
6 |
7 | ## Getting Started
8 |
9 | For help getting started with Flutter, view our online
10 | [documentation](https://flutter.io/).
11 |
--------------------------------------------------------------------------------
/travel/android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/travel/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.class
3 | .gradle
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | GeneratedPluginRegistrant.java
11 |
--------------------------------------------------------------------------------
/travel/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 | apply plugin: 'com.android.application'
15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
16 |
17 | android {
18 | compileSdkVersion 27
19 |
20 | lintOptions {
21 | disable 'InvalidPackage'
22 | }
23 |
24 | defaultConfig {
25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
26 | applicationId "com.flutteruichallenge.travel"
27 | minSdkVersion 16
28 | targetSdkVersion 27
29 | versionCode 1
30 | versionName "1.0"
31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32 | }
33 |
34 | buildTypes {
35 | release {
36 | // TODO: Add your own signing config for the release build.
37 | // Signing with the debug keys for now, so `flutter run --release` works.
38 | signingConfig signingConfigs.debug
39 | }
40 | }
41 | }
42 |
43 | flutter {
44 | source '../..'
45 | }
46 |
47 | dependencies {
48 | testImplementation 'junit:junit:4.12'
49 | androidTestImplementation 'com.android.support.test:runner:1.0.1'
50 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
51 | }
52 |
--------------------------------------------------------------------------------
/travel/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
15 |
19 |
26 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/travel/android/app/src/main/java/com/flutteruichallenge/travel/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.flutteruichallenge.travel;
2 |
3 | import android.os.Bundle;
4 |
5 | import io.flutter.app.FlutterActivity;
6 | import io.flutter.plugins.GeneratedPluginRegistrant;
7 |
8 | public class MainActivity extends FlutterActivity {
9 | @Override
10 | protected void onCreate(Bundle savedInstanceState) {
11 | super.onCreate(savedInstanceState);
12 | GeneratedPluginRegistrant.registerWith(this);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/travel/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/travel/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | }
6 |
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:3.0.1'
9 | }
10 | }
11 |
12 | allprojects {
13 | repositories {
14 | google()
15 | jcenter()
16 | }
17 | }
18 |
19 | rootProject.buildDir = '../build'
20 | subprojects {
21 | project.buildDir = "${rootProject.buildDir}/${project.name}"
22 | }
23 | subprojects {
24 | project.evaluationDependsOn(':app')
25 | }
26 |
27 | task clean(type: Delete) {
28 | delete rootProject.buildDir
29 | }
30 |
--------------------------------------------------------------------------------
/travel/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
--------------------------------------------------------------------------------
/travel/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/travel/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-4.1-all.zip
7 |
--------------------------------------------------------------------------------
/travel/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/travel/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
4 |
5 | def plugins = new Properties()
6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
7 | if (pluginsFile.exists()) {
8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
9 | }
10 |
11 | plugins.each { name, path ->
12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
13 | include ":$name"
14 | project(":$name").projectDir = pluginDirectory
15 | }
16 |
--------------------------------------------------------------------------------
/travel/assets/bar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/assets/bar.jpg
--------------------------------------------------------------------------------
/travel/ios/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | .vagrant/
3 | .sconsign.dblite
4 | .svn/
5 |
6 | .DS_Store
7 | *.swp
8 | profile
9 |
10 | DerivedData/
11 | build/
12 | GeneratedPluginRegistrant.h
13 | GeneratedPluginRegistrant.m
14 |
15 | *.pbxuser
16 | *.mode1v3
17 | *.mode2v3
18 | *.perspectivev3
19 |
20 | !default.pbxuser
21 | !default.mode1v3
22 | !default.mode2v3
23 | !default.perspectivev3
24 |
25 | xcuserdata
26 |
27 | *.moved-aside
28 |
29 | *.pyc
30 | *sync/
31 | Icon?
32 | .tags*
33 |
34 | /Flutter/app.flx
35 | /Flutter/app.zip
36 | /Flutter/flutter_assets/
37 | /Flutter/App.framework
38 | /Flutter/Flutter.framework
39 | /Flutter/Generated.xcconfig
40 | /ServiceDefinitions.json
41 |
42 | Pods/
43 |
--------------------------------------------------------------------------------
/travel/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 | UIRequiredDeviceCapabilities
24 |
25 | arm64
26 |
27 | MinimumOSVersion
28 | 8.0
29 |
30 |
31 |
--------------------------------------------------------------------------------
/travel/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/travel/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/travel/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/travel/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/travel/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/travel/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
7 | [GeneratedPluginRegistrant registerWithRegistry:self];
8 | // Override point for customization after application launch.
9 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
10 | }
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/travel/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 |
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/travel/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 |
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/travel/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.
--------------------------------------------------------------------------------
/travel/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 |
--------------------------------------------------------------------------------
/travel/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 |
--------------------------------------------------------------------------------
/travel/ios/Runner/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | travel
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | arm64
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/travel/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/travel/lib/animated_background.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AnimatedBackground extends StatefulWidget {
4 | @override
5 | State createState() => new AnimatedBackgroundState();
6 |
7 | }
8 |
9 | class AnimatedBackgroundState extends State
10 | with SingleTickerProviderStateMixin {
11 |
12 | AnimationController animationController;
13 | Animation imageSizeAnimation;
14 | Animation imageSlideAnimation;
15 |
16 | @override
17 | void initState() {
18 | super.initState();
19 |
20 | animationController = new AnimationController(
21 | vsync: this, duration: new Duration(milliseconds: 6000));
22 | imageSizeAnimation = new Tween(begin: 0.0, end: 1.0).animate(
23 | new CurvedAnimation(
24 | parent: animationController,
25 | curve: new Interval(0.0, 0.1, curve: Curves.bounceInOut)));
26 | imageSlideAnimation = new Tween(begin: 0.0, end: 0.5).animate(
27 | new CurvedAnimation(parent: animationController,
28 | curve: new Interval(0.1, 1.0, curve: Curves.linear)));
29 |
30 | imageSlideAnimation.addListener(() {
31 | setState(() {});
32 | });
33 | animationController.forward();
34 | }
35 |
36 | @override
37 | void dispose() {
38 | animationController.dispose();
39 | super.dispose();
40 | }
41 |
42 | @override
43 | Widget build(BuildContext context) {
44 | return new Container(
45 | child: new Align(
46 | alignment: new Alignment(1.0, -0.3),
47 |
48 | child: new ClipPath(
49 | child: new Image(
50 | alignment: new Alignment(imageSlideAnimation.value, 0.0),
51 | width: 250.0 * imageSizeAnimation.value,
52 | height: 350.0 * imageSizeAnimation.value,
53 | image: new AssetImage("assets/bar.jpg"),
54 | fit: BoxFit.cover),
55 | clipper: new _AnimatedBackgroundImageClipper(),
56 | ),
57 | ),
58 | );
59 | }
60 | }
61 |
62 | class _AnimatedBackgroundImageClipper extends CustomClipper {
63 | @override
64 | Path getClip(Size size) {
65 | Offset ctrl;
66 | Offset end;
67 |
68 | Path path = new Path();
69 | path.moveTo(size.width, 0.0);
70 |
71 | path.lineTo(0.2 * size.width, size.height * 0.5 - 20);
72 |
73 | ctrl = new Offset(-0.35 * size.width, size.height);
74 | end = new Offset(0.6 * size.width, size.height * 0.95);
75 | path.quadraticBezierTo(ctrl.dx, ctrl.dy, end.dx, end.dy);
76 |
77 | path.lineTo(0.6 * size.width, size.height * 0.95);
78 |
79 | ctrl = new Offset(0.7 * size.width, size.height - 20);
80 | end = new Offset(0.8 * size.width, size.height * 0.9);
81 | path.quadraticBezierTo(ctrl.dx, ctrl.dy, end.dx, end.dy);
82 |
83 | path.lineTo(0.8 * size.width, size.height * 0.9);
84 |
85 | ctrl = new Offset(0.9 * size.width, size.height * 0.9 - 15);
86 | end = new Offset(size.width, size.height * 0.8);
87 | path.quadraticBezierTo(ctrl.dx, ctrl.dy, end.dx, end.dy);
88 |
89 | path.lineTo(size.width, size.height * 0.8);
90 |
91 | path.close();
92 | return path;
93 | }
94 |
95 | @override
96 | bool shouldReclip(CustomClipper oldClipper) => true;
97 | }
--------------------------------------------------------------------------------
/travel/lib/animated_text.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/material.dart';
4 |
5 | class AnimatedText extends StatefulWidget {
6 | final String text;
7 | final int delayInMilliseconds;
8 | final int durationInMilliseconds;
9 | final TextStyle textStyle;
10 |
11 | AnimatedText(this.text, this.delayInMilliseconds,
12 | {this.durationInMilliseconds: 2500, this.textStyle});
13 |
14 | @override createState() => new AnimatedTextState(text);
15 | }
16 |
17 | class AnimatedTextState extends State
18 | with SingleTickerProviderStateMixin {
19 |
20 | String currentText = "";
21 |
22 | final String text;
23 |
24 | AnimationController animationController;
25 |
26 | List textRunes;
27 | int curIndex = 0;
28 |
29 | AnimatedTextState(this.text) {
30 | textRunes = text.runes.toList();
31 | }
32 |
33 | @override
34 | Future initState() async {
35 | animationController = new AnimationController(
36 | vsync: this,
37 | value: 0.0,
38 | lowerBound: 0.0,
39 | upperBound: textRunes.length.toDouble(),
40 | duration: new Duration(
41 | milliseconds: widget.durationInMilliseconds));
42 |
43 | animationController.addListener(() {
44 | if (animationController.value.toInt() == 0) {
45 | setState(() {
46 | currentText = new String.fromCharCode(textRunes[0]);
47 | });
48 | } else if (animationController.value.toInt() > curIndex &&
49 | animationController.value.toInt() < textRunes.length) {
50 | setState(() {
51 | curIndex = animationController.value.toInt();
52 | currentText += new String.fromCharCode(textRunes[curIndex]);
53 | });
54 | }
55 | });
56 |
57 | await
58 | new Future.delayed(new Duration(milliseconds: widget.delayInMilliseconds));
59 | animationController.forward();
60 | }
61 |
62 | @override
63 | void dispose() {
64 | animationController.dispose();
65 | super.dispose();
66 | }
67 |
68 | @override
69 | Widget build(BuildContext context) {
70 | return new Text(currentText, textAlign: TextAlign.left,
71 | style: widget.textStyle ??
72 | new TextStyle(fontWeight: FontWeight.w600, fontSize: 28.0),);
73 | }
74 | }
--------------------------------------------------------------------------------
/travel/lib/circles.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:meta/meta.dart';
3 |
4 | class Circle extends StatelessWidget {
5 |
6 | final Color color;
7 | final double diameter;
8 | final Offset center;
9 |
10 | Circle({@required this.color, @required this.diameter, this.center});
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return new CustomPaint(
15 | size: new Size(diameter, diameter),
16 | painter: new CirclePainter(color, center: center),
17 | );
18 | }
19 |
20 | }
21 |
22 | class CirclePainter extends CustomPainter {
23 |
24 | final Color color;
25 | final Offset center;
26 |
27 | CirclePainter(this.color, {this.center});
28 |
29 | @override
30 | void paint(Canvas canvas, Size size) {
31 | canvas.drawCircle(
32 | center ?? new Offset(size.width / 2, size.height / 2), size.width / 2,
33 | new Paint()..color = this.color);
34 | }
35 |
36 | @override
37 | bool shouldRepaint(CirclePainter oldDelegate) => true;
38 |
39 | }
--------------------------------------------------------------------------------
/travel/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | import 'package:travel/splash_page.dart';
4 | import 'package:travel/landing_page.dart';
5 |
6 | class TravelApp extends StatelessWidget {
7 | @override
8 | Widget build(BuildContext context) {
9 | return new MaterialApp(
10 | title: "Travel App",
11 | onGenerateRoute: (RouteSettings settings) {
12 | switch (settings.name) {
13 | case '/landing':
14 | return new SplashPageToLandingPageRoute(
15 | builder: (_) => new LandingPage(),
16 | settings: settings
17 | );
18 | }
19 | },
20 | home: new SplashPage(),
21 | );
22 | }
23 | }
24 |
25 | void main() => runApp(new TravelApp());
26 |
27 | class SplashPageToLandingPageRoute extends MaterialPageRoute {
28 | SplashPageToLandingPageRoute(
29 | { WidgetBuilder builder, RouteSettings settings })
30 | : super(builder: builder, settings: settings);
31 |
32 | @override
33 | Duration get transitionDuration => new Duration(milliseconds: 1500);
34 |
35 | @override
36 | Widget buildTransitions(BuildContext context,
37 | Animation animation,
38 | Animation secondaryAnimation,
39 | Widget child) {
40 | if (settings.isInitialRoute)
41 | return child;
42 |
43 | final curve = new CurvedAnimation(
44 | parent: animation, curve: Curves.easeInOut);
45 | return new FadeTransition(opacity: curve, child: child);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/travel/lib/spread_circles.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:travel/circles.dart';
3 |
4 | class SpreadCircles extends StatefulWidget {
5 |
6 | @override
7 | State createState() => new SpreadCirclesState();
8 | }
9 |
10 | class SpreadCirclesState extends State
11 | with SingleTickerProviderStateMixin {
12 |
13 | AnimationController animationController;
14 | Animation purpleCircleDiameter;
15 | Animation yellowCircleDiameter;
16 | Animation greenCircleDiameter;
17 |
18 | @override
19 | void initState() {
20 | super.initState();
21 |
22 | animationController =
23 | new AnimationController(
24 | vsync: this, duration: new Duration(milliseconds: 800));
25 |
26 | purpleCircleDiameter = new Tween(begin: 0.0, end: 130.0).animate(
27 | new CurvedAnimation(parent: animationController,
28 | curve: new Interval(0.0, 0.6, curve: Curves.bounceInOut)));
29 |
30 | yellowCircleDiameter = new Tween(begin: 0.0, end: 80.0).animate(
31 | new CurvedAnimation(parent: animationController,
32 | curve: new Interval(0.3, 0.7, curve: Curves.bounceInOut)));
33 |
34 | greenCircleDiameter = new Tween(begin: 0.0, end: 60.0).animate(
35 | new CurvedAnimation(parent: animationController,
36 | curve: new Interval(0.6, 1.0, curve: Curves.easeIn)));
37 |
38 | purpleCircleDiameter.addListener(() {
39 | setState(() {});
40 | });
41 |
42 | greenCircleDiameter.addListener(() {
43 | setState(() {});
44 | });
45 |
46 | yellowCircleDiameter.addListener(() {
47 | setState(() {});
48 | });
49 |
50 | animationController.forward();
51 | }
52 |
53 | @override
54 | void dispose() {
55 | animationController.dispose();
56 | super.dispose();
57 | }
58 |
59 | @override
60 | Widget build(BuildContext context) {
61 | return new Container(
62 | color: Colors.transparent,
63 | child: new Stack(
64 | children: [
65 | new Align( // light green circle on the left border
66 | alignment: new Alignment(-1.0, -0.05),
67 | child: new Circle(
68 | color: Colors.grey.withGreen(190).withOpacity(0.5),
69 | diameter: greenCircleDiameter.value,
70 | center: new Offset(10.0, 25.0),
71 | ),
72 | ),
73 |
74 | new Align( // purple circle on the right border
75 | alignment: new Alignment(1.0, 0.24),
76 | child: new Circle(
77 | color: Colors.purple.withOpacity(0.8),
78 | diameter: purpleCircleDiameter.value,
79 | center: new Offset(95.0, 75.0),
80 | ),
81 | ),
82 |
83 | new Align( // yellow circle at the top
84 | alignment: new Alignment(0.6, -0.85),
85 | child: new Circle(
86 | color: Colors.yellow.withOpacity(0.8),
87 | diameter: yellowCircleDiameter.value
88 | ),
89 | ),
90 | ],
91 | ),
92 | );
93 | }
94 | }
--------------------------------------------------------------------------------
/travel/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: travel
2 | description: A new Flutter project.
3 |
4 | dependencies:
5 | flutter:
6 | sdk: flutter
7 |
8 | # The following adds the Cupertino Icons font to your application.
9 | # Use with the CupertinoIcons class for iOS style icons.
10 | cupertino_icons: ^0.1.0
11 |
12 | dev_dependencies:
13 | flutter_test:
14 | sdk: flutter
15 |
16 |
17 | # For information on the generic Dart part of this file, see the
18 | # following page: https://www.dartlang.org/tools/pub/pubspec
19 |
20 | # The following section is specific to Flutter.
21 | flutter:
22 |
23 | # The following line ensures that the Material Icons font is
24 | # included with your application, so that you can use the icons in
25 | # the material Icons class.
26 | uses-material-design: true
27 |
28 | assets:
29 | - assets/bar.jpg
30 | # To add assets to your application, add an assets section, like this:
31 | # assets:
32 | # - images/a_dot_burr.jpeg
33 | # - images/a_dot_ham.jpeg
34 |
35 | # An image asset can refer to one or more resolution-specific "variants", see
36 | # https://flutter.io/assets-and-images/#resolution-aware.
37 |
38 | # For details regarding adding assets from package dependencies, see
39 | # https://flutter.io/assets-and-images/#from-packages
40 |
41 | # To add custom fonts to your application, add a fonts section here,
42 | # in this "flutter" section. Each entry in this list should have a
43 | # "family" key with the font family name, and a "fonts" key with a
44 | # list giving the asset and other descriptors for the font. For
45 | # example:
46 | # fonts:
47 | # - family: Schyler
48 | # fonts:
49 | # - asset: fonts/Schyler-Regular.ttf
50 | # - asset: fonts/Schyler-Italic.ttf
51 | # style: italic
52 | # - family: Trajan Pro
53 | # fonts:
54 | # - asset: fonts/TrajanPro.ttf
55 | # - asset: fonts/TrajanPro_Bold.ttf
56 | # weight: 700
57 | #
58 | # For details regarding fonts from package dependencies,
59 | # see https://flutter.io/custom-fonts/#from-packages
60 |
--------------------------------------------------------------------------------
/travel/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:travel/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(new TravelApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/travel/travel.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/travel/travel_android.iml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/travel/travel_app.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tomialagbe/flutter_ui_challenges/eea7e7099e5f9d85e54e2cb344ada0a6054f461e/travel/travel_app.gif
--------------------------------------------------------------------------------