├── .gitignore ├── 01_city_guides ├── .gitignore ├── .idea │ ├── libraries │ │ ├── Dart_Packages.xml │ │ ├── Dart_SDK.xml │ │ ├── Flutter_Plugins.xml │ │ └── Flutter_for_Android.xml │ ├── misc.xml │ ├── modules.xml │ ├── runConfigurations │ │ └── main_dart.xml │ ├── vcs.xml │ └── workspace.xml ├── .metadata ├── README.md ├── android │ ├── .gitignore │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── app │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.buildship.core.prefs │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── challenges │ │ │ │ └── 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 │ ├── icons │ │ ├── compass.png │ │ ├── controls.png │ │ ├── location.png │ │ ├── sun.png │ │ └── user.png │ └── imgs │ │ ├── Nature-1091.jpg │ │ ├── location1.jpg │ │ ├── location2.jpg │ │ ├── location3.jpg │ │ ├── location4.jpg │ │ ├── story1.jpg │ │ ├── story2.jpg │ │ ├── story3.jpg │ │ ├── story4.jpg │ │ └── story5.jpg ├── challenges.iml ├── challenges_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 │ ├── data │ │ └── constants.dart │ ├── main.dart │ └── src │ │ ├── app.dart │ │ ├── models │ │ ├── destination.dart │ │ └── story.dart │ │ ├── screens │ │ ├── destination │ │ │ └── destination_screen.dart │ │ ├── home │ │ │ ├── home_screen.dart │ │ │ ├── search_screen.dart │ │ │ └── tabs │ │ │ │ ├── expolore_tab.dart │ │ │ │ ├── location_tab.dart │ │ │ │ └── profile_tab.dart │ │ └── story │ │ │ └── stories_screen.dart │ │ └── widgets │ │ ├── app_icon.dart │ │ ├── destination_card.dart │ │ ├── route_animations.dart │ │ ├── slide_up_animation.dart │ │ └── story_card.dart ├── pubspec.lock ├── pubspec.yaml └── test │ └── widget_test.dart ├── 02_ramen_restaurant ├── .gitignore ├── .idea │ ├── libraries │ │ ├── Dart_SDK.xml │ │ └── Flutter_for_Android.xml │ ├── modules.xml │ ├── runConfigurations │ │ └── main_dart.xml │ └── workspace.xml ├── .metadata ├── .vscode │ └── launch.json ├── README.md ├── android │ ├── .gitignore │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── app │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.buildship.core.prefs │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── ramenrestaurant │ │ │ │ └── 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 │ └── images │ │ ├── beans.png │ │ ├── ewedu.png │ │ ├── indomie.png │ │ ├── jollof.png │ │ └── white.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 │ └── src │ │ ├── app.dart │ │ ├── blocs │ │ └── app_bloc.dart │ │ ├── data │ │ └── constants.dart │ │ ├── models │ │ └── food.dart │ │ ├── screens │ │ └── home_screen.dart │ │ └── widgets │ │ ├── add_to_cart_animation.dart │ │ ├── bounce_in_animation.dart │ │ └── food_card.dart ├── pubspec.lock ├── pubspec.yaml ├── ramen_restaurant.iml ├── ramen_restaurant_android.iml └── test │ └── widget_test.dart ├── 03_task_manager ├── .gitignore ├── .idea │ ├── libraries │ │ ├── Dart_SDK.xml │ │ └── Flutter_for_Android.xml │ ├── modules.xml │ ├── runConfigurations │ │ └── main_dart.xml │ └── workspace.xml ├── .metadata ├── README.md ├── android │ ├── .gitignore │ ├── app │ │ ├── build.gradle │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── tasksmanager │ │ │ │ └── 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 │ ├── graphics │ │ └── logo.png │ └── icons │ │ ├── burger.png │ │ ├── calender.png │ │ └── home.png ├── design │ └── logo.ai ├── 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 │ └── src │ │ ├── app.dart │ │ ├── data │ │ └── constants.dart │ │ ├── screens │ │ ├── home_screen.dart │ │ └── tabs │ │ │ ├── burger_tab.dart │ │ │ ├── calendar_tab.dart │ │ │ └── tasks_tab.dart │ │ ├── utils │ │ ├── page_view_tranforms.dart │ │ └── screen_util.dart │ │ └── widgets │ │ └── tm_bottom_appbar.dart ├── pubspec.lock ├── pubspec.yaml ├── tasks_manager.iml ├── tasks_manager_android.iml └── test │ └── widget_test.dart ├── README.md └── gifs ├── iphonex_travel_demo.gif ├── restaurant.gif └── tasks.gif /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | build/ 8 | 9 | .flutter-plugins 10 | -------------------------------------------------------------------------------- /01_city_guides/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | build/ 8 | 9 | .flutter-plugins 10 | -------------------------------------------------------------------------------- /01_city_guides/.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /01_city_guides/.idea/libraries/Flutter_Plugins.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /01_city_guides/.idea/libraries/Flutter_for_Android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /01_city_guides/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /01_city_guides/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /01_city_guides/.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /01_city_guides/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /01_city_guides/.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: eab5cd9853c13ec2207977d9b9ef7b6750fe0817 8 | channel: unknown 9 | -------------------------------------------------------------------------------- /01_city_guides/README.md: -------------------------------------------------------------------------------- 1 | # Flutter UI Challenges 2 | 3 | A list of Mobile UI Challenges I attempt to build using the amazing [flutter](https://flutter.io/) 4 | 5 | Do makesure to checkout the different branches. 6 | 7 | #Challenge 01 8 | 9 | ### [City Guides](https://github.com/shamnex/flutter_challenges/tree/01-city-guides) (70% Done) 10 | Design made by **Jae-seong,** 11 | 12 | 13 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /01_city_guides/android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /01_city_guides/android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /01_city_guides/android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /01_city_guides/android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /01_city_guides/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.challenges" 37 | minSdkVersion 16 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/java/com/example/challenges/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.challenges; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /01_city_guides/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /01_city_guides/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.1.2' 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 | -------------------------------------------------------------------------------- /01_city_guides/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /01_city_guides/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /01_city_guides/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.4-all.zip 7 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/assets/icons/compass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/icons/compass.png -------------------------------------------------------------------------------- /01_city_guides/assets/icons/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/icons/controls.png -------------------------------------------------------------------------------- /01_city_guides/assets/icons/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/icons/location.png -------------------------------------------------------------------------------- /01_city_guides/assets/icons/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/icons/sun.png -------------------------------------------------------------------------------- /01_city_guides/assets/icons/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/icons/user.png -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/Nature-1091.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/Nature-1091.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/location1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/location1.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/location2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/location2.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/location3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/location3.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/location4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/location4.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/story1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/story1.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/story2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/story2.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/story3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/story3.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/story4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/story4.jpg -------------------------------------------------------------------------------- /01_city_guides/assets/imgs/story5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/assets/imgs/story5.jpg -------------------------------------------------------------------------------- /01_city_guides/challenges.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /01_city_guides/challenges_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /01_city_guides/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 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/app.flx 37 | /Flutter/app.zip 38 | /Flutter/flutter_assets/ 39 | /Flutter/App.framework 40 | /Flutter/Flutter.framework 41 | /Flutter/Generated.xcconfig 42 | /ServiceDefinitions.json 43 | 44 | Pods/ 45 | .symlinks/ 46 | -------------------------------------------------------------------------------- /01_city_guides/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /01_city_guides/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /01_city_guides/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/01_city_guides/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /01_city_guides/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. -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/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 | challenges 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /01_city_guides/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 | -------------------------------------------------------------------------------- /01_city_guides/lib/data/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/painting.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | 5 | class AppColors { 6 | static const Color darkGrey = const Color(0xFF666666); 7 | static const Color bodyText = const Color(0xFF9d9d9d); 8 | static const Color boldText = const Color(0xFF222222); 9 | static const Color lightGrey = const Color(0xFFd1d1d1); 10 | static const Color primary = const Color(0xFF481300); 11 | static const Color background = const Color(0xFFE8E8E8); 12 | 13 | } 14 | 15 | class IconImage { 16 | static const String user = "assets/icons/user.png"; 17 | static const String location = "assets/icons/location.png"; 18 | static const String compass = "assets/icons/compass.png"; 19 | static const String controls = "assets/icons/controls.png"; 20 | static const String sun = "assets/icons/sun.png"; 21 | } 22 | 23 | class DestinationImages { 24 | static const String one = "assets/imgs/location1.jpg"; 25 | static const String two = "assets/imgs/location2.jpg"; 26 | static const String three = "assets/imgs/location3.jpg"; 27 | static const String four = "assets/imgs/location4.jpg"; 28 | } 29 | 30 | class StoryImages { 31 | static const String one = "assets/imgs/story1.jpg"; 32 | static const String two = "assets/imgs/story2.jpg"; 33 | static const String three = "assets/imgs/story3.jpg"; 34 | static const String four = "assets/imgs/story4.jpg"; 35 | static const String five = "assets/imgs/story5.jpg"; 36 | } -------------------------------------------------------------------------------- /01_city_guides/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'src/app.dart'; 3 | 4 | void main () => runApp(App()); -------------------------------------------------------------------------------- /01_city_guides/lib/src/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:challenges/data/constants.dart'; 2 | import 'package:challenges/src/screens/destination/destination_screen.dart'; 3 | import 'package:challenges/src/screens/story/stories_screen.dart'; 4 | import 'package:challenges/src/widgets/route_animations.dart'; 5 | import "package:flutter/material.dart"; 6 | import 'screens/home/home_screen.dart'; 7 | import 'package:challenges/src/screens/home/search_screen.dart'; 8 | 9 | class App extends StatelessWidget { 10 | Widget build(BuildContext context) { 11 | 12 | return MaterialApp( 13 | theme: ThemeData( 14 | iconTheme: IconThemeData(color: Colors.grey), 15 | primaryColor:AppColors.darkGrey, 16 | ), 17 | onGenerateRoute: (RouteSettings settings) { 18 | if (settings.name.contains("destination")) { 19 | final destinationId = 20 | int.parse(settings.name.replaceAll("destination", "")); 21 | 22 | return FadeInRoute(builder: (context) { 23 | return DestinationScreen(destinationId); 24 | }); 25 | } 26 | if (settings.name.contains("story")) { 27 | final int storyId = 28 | int.parse(settings.name.replaceAll("story", "")); 29 | 30 | return SlideLeftRoute(builder: (context) { 31 | return StoryScreen(id: storyId,); 32 | }); 33 | } 34 | 35 | switch (settings.name) { 36 | case "/": 37 | { 38 | return MaterialPageRoute(builder: (context) { 39 | return HomeScreen(); 40 | }); 41 | } 42 | break; 43 | case "/search": 44 | { 45 | return FadeInRoute(builder: (context) { 46 | return SearchScreen(); 47 | }); 48 | } 49 | } 50 | }, 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/models/destination.dart: -------------------------------------------------------------------------------- 1 | import 'package:challenges/data/constants.dart'; 2 | import 'package:challenges/src/models/story.dart'; 3 | 4 | class Destination { 5 | final String title; 6 | final String image; 7 | final String description; 8 | final int temperature; 9 | final List stories; 10 | 11 | Destination( 12 | {this.title, 13 | this.image, 14 | this.description, 15 | this.temperature, 16 | this.stories}); 17 | 18 | static List generate() { 19 | return [ 20 | Destination( 21 | title: "Link Louise", 22 | image: DestinationImages.one, 23 | description: 24 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod ,", 25 | temperature: 23, 26 | stories:Story.generate(), 27 | ), 28 | Destination( 29 | title: "China Town", 30 | image: DestinationImages.two, 31 | description: 32 | "Lorem ipsum dolor sit adunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,", 33 | temperature: 18, 34 | stories:Story.generate(), 35 | ), 36 | Destination( 37 | title: "San Francisco", 38 | image: DestinationImages.three, 39 | description: 40 | "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,", 41 | temperature: 40, 42 | stories:Story.generate(), 43 | ), 44 | Destination( 45 | title: "Paris", 46 | image: DestinationImages.four, 47 | description: 48 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do et dolore magna aliqua. Ut enim ad minim veniam,", 49 | temperature: 10, 50 | stories:Story.generate(), 51 | ), 52 | ]; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/screens/home/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:challenges/data/constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | 5 | import 'tabs/expolore_tab.dart'; 6 | import 'tabs/location_tab.dart'; 7 | import 'tabs/profile_tab.dart'; 8 | 9 | class HomeScreen extends StatefulWidget { 10 | @override 11 | State createState() => HomeScreenState(); 12 | } 13 | 14 | class HomeScreenState extends State { 15 | int _currentTabIndex = 0; 16 | 17 | final List _tabs = [ 18 | ExploreTab(), 19 | LocationTab(), 20 | ProfileTab(), 21 | ]; 22 | 23 | Widget _currentTab; 24 | 25 | @override 26 | initState() { 27 | changeTab(_currentTabIndex); 28 | super.initState(); 29 | } 30 | 31 | changeTab(int index) { 32 | _currentTabIndex = index; 33 | _currentTab = _tabs[_currentTabIndex]; 34 | } 35 | 36 | Widget build(BuildContext ctx) { 37 | return Scaffold( 38 | body: _currentTab, 39 | bottomNavigationBar: buildBottomNavigation(), 40 | resizeToAvoidBottomPadding: false, 41 | ); 42 | } 43 | 44 | Widget buildBottomNavigation() { 45 | return BottomAppBar( 46 | elevation: 0.0, 47 | color: Colors.transparent, 48 | child: Row( 49 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 50 | children: buildItemList( 51 | [ 52 | IconImage.compass, 53 | IconImage.location, 54 | IconImage.user, 55 | ], 56 | ))); 57 | } 58 | 59 | List buildItemList(List items) { 60 | final List _ = []; 61 | items 62 | .asMap() 63 | .forEach((index, item) => _.add(buildItem(item, index))); 64 | 65 | return _; 66 | } 67 | 68 | Widget buildItem(String iconLink, int index) { 69 | return CupertinoButton( 70 | onPressed: () { 71 | setState(() { 72 | changeTab(index); 73 | }); 74 | }, 75 | child: Container( 76 | height: 41.0, 77 | child: Column( 78 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 79 | children: [ 80 | Container( 81 | width: 4.0, 82 | height: 4.0, 83 | decoration: new BoxDecoration( 84 | shape: BoxShape.circle, 85 | color: _currentTabIndex == index 86 | ? AppColors.darkGrey 87 | : Colors.transparent, 88 | ), 89 | ), 90 | Image.asset( 91 | iconLink, 92 | color: _currentTabIndex == index 93 | ? AppColors.darkGrey 94 | : AppColors.lightGrey, 95 | height: 20.0, 96 | ), 97 | ], 98 | ), 99 | ), 100 | ); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/screens/home/tabs/location_tab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LocationTab extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Center(child: Text("Location Screen")); 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /01_city_guides/lib/src/screens/home/tabs/profile_tab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ProfileTab extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | return Center(child: Text("User Screen")); 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /01_city_guides/lib/src/screens/story/stories_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:challenges/data/constants.dart'; 2 | import 'package:challenges/src/models/story.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class StoryScreen extends StatelessWidget { 7 | final int id; 8 | StoryScreen({Key key, @required this.id}) : super(key: key); 9 | @override 10 | Widget build(BuildContext context) { 11 | final story = Story.generate()[id]; 12 | 13 | return Material( 14 | child: Scaffold( 15 | backgroundColor: Colors.transparent, 16 | appBar: buildAppBar(context), 17 | body: Stack( 18 | children: [ 19 | Container( 20 | foregroundDecoration: BoxDecoration( 21 | backgroundBlendMode: BlendMode.screen, 22 | gradient: new LinearGradient( 23 | begin: Alignment(0.0, -0.4), 24 | end: Alignment(0.00, 1.0), 25 | colors: [ 26 | Colors.transparent, 27 | Colors.white, 28 | ], 29 | ), 30 | ), 31 | child: SingleChildScrollView( 32 | child: Container( 33 | padding: EdgeInsets.all(30.0), 34 | child: Column( 35 | crossAxisAlignment: CrossAxisAlignment.start, 36 | children: [ 37 | Container( 38 | width: MediaQuery.of(context).size.width, 39 | padding: EdgeInsets.only(top: 40.0), 40 | child: Text( 41 | story.title, 42 | textAlign: TextAlign.left, 43 | style: TextStyle( 44 | color: AppColors.boldText, 45 | fontSize: 33.0, 46 | fontWeight: FontWeight.w600, 47 | ), 48 | ), 49 | ), 50 | Container( 51 | margin: EdgeInsets.symmetric(vertical: 10.0), 52 | child: Text( 53 | story.excerpt, 54 | textAlign: TextAlign.left, 55 | style: TextStyle( 56 | fontSize: 13.0, 57 | height: 1.3, 58 | color: AppColors.darkGrey, 59 | fontWeight: FontWeight.w300, 60 | letterSpacing: 1.0, 61 | ), 62 | ), 63 | ), 64 | Container( 65 | height: 220.0, 66 | decoration: BoxDecoration( 67 | borderRadius: 68 | BorderRadius.all(Radius.circular(8.0)), 69 | image: DecorationImage( 70 | fit: BoxFit.cover, 71 | image: AssetImage(story.image), 72 | ), 73 | ), 74 | margin: EdgeInsets.symmetric(vertical: 10.0), 75 | ), 76 | Container( 77 | margin: EdgeInsets.symmetric(vertical: 10.0), 78 | child: Text( 79 | story.body, 80 | textAlign: TextAlign.left, 81 | style: TextStyle( 82 | fontSize: 13.0, 83 | height: 1.3, 84 | color: AppColors.darkGrey, 85 | fontWeight: FontWeight.w300, 86 | letterSpacing: 1.0, 87 | ), 88 | ), 89 | ), 90 | ]), 91 | ), 92 | ), 93 | ), 94 | ], 95 | ), 96 | ), 97 | ); 98 | } 99 | 100 | Widget buildAppBar(BuildContext context) { 101 | return AppBar( 102 | leading: CupertinoButton( 103 | child: Icon( 104 | CupertinoIcons.back, 105 | color: AppColors.darkGrey, 106 | ), 107 | onPressed: () { 108 | Navigator.pop(context); 109 | }), 110 | actions: [ 111 | CupertinoButton( 112 | child: Icon( 113 | Icons.favorite_border, 114 | size: 22.0, 115 | color: AppColors.darkGrey, 116 | ), 117 | onPressed: () {}, 118 | ), 119 | 120 | CupertinoButton( 121 | child: Icon( 122 | Icons.share, 123 | size: 22.0, 124 | color: AppColors.darkGrey, 125 | ), 126 | onPressed: () {}, 127 | ), 128 | 129 | // CupertinoButton( 130 | // child: AppIcon( 131 | // image: IconImage.location, 132 | // color: AppColors.darkGrey, 133 | // size: 18.0, 134 | // ), 135 | // onPressed: () {}, 136 | // ), 137 | ], 138 | elevation: 0.0, 139 | backgroundColor: Colors.transparent, 140 | ); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/widgets/app_icon.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class AppIcon extends StatelessWidget { 4 | const AppIcon({ 5 | @required this.image, 6 | this.color, 7 | this.size, 8 | Key key, 9 | }) : super(key: key); 10 | 11 | final image; 12 | final color; 13 | final size; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Image.asset( 18 | image, 19 | height: size == null? 12.0: size, 20 | color: color, 21 | ); 22 | } 23 | } -------------------------------------------------------------------------------- /01_city_guides/lib/src/widgets/destination_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:challenges/data/constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | import '../models/destination.dart'; 4 | 5 | class DestinationCard extends StatelessWidget { 6 | DestinationCard({ 7 | Key key, 8 | @required this.destination, 9 | }) : super(key: key); 10 | 11 | final Destination destination; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return AnimatedOpacity( 16 | opacity: 1.0, 17 | duration: Duration(milliseconds: 400), 18 | child: Container( 19 | margin: EdgeInsets.fromLTRB(8.0, 10.0, 8.0, 24.0), 20 | decoration: BoxDecoration( 21 | color: Colors.white, 22 | borderRadius: BorderRadius.all( 23 | Radius.circular(12.0), 24 | ), 25 | boxShadow: [ 26 | BoxShadow( 27 | color: Colors.black.withOpacity(0.1), 28 | spreadRadius: 0.0, 29 | offset: Offset(0.0, 10.0), 30 | blurRadius: 18.0), 31 | ], 32 | ), 33 | child: Column( 34 | children: [ 35 | Expanded( 36 | flex: 4, 37 | child: Hero( 38 | tag: "${destination.title}_bg", 39 | child: Container( 40 | decoration: BoxDecoration( 41 | image: DecorationImage( 42 | fit: BoxFit.cover, 43 | image: AssetImage(destination.image), 44 | ), 45 | borderRadius: BorderRadius.only( 46 | topLeft: Radius.circular(12.0), 47 | topRight: Radius.circular(12.0), 48 | ), 49 | ), 50 | ), 51 | ), 52 | ), 53 | Expanded( 54 | flex: 3, 55 | child: Container( 56 | padding: EdgeInsets.all(20.0), 57 | child: Column( 58 | crossAxisAlignment: CrossAxisAlignment.start, 59 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 60 | children: [ 61 | Material( 62 | color: Colors.transparent, 63 | child: Column( 64 | crossAxisAlignment: CrossAxisAlignment.start, 65 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 66 | children: [ 67 | Padding( 68 | padding: const EdgeInsets.only(bottom: 8.0), 69 | child: Row( 70 | children: [ 71 | Text( 72 | destination.title, 73 | textAlign: TextAlign.left, 74 | style: TextStyle( 75 | color: AppColors.boldText, 76 | fontSize: 33.0, 77 | fontWeight: FontWeight.w600, 78 | ), 79 | ), 80 | ], 81 | ), 82 | ), 83 | Text( 84 | destination.description, 85 | textAlign: TextAlign.left, 86 | style: TextStyle( 87 | fontSize: 14.0, 88 | color: AppColors.bodyText, 89 | ), 90 | ), 91 | ], 92 | ), 93 | ), 94 | Row( 95 | children: [ 96 | Text( 97 | "EXPLORE", 98 | textAlign: TextAlign.left, 99 | style: TextStyle( 100 | letterSpacing: 1.4, 101 | fontSize: 12.0, 102 | color: AppColors.boldText, 103 | fontWeight: FontWeight.w700, 104 | ), 105 | ), 106 | Icon( 107 | Icons.arrow_forward, 108 | size: 12.0, 109 | color: AppColors.boldText, 110 | ), 111 | ], 112 | ) 113 | ], 114 | ), 115 | ), 116 | ), 117 | ], 118 | ), 119 | ), 120 | ); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/widgets/slide_up_animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SlideUpAnimation extends StatefulWidget { 4 | final Widget child; 5 | final double from; 6 | final double to; 7 | final Duration duration; 8 | final Curve curve; 9 | SlideUpAnimation({ 10 | Key key, 11 | this.from, 12 | this.to, 13 | this.duration, 14 | this.curve, 15 | @required this.child, 16 | }) : super(key: key); 17 | 18 | SlideUpAnimationState of(BuildContext context) => 19 | context.ancestorStateOfType(const TypeMatcher()); 20 | 21 | @override 22 | SlideUpAnimationState createState() { 23 | return new SlideUpAnimationState(); 24 | } 25 | 26 | static AnimationController _controller; 27 | set setController(AnimationController controller) => _controller = controller; 28 | AnimationController get controller => _controller; 29 | } 30 | 31 | class SlideUpAnimationState extends State 32 | with TickerProviderStateMixin { 33 | AnimationController _controller; 34 | Animation opacity; 35 | Animation slideUp; 36 | 37 | @override 38 | void initState() { 39 | // TODO: implement initState 40 | super.initState(); 41 | 42 | _controller = AnimationController( 43 | vsync: this, 44 | duration: widget.duration ?? 45 | Duration( 46 | milliseconds: 800, 47 | ), 48 | ); 49 | 50 | opacity = Tween( 51 | begin: 0.0, 52 | end: 1.0, 53 | ).animate( 54 | CurvedAnimation( 55 | parent: _controller, 56 | curve: Interval( 57 | 0.0, 58 | 1.0, 59 | curve: Curves.linear, 60 | ), 61 | reverseCurve: Interval( 62 | 0.0, 63 | 1.0, 64 | curve: Curves.easeIn, 65 | ), 66 | ), 67 | ); 68 | 69 | slideUp = Tween( 70 | begin: widget.from ?? 200.0, 71 | end: widget.to ?? 0.0, 72 | ).animate( 73 | CurvedAnimation( 74 | parent: _controller, 75 | curve: Interval( 76 | 0.0, 77 | 1.0, 78 | // curve: Cubic(.69,.73,.11,1.0), 79 | ), 80 | reverseCurve: Interval( 81 | 0.0, 82 | 1.0, 83 | curve: Cubic(.69,.73,.11,1.0), 84 | ), 85 | ), 86 | ); 87 | } 88 | 89 | Function get animateForward => _controller.forward; 90 | Function get animateBackward => _controller.reverse; 91 | 92 | @override 93 | void dispose() { 94 | _controller.dispose(); 95 | super.dispose(); 96 | } 97 | 98 | @override 99 | Widget build(BuildContext context) { 100 | animateForward(); 101 | 102 | return AnimatedBuilder( 103 | child: widget.child, 104 | animation: opacity, 105 | builder: (BuildContext context, Widget child) { 106 | widget.setController = widget.of(context)._controller; 107 | return Opacity( 108 | opacity: opacity.value, 109 | child: Transform( 110 | transform: Matrix4.identity()..translate(0.0, slideUp.value), 111 | child: child, 112 | ), 113 | ); 114 | }, 115 | ); 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /01_city_guides/lib/src/widgets/story_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:challenges/data/constants.dart'; 3 | import 'package:challenges/src/models/story.dart'; 4 | 5 | class StoryCard extends StatelessWidget { 6 | const StoryCard({ 7 | Key key, 8 | @required this.story, 9 | }) : super(key: key); 10 | 11 | final Story story; 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Card( 16 | child: Container( 17 | width: 230.0, 18 | 19 | child: Padding( 20 | padding: const EdgeInsets.all(20.0), 21 | child: Column( 22 | crossAxisAlignment: CrossAxisAlignment.start, 23 | children: [ 24 | Container( 25 | padding: EdgeInsets.symmetric(vertical: 3.0, horizontal: 8.0), 26 | margin: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 20.0), 27 | decoration: BoxDecoration( 28 | gradient: new LinearGradient( 29 | begin: Alignment.centerLeft, 30 | end: Alignment.centerRight, 31 | colors: [ 32 | Colors.teal.shade300, 33 | Colors.teal, 34 | ], 35 | ), 36 | ), 37 | child: Text( 38 | story.category.toUpperCase(), 39 | style: TextStyle( 40 | color: Colors.white, 41 | fontSize: 9.0, 42 | // fontWeight: FontWeight.bold, 43 | ), 44 | ), 45 | ), 46 | 47 | Container( 48 | height: 50.0, 49 | child: Text( 50 | story.title, 51 | maxLines: 2, 52 | style: TextStyle( 53 | color: AppColors.boldText, 54 | fontSize: 18.0, 55 | fontWeight: FontWeight.w600, 56 | ), 57 | ), 58 | ), 59 | 60 | Container( 61 | margin: EdgeInsets.symmetric(vertical: 10.0), 62 | child: Text( 63 | story.excerpt, 64 | textAlign: TextAlign.left, 65 | maxLines: 5, 66 | style: TextStyle( 67 | fontSize: 12.0, 68 | color: AppColors.bodyText, 69 | ), 70 | ), 71 | ), 72 | 73 | Expanded( 74 | child: Container( 75 | decoration: BoxDecoration( 76 | borderRadius: BorderRadius.all(Radius.circular(6.0)), 77 | image: DecorationImage( 78 | fit: BoxFit.cover, 79 | image: AssetImage(story.image), 80 | ), 81 | ), 82 | margin: EdgeInsets.symmetric(vertical: 10.0), 83 | ), 84 | ), 85 | Divider( 86 | height: 20.0, 87 | color: AppColors.lightGrey, 88 | ), 89 | Row( 90 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 91 | children: [ 92 | RichText( 93 | text: TextSpan( 94 | text: "${story.places} ", 95 | style: TextStyle( 96 | color: Colors.black, 97 | fontWeight: FontWeight.bold, 98 | fontSize: 10.0), 99 | children: [ 100 | TextSpan( 101 | text: ' PLACES', 102 | style: TextStyle( 103 | color: AppColors.bodyText, 104 | fontWeight: FontWeight.normal, 105 | ), 106 | ), 107 | ], 108 | ), 109 | ), 110 | Row( 111 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 112 | children: [ 113 | Icon( 114 | Icons.favorite_border, 115 | size: 14.0, 116 | color: AppColors.lightGrey, 117 | ), 118 | Padding( 119 | padding: EdgeInsets.only(right: 10.0), 120 | ), 121 | Icon( 122 | Icons.share, 123 | size: 14.0, 124 | color: AppColors.lightGrey, 125 | ), 126 | ], 127 | ), 128 | ], 129 | ), 130 | ], 131 | ), 132 | ), 133 | ), 134 | ); 135 | } 136 | } 137 | 138 | -------------------------------------------------------------------------------- /01_city_guides/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: challenges 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | 19 | # The following adds the Cupertino Icons font to your application. 20 | # Use with the CupertinoIcons class for iOS style icons. 21 | cupertino_icons: ^0.1.2 22 | flutter_villains: "^1.0.0" 23 | 24 | dev_dependencies: 25 | flutter_test: 26 | sdk: flutter 27 | 28 | 29 | # For information on the generic Dart part of this file, see the 30 | # following page: https://www.dartlang.org/tools/pub/pubspec 31 | 32 | # The following section is specific to Flutter. 33 | flutter: 34 | 35 | # The following line ensures that the Material Icons font is 36 | # included with your application, so that you can use the icons in 37 | # the material Icons class. 38 | uses-material-design: true 39 | 40 | # To add assets to your application, add an assets section, like this: 41 | assets: 42 | - assets/icons/compass.png 43 | - assets/icons/user.png 44 | - assets/icons/location.png 45 | - assets/icons/controls.png 46 | - assets/icons/sun.png 47 | 48 | - assets/imgs/location1.jpg 49 | - assets/imgs/location2.jpg 50 | - assets/imgs/location3.jpg 51 | - assets/imgs/location4.jpg 52 | 53 | - assets/imgs/story1.jpg 54 | - assets/imgs/story2.jpg 55 | - assets/imgs/story3.jpg 56 | - assets/imgs/story4.jpg 57 | - assets/imgs/story5.jpg 58 | 59 | 60 | # An image asset can refer to one or more resolution-specific "variants", see 61 | # https://flutter.io/assets-and-images/#resolution-aware. 62 | 63 | # For details regarding adding assets from package dependencies, see 64 | # https://flutter.io/assets-and-images/#from-packages 65 | 66 | # To add custom fonts to your application, add a fonts section here, 67 | # in this "flutter" section. Each entry in this list should have a 68 | # "family" key with the font family name, and a "fonts" key with a 69 | # list giving the asset and other descriptors for the font. For 70 | # example: 71 | # fonts: 72 | # - family: Schyler 73 | # fonts: 74 | # - asset: fonts/Schyler-Regular.ttf 75 | # - asset: fonts/Schyler-Italic.ttf 76 | # style: italic 77 | # - family: Trajan Pro 78 | # fonts: 79 | # - asset: fonts/TrajanPro.ttf 80 | # - asset: fonts/TrajanPro_Bold.ttf 81 | # weight: 700 82 | # 83 | # For details regarding fonts from package dependencies, 84 | # see https://flutter.io/custom-fonts/#from-packages 85 | -------------------------------------------------------------------------------- /01_city_guides/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:challenges/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 MyApp()); 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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | build/ 8 | 9 | .flutter-plugins 10 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.idea/libraries/Flutter_for_Android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.idea/workspace.xml: -------------------------------------------------------------------------------- 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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.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: eab5cd9853c13ec2207977d9b9ef7b6750fe0817 8 | channel: unknown 9 | -------------------------------------------------------------------------------- /02_ramen_restaurant/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Flutter", 9 | "request": "launch", 10 | "type": "dart" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /02_ramen_restaurant/README.md: -------------------------------------------------------------------------------- 1 | # ramen_restaurant 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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.ramenrestaurant" 37 | minSdkVersion 16 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/java/com/example/ramenrestaurant/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.ramenrestaurant; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /02_ramen_restaurant/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.1.2' 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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /02_ramen_restaurant/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /02_ramen_restaurant/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.4-all.zip 7 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/assets/images/beans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/assets/images/beans.png -------------------------------------------------------------------------------- /02_ramen_restaurant/assets/images/ewedu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/assets/images/ewedu.png -------------------------------------------------------------------------------- /02_ramen_restaurant/assets/images/indomie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/assets/images/indomie.png -------------------------------------------------------------------------------- /02_ramen_restaurant/assets/images/jollof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/assets/images/jollof.png -------------------------------------------------------------------------------- /02_ramen_restaurant/assets/images/white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/assets/images/white.png -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/app.flx 37 | /Flutter/app.zip 38 | /Flutter/flutter_assets/ 39 | /Flutter/App.framework 40 | /Flutter/Flutter.framework 41 | /Flutter/Generated.xcconfig 42 | /ServiceDefinitions.json 43 | 44 | Pods/ 45 | .symlinks/ 46 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/02_ramen_restaurant/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /02_ramen_restaurant/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. -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | ramen_restaurant 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'src/app.dart'; 3 | 4 | void main () { 5 | runApp(App()); 6 | } -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ramen_restaurant/src/blocs/app_bloc.dart'; 3 | import 'package:ramen_restaurant/src/screens/home_screen.dart'; 4 | 5 | class App extends StatelessWidget { 6 | @override 7 | Widget build(BuildContext context) { 8 | return MaterialApp( 9 | debugShowCheckedModeBanner: false, 10 | theme: ThemeData( 11 | textTheme: TextTheme(), 12 | buttonTheme: ButtonThemeData(), 13 | iconTheme: IconThemeData(color: Colors.black), 14 | primaryColor: Colors.grey, 15 | ), 16 | home: AppProvider( 17 | child: HomeScreen(), 18 | ), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/blocs/app_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:math'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:ramen_restaurant/src/data/constants.dart'; 5 | 6 | class AppBloc { 7 | int _total = 0; 8 | final List colors = BGColors.getAll(); 9 | int _bgColorIndex = 0; 10 | 11 | //streams 12 | StreamController _itemsInCart = StreamController.broadcast(); 13 | StreamController _currentpage = StreamController.broadcast(); 14 | StreamController _bgColor = StreamController.broadcast(); 15 | 16 | //getters 17 | Stream get itemsInCart => _itemsInCart.stream; 18 | Stream get currentpage => _currentpage.stream; 19 | Stream get bgColor => _bgColor.stream; 20 | int get total => _total; 21 | //setters 22 | Function(int) get addItemsToCart => _itemsInCart.sink.add; 23 | Function(int) get setCurrentPage => _currentpage.sink.add; 24 | 25 | AppBloc() { 26 | _itemsInCart.stream.listen((onData) { 27 | _total += onData; 28 | }); 29 | 30 | _currentpage.stream.listen((_) { 31 | //get random Number 32 | int _randomNumber = Random().nextInt(colors.length); 33 | while (_randomNumber == _bgColorIndex) { 34 | _randomNumber = Random().nextInt(colors.length); 35 | } 36 | _bgColor.sink.add(colors[_randomNumber]); 37 | _bgColorIndex = _randomNumber; 38 | }); 39 | } 40 | 41 | dispose() { 42 | _itemsInCart.close(); 43 | _currentpage.close(); 44 | _bgColor.close(); 45 | } 46 | } 47 | 48 | class AppProvider extends InheritedWidget { 49 | updateShouldNotify(_) => true; 50 | AppProvider({Key key, Widget child}) : super(key: key, child: child); 51 | 52 | final bloc = AppBloc(); 53 | 54 | static AppBloc of(context) { 55 | return (context.inheritFromWidgetOfExactType(AppProvider) as AppProvider) 56 | .bloc; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/data/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/painting.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class AppColors { 5 | static const Color darkGrey = const Color(0xFFdedede); 6 | static const Color lightGrey = const Color(0xFFd1d1d1); 7 | static const Color accent = const Color(0xFFeebd07); 8 | } 9 | 10 | class BGColors { 11 | static List getAll() { 12 | return [ 13 | const Color(0xFFf2e8da), 14 | const Color(0xFFefefe7), 15 | const Color(0xFFd2da75), 16 | const Color(0xFFf7f7f7), 17 | ]; 18 | } 19 | } 20 | 21 | class Images { 22 | static const jollof = "assets/images/jollof.png"; 23 | static const white = "assets/images/white.png"; 24 | static const beans = "assets/images/beans.png"; 25 | static const indomie = "assets/images/indomie.png"; 26 | static const amala = "assets/images/ewedu.png"; 27 | } 28 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/models/food.dart: -------------------------------------------------------------------------------- 1 | import 'package:ramen_restaurant/src/data/constants.dart'; 2 | 3 | class Food { 4 | final int price; 5 | final String name; 6 | final String image; 7 | 8 | const Food({this.image, this.name, this.price}); 9 | 10 | static List getAllFoods() { 11 | return [ 12 | Food( 13 | name: "White Rice and Dodo", 14 | image: Images.white, 15 | price: 1500, 16 | ), 17 | Food( 18 | name: "Jollof Rice", 19 | image: Images.jollof, 20 | price: 2000, 21 | ), 22 | Food( 23 | name: "Beans and Dodo", 24 | image: Images.beans, 25 | price: 1500, 26 | ), 27 | Food( 28 | name: "Indomie Noodles", 29 | image: Images.indomie, 30 | price: 2500, 31 | ), 32 | Food( 33 | name: "Amala and Ewedu", 34 | image: Images.amala, 35 | price: 3500, 36 | ), 37 | ]; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/widgets/add_to_cart_animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ramen_restaurant/src/data/constants.dart'; 3 | 4 | class AddToCartAnimation extends StatelessWidget { 5 | final Animation _opacity; 6 | final Animation _sizeAnimation; 7 | final Animation _offset; 8 | final AnimationController _animationController; 9 | 10 | AddToCartAnimation({ 11 | Key key, 12 | @required AnimationController animationController, 13 | @required Offset begin, 14 | @required Offset end, 15 | }) : _animationController = animationController, 16 | _offset = Tween( 17 | begin: begin, 18 | end: end, 19 | ).animate( 20 | CurvedAnimation( 21 | parent: animationController, 22 | curve: Interval( 23 | 0.0, 24 | 1.0, 25 | ), 26 | ), 27 | ), 28 | _opacity = Tween(begin: 0.0, end: 1.0).animate( 29 | CurvedAnimation( 30 | parent: animationController, 31 | curve: Interval( 32 | 0.0, 33 | 0.05, 34 | ), 35 | ), 36 | ), 37 | _sizeAnimation = Tween( 38 | begin: 60.0, 39 | end: 18.0, 40 | ).animate( 41 | CurvedAnimation( 42 | parent: animationController, 43 | curve: Interval( 44 | 0.0, 45 | 1.0, 46 | ), 47 | ), 48 | ), 49 | super(key: key); 50 | 51 | @override 52 | Widget build(BuildContext context) { 53 | return AnimatedBuilder( 54 | animation: _animationController, 55 | builder: (BuildContext ctx, Widget child) { 56 | return Transform.translate( 57 | child: Opacity( 58 | opacity: _opacity.value, 59 | child: IgnorePointer( 60 | child: Container( 61 | height: _sizeAnimation.value, 62 | width: _sizeAnimation.value, 63 | decoration: BoxDecoration( 64 | shape: BoxShape.circle, 65 | color: AppColors.accent, 66 | ), 67 | ), 68 | ), 69 | ), 70 | offset: _offset.value, 71 | ); 72 | }, 73 | ); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /02_ramen_restaurant/lib/src/widgets/bounce_in_animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BounceInAnimation extends StatefulWidget { 4 | final Widget _child; 5 | final bool _replayable; 6 | final Duration _duration; 7 | BounceInAnimation( 8 | {Key key, 9 | @required Widget child, 10 | bool replayable = false, 11 | Duration duration}) 12 | : _child = child, 13 | _replayable = replayable, 14 | _duration = duration, 15 | super(key: key); 16 | @override 17 | BounceInAnimationState createState() { 18 | return BounceInAnimationState(); 19 | } 20 | } 21 | 22 | class BounceInAnimationState extends State 23 | with SingleTickerProviderStateMixin { 24 | AnimationController controller; 25 | Animation scale; 26 | 27 | @override 28 | void initState() { 29 | controller = AnimationController( 30 | vsync: this, 31 | duration: widget._duration ?? Duration(milliseconds: 800), 32 | ); 33 | 34 | scale = Tween(begin: 0.8, end: 1.0).animate( 35 | CurvedAnimation( 36 | parent: controller, 37 | curve: ElasticOutCurve(0.2), 38 | ), 39 | ); 40 | super.initState(); 41 | } 42 | 43 | @override 44 | void dispose() { 45 | controller.dispose(); 46 | super.dispose(); 47 | } 48 | 49 | @override 50 | Widget build(BuildContext context) { 51 | if (controller.status == AnimationStatus.completed) { 52 | if (widget._replayable) { 53 | controller.reset(); 54 | controller.forward(); 55 | } 56 | } else { 57 | controller.forward(); 58 | } 59 | 60 | return AnimatedBuilder( 61 | animation: scale, 62 | builder: (BuildContext context, Widget child) { 63 | return Transform.scale( 64 | scale: scale.value, 65 | child: widget._child, 66 | ); 67 | }, 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /02_ramen_restaurant/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: ramen_restaurant 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | 19 | # The following adds the Cupertino Icons font to your application. 20 | # Use with the CupertinoIcons class for iOS style icons. 21 | cupertino_icons: ^0.1.2 22 | rxdart: ^0.16.7 23 | 24 | 25 | dev_dependencies: 26 | flutter_test: 27 | sdk: flutter 28 | 29 | 30 | # For information on the generic Dart part of this file, see the 31 | # following page: https://www.dartlang.org/tools/pub/pubspec 32 | 33 | # The following section is specific to Flutter. 34 | flutter: 35 | 36 | # The following line ensures that the Material Icons font is 37 | # included with your application, so that you can use the icons in 38 | # the material Icons class. 39 | uses-material-design: true 40 | 41 | # To add assets to your application, add an assets section, like this: 42 | assets: 43 | - assets/images/jollof.png 44 | - assets/images/white.png 45 | - assets/images/beans.png 46 | - assets/images/ewedu.png 47 | - assets/images/indomie.png 48 | 49 | # An image asset can refer to one or more resolution-specific "variants", see 50 | # https://flutter.io/assets-and-images/#resolution-aware. 51 | 52 | # For details regarding adding assets from package dependencies, see 53 | # https://flutter.io/assets-and-images/#from-packages 54 | 55 | # To add custom fonts to your application, add a fonts section here, 56 | # in this "flutter" section. Each entry in this list should have a 57 | # "family" key with the font family name, and a "fonts" key with a 58 | # list giving the asset and other descriptors for the font. For 59 | # example: 60 | # fonts: 61 | # - family: Schyler 62 | # fonts: 63 | # - asset: fonts/Schyler-Regular.ttf 64 | # - asset: fonts/Schyler-Italic.ttf 65 | # style: italic 66 | # - family: Trajan Pro 67 | # fonts: 68 | # - asset: fonts/TrajanPro.ttf 69 | # - asset: fonts/TrajanPro_Bold.ttf 70 | # weight: 700 71 | # 72 | # For details regarding fonts from package dependencies, 73 | # see https://flutter.io/custom-fonts/#from-packages 74 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ramen_restaurant.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /02_ramen_restaurant/ramen_restaurant_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /02_ramen_restaurant/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:ramen_restaurant/src/app.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 App()); 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 | -------------------------------------------------------------------------------- /03_task_manager/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | 4 | .packages 5 | .pub/ 6 | 7 | build/ 8 | 9 | .flutter-plugins 10 | -------------------------------------------------------------------------------- /03_task_manager/.idea/libraries/Dart_SDK.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /03_task_manager/.idea/libraries/Flutter_for_Android.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /03_task_manager/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /03_task_manager/.idea/runConfigurations/main_dart.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /03_task_manager/.idea/workspace.xml: -------------------------------------------------------------------------------- 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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /03_task_manager/.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: eab5cd9853c13ec2207977d9b9ef7b6750fe0817 8 | channel: unknown 9 | -------------------------------------------------------------------------------- /03_task_manager/README.md: -------------------------------------------------------------------------------- 1 | # tasks_manager 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 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 27 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.example.tasksmanager" 37 | minSdkVersion 16 38 | targetSdkVersion 27 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 10 | 15 | 19 | 26 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/java/com/example/tasksmanager/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.tasksmanager; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /03_task_manager/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /03_task_manager/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.1.2' 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 | -------------------------------------------------------------------------------- /03_task_manager/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /03_task_manager/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /03_task_manager/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.4-all.zip 7 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/assets/graphics/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/assets/graphics/logo.png -------------------------------------------------------------------------------- /03_task_manager/assets/icons/burger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/assets/icons/burger.png -------------------------------------------------------------------------------- /03_task_manager/assets/icons/calender.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/assets/icons/calender.png -------------------------------------------------------------------------------- /03_task_manager/assets/icons/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/assets/icons/home.png -------------------------------------------------------------------------------- /03_task_manager/design/logo.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/design/logo.ai -------------------------------------------------------------------------------- /03_task_manager/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 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/app.flx 37 | /Flutter/app.zip 38 | /Flutter/flutter_assets/ 39 | /Flutter/App.framework 40 | /Flutter/Flutter.framework 41 | /Flutter/Generated.xcconfig 42 | /ServiceDefinitions.json 43 | 44 | Pods/ 45 | .symlinks/ 46 | -------------------------------------------------------------------------------- /03_task_manager/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /03_task_manager/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /03_task_manager/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/03_task_manager/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /03_task_manager/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. -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/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 | tasks_manager 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /03_task_manager/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 | -------------------------------------------------------------------------------- /03_task_manager/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:tasks_manager/src/app.dart'; 3 | 4 | void main() { 5 | runApp(App()); 6 | } 7 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:tasks_manager/src/screens/home_screen.dart'; 3 | import 'package:tasks_manager/src/utils/screen_util.dart'; 4 | 5 | class App extends StatelessWidget { 6 | Widget build(BuildContext context) { 7 | 8 | return MaterialApp( 9 | debugShowCheckedModeBanner: false, 10 | theme: ThemeData(), 11 | home: HomeScreen(), 12 | ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/data/constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/painting.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class AppColors { 5 | static const Color purple = const Color(0xFF3B2995); 6 | static const Color red = const Color(0xFFde3434); 7 | static const Color brown = const Color(0xFFc7a682); 8 | static const Color lightGrey = const Color(0xFFa6a6a6); 9 | static const Color black = const Color(0xFF343434); 10 | } 11 | 12 | class BGColors { 13 | static List getAll() { 14 | return [ 15 | const Color(0xFFf2e8da), 16 | const Color(0xFFefefe7), 17 | const Color(0xFFd2da75), 18 | const Color(0xFFf7f7f7), 19 | ]; 20 | } 21 | } 22 | 23 | class AppImages { 24 | static const logo = "assets/graphics/logo.png"; 25 | } 26 | class AppIcons { 27 | static const home = "assets/icons/home.png"; 28 | static const calender = "assets/icons/calender.png"; 29 | static const burger = "assets/icons/burger.png"; 30 | } 31 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/screens/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:tasks_manager/src/data/constants.dart'; 4 | import 'package:tasks_manager/src/screens/tabs/burger_tab.dart'; 5 | import 'package:tasks_manager/src/screens/tabs/calendar_tab.dart'; 6 | import 'package:tasks_manager/src/screens/tabs/tasks_tab.dart'; 7 | import 'package:tasks_manager/src/utils/screen_util.dart'; 8 | import 'package:tasks_manager/src/widgets/tm_bottom_appbar.dart'; 9 | 10 | class HomeScreen extends StatefulWidget { 11 | @override 12 | State createState() { 13 | return HomeScreenState(); 14 | } 15 | } 16 | 17 | class HomeScreenState extends State { 18 | Widget _currentScreen; 19 | 20 | final _tabs = [ 21 | TasksTab(), 22 | CalendarTab(), 23 | BurgerTab(), 24 | ]; 25 | 26 | @override 27 | void initState() { 28 | _currentScreen = _tabs[0]; 29 | super.initState(); 30 | } 31 | 32 | @override 33 | void didChangeDependencies() { 34 | ScreenUtil.instance = ScreenUtil(width: 375, height: 812)..init(context); 35 | super.didChangeDependencies(); 36 | } 37 | 38 | final List items = [ 39 | AppIcons.home, 40 | AppIcons.calender, 41 | AppIcons.burger, 42 | ]; 43 | 44 | @override 45 | Widget build(BuildContext context) { 46 | 47 | return Scaffold( 48 | bottomNavigationBar: TMBottomAppBar( 49 | onIndexChanged: (int index) { 50 | setState(() { 51 | _currentScreen = _tabs[index]; 52 | }); 53 | }, 54 | items: items, 55 | ), 56 | body: _currentScreen, 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/screens/tabs/burger_tab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BurgerTab extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | // TODO: implement build 7 | return Center(child: Text("Burger Tab")); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/screens/tabs/calendar_tab.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CalendarTab extends StatelessWidget { 4 | @override 5 | Widget build(BuildContext context) { 6 | // TODO: implement build 7 | return Center( 8 | child: Text("Calendar Tab"), 9 | ); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /03_task_manager/lib/src/utils/screen_util.dart: -------------------------------------------------------------------------------- 1 | 2 | //stolen from https://github.com/OpenFlutter/flutter_screenutil/blob/master/lib/flutter_screenutil.dart 3 | // 4 | 5 | import 'package:flutter/material.dart'; 6 | 7 | class ScreenUtil { 8 | static ScreenUtil instance = new ScreenUtil(); 9 | 10 | int width; 11 | int height; 12 | bool allowFontScaling; 13 | 14 | static MediaQueryData _mediaQueryData; 15 | static double _screenWidth; 16 | static double _screenHeight; 17 | static double _pixelRatio; 18 | static double _statusBarHeight; 19 | 20 | static double _bottomBarHeight; 21 | 22 | static double _textScaleFactor; 23 | 24 | ScreenUtil({ 25 | this.width = 1080, 26 | this.height = 1920, 27 | this.allowFontScaling = false, 28 | }); 29 | 30 | static ScreenUtil getInstance() { 31 | return instance; 32 | } 33 | 34 | void init(BuildContext context) { 35 | MediaQueryData mediaQuery = MediaQuery.of(context); 36 | _mediaQueryData = mediaQuery; 37 | _pixelRatio = mediaQuery.devicePixelRatio; 38 | _screenWidth = mediaQuery.size.width; 39 | _screenHeight = mediaQuery.size.height; 40 | _statusBarHeight = mediaQuery.padding.top; 41 | _bottomBarHeight = _mediaQueryData.padding.bottom; 42 | _textScaleFactor = mediaQuery.textScaleFactor; 43 | } 44 | 45 | static MediaQueryData get mediaQueryData => _mediaQueryData; 46 | 47 | static double get textScaleFactory => _textScaleFactor; 48 | 49 | static double get pixelRatio => _pixelRatio; 50 | 51 | static double get screenWidthDp => _screenWidth; 52 | 53 | static double get screenHeightDp => _screenHeight; 54 | 55 | static double get screenWidth => _screenWidth * _pixelRatio; 56 | 57 | static double get screenHeight => _screenHeight * _pixelRatio; 58 | 59 | static double get statusBarHeight => _statusBarHeight * _pixelRatio; 60 | 61 | static double get bottomBarHeight => _bottomBarHeight * _pixelRatio; 62 | 63 | get scaleWidth => _screenWidth / instance.width; 64 | 65 | get scaleHeight => _screenHeight / instance.height; 66 | 67 | setWidth(int width) => width * scaleWidth; 68 | setHeight(int height) => height * scaleHeight; 69 | 70 | setSp(int fontSize) => allowFontScaling 71 | ? setWidth(fontSize) 72 | : setWidth(fontSize) / _textScaleFactor; 73 | } -------------------------------------------------------------------------------- /03_task_manager/lib/src/widgets/tm_bottom_appbar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:tasks_manager/src/data/constants.dart'; 4 | import 'package:tasks_manager/src/utils/screen_util.dart'; 5 | 6 | class TMBottomAppBar extends StatefulWidget { 7 | final List items; 8 | final Function(int) onIndexChanged; 9 | const TMBottomAppBar({ 10 | Key key, 11 | @required this.items, 12 | @required this.onIndexChanged, 13 | }) : super(key: key); 14 | 15 | @override 16 | TMBottomAppBarState createState() { 17 | return new TMBottomAppBarState(); 18 | } 19 | } 20 | 21 | class TMBottomAppBarState extends State { 22 | int currentIndex; 23 | 24 | @override 25 | void initState() { 26 | currentIndex = 0; 27 | super.initState(); 28 | } 29 | 30 | @override 31 | Widget build(BuildContext context) { 32 | return LayoutBuilder( 33 | builder: (BuildContext context, BoxConstraints constraints) { 34 | return BottomAppBar( 35 | elevation: 0.0, 36 | color: Colors.white, 37 | child: Builder( 38 | builder: (BuildContext context) { 39 | return Container( 40 | foregroundDecoration: BoxDecoration( 41 | backgroundBlendMode: BlendMode.screen, 42 | gradient: new LinearGradient( 43 | begin: Alignment(0.0, -0.6), 44 | end: Alignment(0.00, 1.0), 45 | colors: [ 46 | Colors.transparent, 47 | Colors.white.withOpacity(0.3), 48 | Colors.white, 49 | Colors.white, 50 | ], 51 | ), 52 | ), 53 | decoration: BoxDecoration( 54 | border: Border( 55 | top: BorderSide( 56 | width: ScreenUtil().setSp(1) / 2, 57 | color: AppColors.lightGrey, 58 | ), 59 | ), 60 | ), 61 | height: constraints.maxHeight < 650 62 | ? ScreenUtil().setSp(60) 63 | : ScreenUtil().setSp(80), 64 | 65 | child: Row( 66 | children: _buildItems(widget.items), 67 | ), 68 | ); 69 | }, 70 | ), 71 | ); 72 | }, 73 | ); 74 | } 75 | 76 | List _buildItems(List items) { 77 | List _ = []; 78 | 79 | items.asMap().forEach((int index, String item) { 80 | _.add(TMButtomAppBarItem( 81 | assetIcon: item, 82 | isActive: index == currentIndex, 83 | onPressed: () { 84 | widget.onIndexChanged(index); 85 | setState(() { 86 | currentIndex = index; 87 | }); 88 | }, 89 | )); 90 | }); 91 | 92 | return _; 93 | } 94 | } 95 | 96 | class TMButtomAppBarItem extends StatelessWidget { 97 | final VoidCallback onPressed; 98 | final String assetIcon; 99 | final bool isActive; 100 | const TMButtomAppBarItem({ 101 | Key key, 102 | @required this.assetIcon, 103 | @required this.onPressed, 104 | this.isActive = false, 105 | }) : super(key: key); 106 | 107 | @override 108 | Widget build(BuildContext context) { 109 | return Expanded( 110 | child: CupertinoButton( 111 | padding: EdgeInsets.all(0.0), 112 | onPressed: onPressed, 113 | child: Container( 114 | decoration: BoxDecoration( 115 | color: 116 | isActive ? AppColors.lightGrey.withOpacity(0.15) : Colors.white, 117 | border: Border( 118 | right: BorderSide( 119 | width: ScreenUtil().setSp(1) / 2, 120 | color: AppColors.lightGrey, 121 | ), 122 | ), 123 | ), 124 | alignment: Alignment.center, 125 | child: Image.asset( 126 | assetIcon, 127 | height: ScreenUtil().setSp(15), 128 | width: ScreenUtil().setSp(15), 129 | color: AppColors.black, 130 | ), 131 | ), 132 | ), 133 | ); 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /03_task_manager/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://www.dartlang.org/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.0.8" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.0.4" 18 | charcode: 19 | dependency: transitive 20 | description: 21 | name: charcode 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.2" 25 | collection: 26 | dependency: transitive 27 | description: 28 | name: collection 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.14.11" 32 | cupertino_icons: 33 | dependency: "direct main" 34 | description: 35 | name: cupertino_icons 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "0.1.2" 39 | flutter: 40 | dependency: "direct main" 41 | description: flutter 42 | source: sdk 43 | version: "0.0.0" 44 | flutter_test: 45 | dependency: "direct dev" 46 | description: flutter 47 | source: sdk 48 | version: "0.0.0" 49 | matcher: 50 | dependency: transitive 51 | description: 52 | name: matcher 53 | url: "https://pub.dartlang.org" 54 | source: hosted 55 | version: "0.12.3+1" 56 | meta: 57 | dependency: transitive 58 | description: 59 | name: meta 60 | url: "https://pub.dartlang.org" 61 | source: hosted 62 | version: "1.1.6" 63 | path: 64 | dependency: transitive 65 | description: 66 | name: path 67 | url: "https://pub.dartlang.org" 68 | source: hosted 69 | version: "1.6.2" 70 | quiver: 71 | dependency: transitive 72 | description: 73 | name: quiver 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "2.0.1" 77 | sky_engine: 78 | dependency: transitive 79 | description: flutter 80 | source: sdk 81 | version: "0.0.99" 82 | source_span: 83 | dependency: transitive 84 | description: 85 | name: source_span 86 | url: "https://pub.dartlang.org" 87 | source: hosted 88 | version: "1.4.1" 89 | stack_trace: 90 | dependency: transitive 91 | description: 92 | name: stack_trace 93 | url: "https://pub.dartlang.org" 94 | source: hosted 95 | version: "1.9.3" 96 | stream_channel: 97 | dependency: transitive 98 | description: 99 | name: stream_channel 100 | url: "https://pub.dartlang.org" 101 | source: hosted 102 | version: "1.6.8" 103 | string_scanner: 104 | dependency: transitive 105 | description: 106 | name: string_scanner 107 | url: "https://pub.dartlang.org" 108 | source: hosted 109 | version: "1.0.4" 110 | term_glyph: 111 | dependency: transitive 112 | description: 113 | name: term_glyph 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "1.0.1" 117 | test_api: 118 | dependency: transitive 119 | description: 120 | name: test_api 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "0.2.1" 124 | transformer_page_view: 125 | dependency: "direct main" 126 | description: 127 | name: transformer_page_view 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "0.1.4" 131 | typed_data: 132 | dependency: transitive 133 | description: 134 | name: typed_data 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "1.1.6" 138 | vector_math: 139 | dependency: transitive 140 | description: 141 | name: vector_math 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "2.0.8" 145 | sdks: 146 | dart: ">=2.0.0 <3.0.0" 147 | -------------------------------------------------------------------------------- /03_task_manager/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: tasks_manager 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # Read more about versioning at semver.org. 10 | version: 1.0.0+1 11 | 12 | environment: 13 | sdk: ">=2.0.0-dev.68.0 <3.0.0" 14 | 15 | dependencies: 16 | flutter: 17 | sdk: flutter 18 | 19 | 20 | # The following adds the Cupertino Icons font to your application. 21 | # Use with the CupertinoIcons class for iOS style icons. 22 | cupertino_icons: ^0.1.2 23 | transformer_page_view: ^0.1.4 24 | 25 | 26 | 27 | dev_dependencies: 28 | flutter_test: 29 | sdk: flutter 30 | 31 | 32 | # For information on the generic Dart part of this file, see the 33 | # following page: https://www.dartlang.org/tools/pub/pubspec 34 | 35 | # The following section is specific to Flutter. 36 | flutter: 37 | 38 | # The following line ensures that the Material Icons font is 39 | # included with your application, so that you can use the icons in 40 | # the material Icons class. 41 | uses-material-design: true 42 | 43 | # To add assets to your application, add an assets section, like this: 44 | assets: 45 | - assets/graphics/ 46 | - assets/icons/ 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 | -------------------------------------------------------------------------------- /03_task_manager/tasks_manager.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /03_task_manager/tasks_manager_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /03_task_manager/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:tasks_manager/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 Ap()); 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Flutter Challenges 2 | 3 | A list of Mobile UI Challenges I attempt to build using the amazing [flutter](https://flutter.io/) 4 | 5 | ###Challenge 01 6 | 7 | ### [City Guides](https://github.com/shamnex/flutter_challenges/tree/master/01_city_guides) (100% Done) 8 | Design made by **Jae-seong,** 9 | 10 | [](https://dribbble.com/shots/3861169-iPhone-X-City-Guides-Concept) 11 | 12 | ###Challenge 02 13 | 14 | ### [restaurant app](https://github.com/shamnex/flutter_challenges/tree/master/02_ramen_restaurant) (100% Done) 15 | Designed by **Nina Maffey** 16 | 17 | [](https://www.uplabs.com/posts/today-s-special-ramen-restaurant-app) 18 | 19 | ##Challenge 03 20 | 21 | ### [Tasks Manager](https://github.com/shamnex/flutter_challenges/tree/master/03_task_manager) (30% Done) 22 | Designed by **Cuberto** 23 | 24 | [](https://dribbble.com/shots/4890285-Task-Manager-Animated) 25 | -------------------------------------------------------------------------------- /gifs/iphonex_travel_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/gifs/iphonex_travel_demo.gif -------------------------------------------------------------------------------- /gifs/restaurant.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/gifs/restaurant.gif -------------------------------------------------------------------------------- /gifs/tasks.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shamnex/flutter_challenges/d6b3e6af411c4534f956edfd8c3722c706f10fcb/gifs/tasks.gif --------------------------------------------------------------------------------