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