├── .gitignore ├── .metadata ├── LICENSE.md ├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── ic_launcher-playstore.png │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── contra │ │ │ │ └── flutter │ │ │ │ └── kit │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.xml │ │ │ └── launch_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── fonts │ ├── Montserrat-Bold.ttf │ ├── Montserrat-ExtraBold.ttf │ └── Montserrat-Medium.ttf ├── icons │ ├── arrow_back.svg │ ├── arrow_back_white.svg │ ├── arrow_forward.svg │ ├── arrow_next.svg │ ├── close.svg │ ├── facebook.svg │ ├── ic_add.svg │ ├── ic_avatar.svg │ ├── ic_avatar_2.svg │ ├── ic_avatar_3.svg │ ├── ic_bell.svg │ ├── ic_circle.svg │ ├── ic_circle_not_selected.svg │ ├── ic_cloud_lightning.svg │ ├── ic_cloud_rain.svg │ ├── ic_facebook.svg │ ├── ic_heart_fill.svg │ ├── ic_instagram.svg │ ├── ic_navigation.svg │ ├── ic_navigation_white.svg │ ├── ic_search.svg │ ├── ic_star.svg │ ├── ic_sun.svg │ ├── ic_twitter.svg │ ├── lock.svg │ ├── logo_mark.svg │ ├── logo_visa.svg │ ├── mail.svg │ ├── placeholder_icon.svg │ ├── twitter.svg │ └── user.svg └── images │ ├── onboarding_image_five.svg │ ├── onboarding_image_four.svg │ ├── onboarding_image_one.svg │ ├── onboarding_image_three.svg │ ├── onboarding_image_two.svg │ ├── peep_avatar.png │ ├── peep_avatar.svg │ ├── peep_lady_left.svg │ ├── peep_lady_one.svg │ ├── peep_lady_right.svg │ ├── peep_lady_two.svg │ ├── peep_man_one.svg │ ├── peep_man_right.svg │ ├── peep_man_three.svg │ ├── peep_standing_center.svg │ ├── peep_standing_left.svg │ ├── peep_standing_left_two.svg │ ├── peep_standing_right.svg │ ├── peep_standing_right_two.svg │ ├── peep_verify.svg │ └── shopping │ ├── coat_fur.svg │ ├── peep_both.svg │ ├── peep_glass.svg │ ├── peep_lady.svg │ ├── product_image_1.svg │ ├── product_image_2.svg │ ├── product_image_3.svg │ ├── product_image_4.svg │ ├── shirt_and_coat.svg │ ├── striped_tee.svg │ └── thunder_tshirt.svg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── Podfile.lock ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ └── contents.xcworkspacedata └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── alarm │ ├── add_alarm_page.dart │ ├── alarm.dart │ ├── alarm_label.dart │ ├── alarm_label_widget.dart │ ├── alarm_list_item.dart │ ├── alarm_list_page.dart │ ├── alarm_main_page.dart │ ├── bottom_sheet_input.dart │ ├── circular_list_item.dart │ ├── circular_list_position.dart │ ├── circular_list_view.dart │ ├── clock.dart │ ├── clock_list_item.dart │ ├── clock_list_page.dart │ ├── weather.dart │ ├── weather_detail_page.dart │ ├── weather_list_item.dart │ ├── weather_list_page.dart │ └── weather_widget.dart ├── blog │ ├── blog.dart │ ├── blog_card_type_one.dart │ ├── blog_card_type_three.dart │ ├── blog_card_type_two.dart │ ├── blog_detail_page.dart │ ├── blog_home_page.dart │ ├── blog_list_item.dart │ ├── blog_list_page_four.dart │ ├── blog_list_page_one.dart │ ├── blog_list_page_three.dart │ ├── blog_list_page_two.dart │ ├── blog_main_page.dart │ ├── blog_staggered_grid_page.dart │ └── blog_staggered_item.dart ├── chart │ ├── bar_chart.dart │ ├── charts_main_page.dart │ ├── charts_page.dart │ ├── expense.dart │ ├── expenses_list_item.dart │ └── line_chart.dart ├── chat │ ├── chat.dart │ ├── chat_home_page.dart │ ├── chat_list_item.dart │ ├── chat_list_page.dart │ ├── chat_message_item.dart │ ├── chat_messages_page.dart │ ├── chat_search_item.dart │ ├── chat_search_page.dart │ └── message.dart ├── content │ ├── blog_home.dart │ ├── content_main_page.dart │ ├── detail_screen_grid.dart │ ├── detail_screen_page_four.dart │ ├── detail_screen_page_one.dart │ ├── detail_screen_page_three.dart │ ├── detail_screen_page_two.dart │ ├── image_text_page.dart │ ├── image_text_pager.dart │ ├── invite_list_item.dart │ ├── invite_list_page.dart │ ├── popular_courses_home_page.dart │ ├── popular_courses_item.dart │ ├── popular_courses_page.dart │ ├── user.dart │ ├── user_list_item.dart │ └── user_list_page.dart ├── custom_widgets │ ├── badge_text.dart │ ├── button_plain.dart │ ├── button_plain_with_shadow.dart │ ├── button_round_with_shadow.dart │ ├── button_solid_with_icon.dart │ ├── cart_add_remove_button.dart │ ├── chip_widget.dart │ ├── chips_filter_widget.dart │ ├── circle_dot_widget.dart │ ├── color_widget.dart │ ├── colors_select_widget.dart │ ├── contra_button.dart │ ├── contra_button_round.dart │ ├── contra_input_box.dart │ ├── contra_time_picker.dart │ ├── custom_app_bar.dart │ ├── custom_header.dart │ ├── custom_input_text.dart │ ├── custom_list_item.dart │ ├── custom_search_text.dart │ ├── image_round_text.dart │ ├── onboarding_page_text_widget.dart │ ├── pager_image_view.dart │ ├── size_widget.dart │ ├── sizes_select_widget.dart │ └── star_widget.dart ├── login │ ├── contact_us_form.dart │ ├── contra_text.dart │ ├── input_text_box_bigger.dart │ ├── login_form_one.dart │ ├── login_form_two.dart │ ├── login_form_type_four.dart │ ├── login_form_type_three.dart │ ├── login_input_email_text.dart │ ├── login_input_password_text.dart │ ├── login_main.dart │ ├── rich_text.dart │ ├── signup_form_one.dart │ └── verification_type.dart ├── main.dart ├── maps │ ├── location.dart │ ├── location_detail.dart │ ├── location_list_item.dart │ ├── location_listing.dart │ ├── map_main_page.dart │ └── map_widget.dart ├── menu │ ├── menu_page_one.dart │ ├── menu_page_two.dart │ ├── menu_settings_main_page.dart │ ├── settings.dart │ ├── settings_card_item.dart │ ├── settings_item_widget.dart │ ├── settings_list_card_item.dart │ ├── settings_page_one.dart │ ├── settings_page_three.dart │ └── settings_page_two.dart ├── onboarding │ ├── onboard_data.dart │ ├── onboard_main.dart │ ├── type1 │ │ ├── onboard_page_one.dart │ │ └── pager.dart │ ├── type2 │ │ ├── onboard_page_two.dart │ │ └── pager.dart │ ├── type3 │ │ ├── onboard_page_three.dart │ │ └── pager.dart │ ├── type4 │ │ └── onboard_page_four.dart │ └── welcome_screen.dart ├── payment │ ├── payment_card.dart │ ├── payment_card_item.dart │ ├── payment_card_item_big.dart │ ├── payment_main_page.dart │ ├── payment_page_one.dart │ ├── payment_page_three.dart │ ├── payment_page_two.dart │ └── payment_type.dart ├── shopping │ ├── category_item.dart │ ├── shop.dart │ ├── shop_card_item.dart │ ├── shop_card_item_small.dart │ ├── shop_grid_item.dart │ ├── shop_item.dart │ ├── shop_list_item.dart │ ├── shopping_card_pager.dart │ ├── shopping_card_pager_item.dart │ ├── shopping_detail_page_one.dart │ ├── shopping_detail_page_two.dart │ ├── shopping_home_page.dart │ ├── shopping_home_page_one.dart │ ├── shopping_home_page_two.dart │ ├── shopping_list_page_type_one.dart │ ├── shopping_list_page_type_two.dart │ └── shopping_main_page.dart └── utils │ ├── colors.dart │ ├── empty_screen.dart │ └── strings.dart ├── pubspec.lock ├── pubspec.yaml ├── screenshots ├── add_alarm_page.jpg ├── add_label_screen.jpg ├── alarm_list_page.jpg ├── bar_chart.jpg ├── blog_type_five.jpg ├── blog_type_four.jpg ├── blog_type_one.jpg ├── blog_type_three.jpg ├── blog_type_two.jpg ├── chat_home_page.jpg ├── chat_message_page.jpg ├── chat_search_page.jpg ├── clock_list_page.jpg ├── contact_us_type_1.jpg ├── content_text_eight.jpg ├── content_text_five.jpg ├── content_text_four.jpg ├── content_text_nine.jpg ├── content_text_one.jpg ├── content_text_seven.jpg ├── content_text_six.jpg ├── content_text_ten.jpg ├── content_text_three.jpg ├── content_text_two.jpg ├── home.jpg ├── line_chart.jpg ├── location_detail.jpg ├── location_list_page.jpg ├── login_type_1.jpg ├── login_type_2.jpg ├── login_type_3.jpg ├── login_type_4.jpg ├── menu_page_one.jpg ├── menu_page_two.jpg ├── onboard_type_1.jpg ├── onboard_type_2.jpg ├── onboard_type_3.jpg ├── onboard_type_4.jpg ├── payment_type_four.jpg ├── payment_type_one.jpg ├── payment_type_three.jpg ├── payment_type_two.jpg ├── settings_page_one.jpg ├── settings_page_three.jpg ├── settings_page_two.jpg ├── shopping_screen_five.jpg ├── shopping_screen_four.jpg ├── shopping_screen_one.jpg ├── shopping_screen_six.jpg ├── shopping_screen_three.jpg ├── shopping_screen_two.jpg ├── signup_type_1.jpg ├── verification_type_1.jpg ├── weather_list_page.jpg ├── welcome_screen.jpg └── welcome_screen.png └── test └── widget_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # Android related 19 | **/android/**/gradle-wrapper.jar 20 | **/android/.gradle 21 | **/android/captures/ 22 | **/android/gradlew 23 | **/android/gradlew.bat 24 | **/android/local.properties 25 | **/android/**/GeneratedPluginRegistrant.java 26 | 27 | # The .vscode folder contains launch configuration and tasks you configure in 28 | # VS Code which you may wish to be included in version control, so this line 29 | # is commented out by default. 30 | #.vscode/ 31 | 32 | # Flutter/Dart/Pub related 33 | **/doc/api/ 34 | .dart_tool/ 35 | .flutter-plugins 36 | .flutter-plugins-dependencies 37 | .packages 38 | .pub-cache/ 39 | .pub/ 40 | /build/ 41 | 42 | # Web related 43 | lib/generated_plugin_registrant.dart 44 | 45 | # Exceptions to above rules. 46 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 47 | -------------------------------------------------------------------------------- /.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: f139b11009aeb8ed2a3a3aa8b0066e482709dde3 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | /key.properties 8 | GeneratedPluginRegistrant.java 9 | -------------------------------------------------------------------------------- /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 = '3' 17 | } 18 | flutterVersionCode = '3' 19 | 20 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 21 | if (flutterVersionName == null) { 22 | flutterVersionName = '1.0' 23 | } 24 | flutterVersionName = '1.0' 25 | 26 | def keystoreProperties = new Properties() 27 | def keystorePropertiesFile = rootProject.file('key.properties') 28 | if (keystorePropertiesFile.exists()) { 29 | keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) 30 | } 31 | 32 | apply plugin: 'com.android.application' 33 | apply plugin: 'kotlin-android' 34 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 35 | 36 | android { 37 | compileSdkVersion 29 38 | 39 | sourceSets { 40 | main.java.srcDirs += 'src/main/kotlin' 41 | } 42 | 43 | lintOptions { 44 | disable 'InvalidPackage' 45 | } 46 | 47 | defaultConfig { 48 | applicationId "com.contra.flutter.kit" 49 | minSdkVersion 20 50 | targetSdkVersion 29 51 | versionCode flutterVersionCode.toInteger() 52 | versionName flutterVersionName 53 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 54 | } 55 | 56 | signingConfigs { 57 | release { 58 | keyAlias keystoreProperties['keyAlias'] 59 | keyPassword keystoreProperties['keyPassword'] 60 | storeFile file(keystoreProperties['storeFile']) 61 | storePassword keystoreProperties['storePassword'] 62 | } 63 | debug { 64 | 65 | } 66 | } 67 | 68 | buildTypes { 69 | release { 70 | signingConfig signingConfigs.release 71 | minifyEnabled true 72 | useProguard true 73 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 74 | } 75 | 76 | debug { 77 | signingConfig signingConfigs.debug 78 | } 79 | } 80 | } 81 | 82 | flutter { 83 | source '../..' 84 | } 85 | 86 | dependencies { 87 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 88 | testImplementation 'junit:junit:4.12' 89 | androidTestImplementation 'androidx.test.ext:junit:1.1.1' 90 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' 91 | } 92 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 29 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/contra/flutter/kit/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.contra.flutter.kit 2 | 3 | import androidx.annotation.NonNull; 4 | import io.flutter.embedding.android.FlutterActivity 5 | import io.flutter.embedding.engine.FlutterEngine 6 | import io.flutter.plugins.GeneratedPluginRegistrant 7 | 8 | class MainActivity: FlutterActivity() { 9 | override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { 10 | GeneratedPluginRegistrant.registerWith(flutterEngine); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1947E6 4 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.72' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.3' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Jun 20 00:52:50 IST 2020 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-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /assets/fonts/Montserrat-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/assets/fonts/Montserrat-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Montserrat-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/assets/fonts/Montserrat-ExtraBold.ttf -------------------------------------------------------------------------------- /assets/fonts/Montserrat-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/assets/fonts/Montserrat-Medium.ttf -------------------------------------------------------------------------------- /assets/icons/arrow_back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/arrow_back_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/arrow_forward.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/arrow_next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/ic_bell.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/ic_circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_circle_not_selected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_cloud_lightning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/ic_cloud_rain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/ic_facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_heart_fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_instagram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icons/ic_navigation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_navigation_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/ic_star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/ic_sun.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/ic_twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/logo_visa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/mail.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icons/placeholder_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/images/peep_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/assets/images/peep_avatar.png -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '12.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - google_maps_flutter (0.0.1): 4 | - Flutter 5 | - GoogleMaps 6 | - GoogleMaps (2.7.0): 7 | - GoogleMaps/Maps (= 2.7.0) 8 | - GoogleMaps/Base (2.7.0) 9 | - GoogleMaps/Maps (2.7.0): 10 | - GoogleMaps/Base 11 | 12 | DEPENDENCIES: 13 | - Flutter (from `Flutter`) 14 | - google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`) 15 | 16 | SPEC REPOS: 17 | trunk: 18 | - GoogleMaps 19 | 20 | EXTERNAL SOURCES: 21 | Flutter: 22 | :path: Flutter 23 | google_maps_flutter: 24 | :path: ".symlinks/plugins/google_maps_flutter/ios" 25 | 26 | SPEC CHECKSUMS: 27 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 28 | google_maps_flutter: abdb8dee6c52d4be36ad131ee6ebfacd14417c5a 29 | GoogleMaps: f79af95cb24d869457b1f961c93d3ce8b2f3b848 30 | 31 | PODFILE CHECKSUM: c4c93c5f6502fe2754f48404d3594bf779584011 32 | 33 | COCOAPODS: 1.13.0 34 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | import GoogleMaps 4 | 5 | @UIApplicationMain 6 | @objc class AppDelegate: FlutterAppDelegate { 7 | override func application( 8 | _ application: UIApplication, 9 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 10 | ) -> Bool { 11 | GMSServices.provideAPIKey("YOUR KEY HERE") 12 | GeneratedPluginRegistrant.register(with: self) 13 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | contraflutterkit 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 | CADisableMinimumFrameDurationOnPhone 45 | 46 | UIApplicationSupportsIndirectInputEvents 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /lib/alarm/alarm.dart: -------------------------------------------------------------------------------- 1 | class Alarm { 2 | String time; 3 | String am_pm; 4 | List datesList; 5 | 6 | Alarm({required this.time, required this.am_pm, required this.datesList}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/alarm/alarm_label.dart: -------------------------------------------------------------------------------- 1 | class AlarmLabel { 2 | String title; 3 | String selectedText; 4 | bool selected; 5 | 6 | AlarmLabel( 7 | {required this.title, 8 | required this.selectedText, 9 | required this.selected}); 10 | } 11 | -------------------------------------------------------------------------------- /lib/alarm/alarm_label_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | import 'alarm_label.dart'; 7 | 8 | class AlarmLabelWidget extends StatelessWidget { 9 | AlarmLabel label; 10 | VoidCallback onTap; 11 | 12 | AlarmLabelWidget({required this.label,required this.onTap}); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return GestureDetector( 17 | onTap: onTap, 18 | child: Container( 19 | padding: EdgeInsets.all(24), 20 | child: Row( 21 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 22 | children: [ 23 | ContraText( 24 | text: label.title, 25 | alignment: Alignment.centerLeft, 26 | color: wood_smoke, 27 | size: 21, 28 | ), 29 | label.selected 30 | ? ContraText( 31 | text: label.selectedText, 32 | alignment: Alignment.centerLeft, 33 | color: black, 34 | size: 17, 35 | ) 36 | : Icon( 37 | Icons.arrow_forward_ios, 38 | color: wood_smoke, 39 | ) 40 | ], 41 | ), 42 | ), 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /lib/alarm/alarm_main_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AlarmMainPage extends StatefulWidget { 4 | @override 5 | _AlarmMainPageState createState() => _AlarmMainPageState(); 6 | } 7 | 8 | class _AlarmMainPageState extends State { 9 | @override 10 | void initState() { 11 | super.initState(); 12 | } 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text("Alarm, Clock, Weather"), 19 | ), 20 | body: SingleChildScrollView( 21 | child: Column( 22 | children: [ 23 | ListTile( 24 | contentPadding: EdgeInsets.all(20), 25 | trailing: Icon(Icons.navigate_next), 26 | title: Text("Alarm List Page"), 27 | onTap: () { 28 | Navigator.pushNamed(context, "/alarm_list_page"); 29 | }, 30 | ), 31 | ListTile( 32 | contentPadding: EdgeInsets.all(20), 33 | trailing: Icon(Icons.navigate_next), 34 | title: Text("Add Alarm Page"), 35 | onTap: () { 36 | Navigator.pushNamed(context, "/add_alarm_page"); 37 | }, 38 | ), 39 | ListTile( 40 | contentPadding: EdgeInsets.all(20), 41 | trailing: Icon(Icons.navigate_next), 42 | title: Text("Clock List Page"), 43 | onTap: () { 44 | Navigator.pushNamed(context, "/clock_list_page"); 45 | }, 46 | ), 47 | ListTile( 48 | contentPadding: EdgeInsets.all(20), 49 | trailing: Icon(Icons.navigate_next), 50 | title: Text("Weather List Page"), 51 | onTap: () { 52 | Navigator.pushNamed(context, "/weather_list_page"); 53 | }, 54 | ), 55 | ListTile( 56 | contentPadding: EdgeInsets.all(20), 57 | trailing: Icon(Icons.navigate_next), 58 | title: Text("Weather Page"), 59 | onTap: () { 60 | Navigator.pushNamed(context, "/weather_page"); 61 | }, 62 | ), 63 | ], 64 | ), 65 | ), 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/alarm/bottom_sheet_input.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/contra_input_box.dart'; 2 | import 'package:contraflutterkit/login/contra_text.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_svg/flutter_svg.dart'; 6 | 7 | class BottomSheetInput extends StatelessWidget { 8 | @override 9 | Widget build(BuildContext context) { 10 | return Padding( 11 | padding: 12 | EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), 13 | child: Container( 14 | height: 200, 15 | color: Color(0xFF737373), 16 | // This line set the transparent background 17 | child: Container( 18 | height: 200, 19 | decoration: ShapeDecoration( 20 | color: white, 21 | shape: RoundedRectangleBorder( 22 | borderRadius: BorderRadius.only( 23 | topLeft: Radius.circular(16), 24 | topRight: Radius.circular(16)))), 25 | child: Column( 26 | children: [ 27 | Padding( 28 | padding: const EdgeInsets.all(16.0), 29 | child: Row( 30 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 31 | children: [ 32 | ContraText( 33 | text: "Label", 34 | alignment: Alignment.centerLeft, 35 | color: wood_smoke, 36 | size: 21, 37 | weight: FontWeight.bold, 38 | ), 39 | GestureDetector( 40 | onTap: () { 41 | Navigator.of(context).pop(); 42 | }, 43 | child: SvgPicture.asset( 44 | "assets/icons/close.svg", 45 | )) 46 | ], 47 | ), 48 | ), 49 | Container( 50 | height: 2, 51 | color: wood_smoke, 52 | ), 53 | SizedBox( 54 | height: 20, 55 | ), 56 | Padding( 57 | padding: const EdgeInsets.all(16.0), 58 | child: ContraInputBox( 59 | hintText: "Enter name", 60 | iconPath: "assets/icons/mail.svg", 61 | showPrefix: false, 62 | ), 63 | ) 64 | ], 65 | ), 66 | ), 67 | ), 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/alarm/circular_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CircularListItem extends StatefulWidget { 5 | @override 6 | CircularListItemState createState() { 7 | return new CircularListItemState(); 8 | } 9 | } 10 | 11 | class CircularListItemState extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Transform( 15 | transform: new Matrix4.translationValues(-30.0, -30.0, 0.0), 16 | child: Container( 17 | width: 40.0, 18 | height: 20.0, 19 | decoration: new ShapeDecoration( 20 | color: lightening_yellow, 21 | shape: RoundedRectangleBorder( 22 | borderRadius: BorderRadius.all(Radius.circular(16)))), 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/alarm/circular_list_position.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class CircularPosition extends StatefulWidget { 6 | final double radius; 7 | final double angle; 8 | final Widget child; 9 | 10 | CircularPosition({ 11 | required this.angle, 12 | required this.child, 13 | required this.radius, 14 | }); 15 | 16 | @override 17 | CircularPositionState createState() { 18 | return new CircularPositionState(); 19 | } 20 | } 21 | 22 | class CircularPositionState extends State { 23 | @override 24 | Widget build(BuildContext context) { 25 | final x = cos(widget.angle) * widget.radius; 26 | final y = sin(widget.angle) * widget.radius; 27 | 28 | return Transform( 29 | transform: new Matrix4.translationValues(x, y, 0.0), 30 | child: widget.child, 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/alarm/circular_list_view.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:contraflutterkit/alarm/circular_list_item.dart'; 4 | import 'package:contraflutterkit/utils/colors.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | import 'circular_list_position.dart'; 8 | 9 | class CircularListView extends StatefulWidget { 10 | final List items; 11 | final double radius; 12 | 13 | CircularListView({ 14 | required this.items, 15 | required this.radius, 16 | }); 17 | 18 | List _radialListItems() { 19 | final double firstItemAngle = pi; 20 | final double lastItemAngle = pi; 21 | final double angleDiff = (firstItemAngle + lastItemAngle) / (items.length); 22 | 23 | double currentAngle = firstItemAngle; 24 | return items.map((int i) { 25 | final listItem = _radialListItem(currentAngle); 26 | currentAngle += angleDiff; 27 | return listItem; 28 | }).toList(); 29 | } 30 | 31 | List _allWidgets() { 32 | List allWidgets = []; 33 | allWidgets.add(_backgroundWidget()); 34 | allWidgets.addAll(_radialListItems()); 35 | return allWidgets; 36 | } 37 | 38 | Widget _backgroundWidget() { 39 | return Transform( 40 | transform: new Matrix4.translationValues(145.0, 320.0, 0.0), 41 | child: Container( 42 | width: 120, 43 | height: 120, 44 | padding: const EdgeInsets.symmetric(horizontal: 34.0, vertical: 120), 45 | decoration: new BoxDecoration( 46 | color: white, 47 | shape: BoxShape.circle, 48 | border: new Border.all( 49 | color: Colors.black, 50 | width: 16, 51 | ), 52 | ), 53 | ), 54 | ); 55 | } 56 | 57 | Widget _radialListItem(double angle) { 58 | return Transform( 59 | transform: new Matrix4.translationValues(215.0, 400.0, 0.0), 60 | child: CircularPosition( 61 | radius: radius, 62 | angle: angle, 63 | child: new CircularListItem(), 64 | ), 65 | ); 66 | } 67 | 68 | @override 69 | CircularListViewState createState() { 70 | return new CircularListViewState(); 71 | } 72 | } 73 | 74 | class CircularListViewState extends State { 75 | @override 76 | Widget build(BuildContext context) { 77 | return new Stack( 78 | children: widget._allWidgets(), 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /lib/alarm/clock.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class Clock { 4 | String country; 5 | String city; 6 | String time; 7 | String am_pm; 8 | Color color; 9 | 10 | Clock( 11 | {required this.country, 12 | required this.city, 13 | required this.time, 14 | required this.am_pm, 15 | required this.color}); 16 | } 17 | -------------------------------------------------------------------------------- /lib/alarm/clock_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | import 'clock.dart'; 7 | 8 | class ClockListItem extends StatelessWidget { 9 | Clock clock; 10 | 11 | ClockListItem({required this.clock}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | margin: EdgeInsets.symmetric(vertical: 12), 17 | padding: EdgeInsets.all(24), 18 | decoration: ShapeDecoration( 19 | color: clock.color, 20 | shadows: [BoxShadow(color: wood_smoke, offset: Offset(0, 2))], 21 | shape: RoundedRectangleBorder( 22 | borderRadius: BorderRadius.all(Radius.circular(16)), 23 | side: BorderSide(color: wood_smoke, width: 2))), 24 | child: Row( 25 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 26 | children: [ 27 | Column( 28 | crossAxisAlignment: CrossAxisAlignment.start, 29 | children: [ 30 | ContraText( 31 | color: wood_smoke, 32 | text: clock.country, 33 | size: 27, 34 | alignment: Alignment.centerLeft, 35 | ), 36 | ContraText( 37 | color: trout, 38 | text: clock.city, 39 | size: 15, 40 | alignment: Alignment.centerLeft, 41 | weight: FontWeight.w500, 42 | ), 43 | ], 44 | ), 45 | Row( 46 | children: [ 47 | ContraText( 48 | color: wood_smoke, 49 | text: clock.time, 50 | size: 44, 51 | alignment: Alignment.centerLeft, 52 | ), 53 | ContraText( 54 | color: wood_smoke, 55 | text: clock.am_pm, 56 | size: 15, 57 | alignment: Alignment.centerLeft, 58 | ), 59 | ], 60 | ), 61 | ], 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/alarm/weather.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class Weather { 4 | String country; 5 | String city; 6 | String time; 7 | String image; 8 | String am_pm; 9 | String degree; 10 | Color color; 11 | 12 | Weather( 13 | {required this.country, 14 | required this.city, 15 | required this.am_pm, 16 | required this.time, 17 | required this.color, 18 | required this.image, 19 | required this.degree}); 20 | } 21 | 22 | class WeatherDate { 23 | String day; 24 | String image; 25 | Color color; 26 | 27 | WeatherDate({required this.day, required this.color, required this.image}); 28 | } 29 | -------------------------------------------------------------------------------- /lib/alarm/weather_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/alarm/weather.dart'; 2 | import 'package:contraflutterkit/login/contra_text.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_svg/svg.dart'; 7 | 8 | class WeatherListItem extends StatelessWidget { 9 | Weather weather; 10 | 11 | WeatherListItem({required this.weather}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | margin: EdgeInsets.symmetric(vertical: 12), 17 | padding: EdgeInsets.all(24), 18 | decoration: ShapeDecoration( 19 | color: weather.color, 20 | shadows: [BoxShadow(color: wood_smoke, offset: Offset(0, 2))], 21 | shape: RoundedRectangleBorder( 22 | borderRadius: BorderRadius.all(Radius.circular(16)), 23 | side: BorderSide(color: wood_smoke, width: 2))), 24 | child: Row( 25 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 26 | children: [ 27 | Column( 28 | crossAxisAlignment: CrossAxisAlignment.start, 29 | children: [ 30 | ContraText( 31 | color: wood_smoke, 32 | text: weather.country, 33 | size: 27, 34 | alignment: Alignment.centerLeft, 35 | ), 36 | Row( 37 | children: [ 38 | ContraText( 39 | color: wood_smoke, 40 | text: weather.city + ",", 41 | size: 13, 42 | alignment: Alignment.centerLeft, 43 | weight: FontWeight.bold, 44 | ), 45 | ContraText( 46 | color: wood_smoke, 47 | text: weather.time + weather.am_pm, 48 | size: 13, 49 | alignment: Alignment.centerLeft, 50 | weight: FontWeight.bold, 51 | ), 52 | ], 53 | ), 54 | ], 55 | ), 56 | Row( 57 | children: [ 58 | SvgPicture.asset("assets/icons/ic_cloud_rain.svg"), 59 | SizedBox( 60 | width: 10, 61 | ), 62 | ContraText( 63 | color: wood_smoke, 64 | text: weather.degree + "\u00B0", 65 | size: 44, 66 | alignment: Alignment.centerLeft, 67 | ), 68 | ], 69 | ), 70 | ], 71 | ), 72 | ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /lib/alarm/weather_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/alarm/weather.dart'; 2 | import 'package:contraflutterkit/login/contra_text.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter_svg/svg.dart'; 6 | 7 | class WeatherWidget extends StatelessWidget { 8 | WeatherDate date; 9 | 10 | WeatherWidget({required this.date}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | width: 48, 16 | child: Column( 17 | mainAxisSize: MainAxisSize.min, 18 | children: [ 19 | ContraText( 20 | text: date.day, 21 | alignment: Alignment.center, 22 | weight: FontWeight.w800, 23 | size: 13, 24 | color: wood_smoke, 25 | ), 26 | SizedBox( 27 | height: 10, 28 | ), 29 | SvgPicture.asset( 30 | date.image, 31 | width: 32, 32 | height: 32, 33 | ) 34 | ], 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/blog/blog.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class Blog { 4 | final String title; 5 | final String description; 6 | final Color bgColor; 7 | final String user; 8 | final String time; 9 | 10 | const Blog( 11 | {required this.title, 12 | required this.description, 13 | required this.bgColor, 14 | required this.user, 15 | required this.time}); 16 | } 17 | 18 | class BlogWithSize { 19 | final String title; 20 | final String description; 21 | final Color bgColor; 22 | final double width; 23 | final double height; 24 | 25 | const BlogWithSize( 26 | {required this.title, 27 | required this.description, 28 | required this.bgColor, 29 | required this.width, 30 | required this.height}); 31 | } 32 | -------------------------------------------------------------------------------- /lib/blog/blog_card_type_two.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | import 'blog.dart'; 6 | 7 | class BlogCardTypeTwo extends StatelessWidget { 8 | final VoidCallback onTap; 9 | final Blog blog; 10 | 11 | const BlogCardTypeTwo({required this.onTap, required this.blog}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return GestureDetector( 16 | onTap: onTap, 17 | child: Container( 18 | margin: EdgeInsets.only(top: 24), 19 | padding: EdgeInsets.all(24), 20 | decoration: ShapeDecoration( 21 | color: blog.bgColor, 22 | shadows: [ 23 | BoxShadow( 24 | color: wood_smoke, 25 | offset: Offset( 26 | 0.0, // Move to right 10 horizontally 27 | 4.0, // Move to bottom 5 Vertically 28 | ), 29 | ) 30 | ], 31 | shape: RoundedRectangleBorder( 32 | borderRadius: BorderRadius.all(Radius.circular(16)), 33 | side: BorderSide(color: wood_smoke, width: 2))), 34 | child: Column( 35 | crossAxisAlignment: CrossAxisAlignment.start, 36 | children: [ 37 | Text( 38 | "by " + blog.user + " • " + blog.time, 39 | style: TextStyle( 40 | fontSize: 12, fontWeight: FontWeight.bold, color: trout), 41 | ), 42 | SizedBox( 43 | height: 24, 44 | ), 45 | Text( 46 | blog.title, 47 | maxLines: 2, 48 | overflow: TextOverflow.ellipsis, 49 | style: TextStyle( 50 | fontSize: 24, 51 | fontWeight: FontWeight.w800, 52 | color: wood_smoke), 53 | ), 54 | ], 55 | ), 56 | )); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/blog/blog_home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/blog/blog_list_page_four.dart'; 2 | import 'package:contraflutterkit/blog/blog_list_page_one.dart'; 3 | import 'package:contraflutterkit/blog/blog_list_page_two.dart'; 4 | import 'package:contraflutterkit/utils/colors.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | import 'blog_list_page_three.dart'; 8 | 9 | class BlogHomePage extends StatefulWidget { 10 | @override 11 | _BlogHomePageState createState() => _BlogHomePageState(); 12 | } 13 | 14 | class _BlogHomePageState extends State { 15 | int _currentIndex = 0; 16 | final List _childrenWidgets = [ 17 | BlogListPageOne(), 18 | BlogListPageTwo(), 19 | BlogListPageThree(), 20 | BlogListPageFour(), 21 | ]; 22 | 23 | void _onItemTapped(int index) { 24 | setState(() { 25 | _currentIndex = index; 26 | }); 27 | } 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | return Scaffold( 32 | body: Center( 33 | child: _childrenWidgets.elementAt(_currentIndex), 34 | ), 35 | bottomNavigationBar: BottomNavigationBar( 36 | items: [ 37 | BottomNavigationBarItem(icon: Icon(Icons.home), label: ("Home")), 38 | BottomNavigationBarItem( 39 | icon: Icon(Icons.search), label: ("Search")), 40 | BottomNavigationBarItem( 41 | icon: Icon(Icons.chat_bubble), label: ("Chat")), 42 | BottomNavigationBarItem(icon: Icon(Icons.info), label: ("About")), 43 | ], 44 | currentIndex: _currentIndex, 45 | onTap: _onItemTapped, 46 | selectedItemColor: wood_smoke, 47 | unselectedItemColor: trout, 48 | showSelectedLabels: true, 49 | showUnselectedLabels: true, 50 | selectedIconTheme: IconThemeData(color: wood_smoke, opacity: 1), 51 | unselectedIconTheme: IconThemeData(color: trout, opacity: 0.6), 52 | selectedLabelStyle: TextStyle( 53 | color: wood_smoke, fontSize: 12, fontWeight: FontWeight.w800), 54 | unselectedLabelStyle: 55 | TextStyle(color: trout, fontSize: 12, fontWeight: FontWeight.w800), 56 | ), 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/blog/blog_staggered_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/blog/blog.dart'; 2 | import 'package:contraflutterkit/login/contra_text.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class BlogStaggeredItem extends StatelessWidget { 8 | final BlogWithSize blog; 9 | 10 | const BlogStaggeredItem({required this.blog}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | height: 250, 16 | child: Column( 17 | children: [ 18 | Container( 19 | width: blog.width, 20 | height: blog.height, 21 | alignment: Alignment.center, 22 | child: Center( 23 | child: Icon( 24 | Icons.image, 25 | color: white, 26 | size: 40, 27 | ), 28 | ), 29 | decoration: ShapeDecoration( 30 | color: blog.bgColor, 31 | shadows: [ 32 | BoxShadow( 33 | color: wood_smoke, 34 | offset: Offset( 35 | 0.0, // Move to right 10 horizontally 36 | 0.0, // Move to bottom 5 Vertically 37 | ), 38 | ) 39 | ], 40 | shape: RoundedRectangleBorder( 41 | borderRadius: BorderRadius.all(Radius.circular(16)), 42 | side: BorderSide(color: wood_smoke, width: 2))), 43 | ), 44 | Row( 45 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 46 | children: [ 47 | ContraText( 48 | size: 13, 49 | alignment: Alignment.centerLeft, 50 | text: blog.title, 51 | ), 52 | Icon( 53 | Icons.favorite_border, 54 | color: wood_smoke, 55 | ) 56 | ], 57 | ), 58 | Text( 59 | blog.description, 60 | style: TextStyle(color: trout, fontSize: 13), 61 | ) 62 | ], 63 | ), 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/chart/charts_main_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ChartMainPage extends StatefulWidget { 4 | @override 5 | _ChartMainPageState createState() => _ChartMainPageState(); 6 | } 7 | 8 | class _ChartMainPageState extends State { 9 | @override 10 | void initState() { 11 | super.initState(); 12 | } 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text("Data and Statistics"), 19 | ), 20 | body: SingleChildScrollView( 21 | child: Column( 22 | children: [ 23 | ListTile( 24 | contentPadding: EdgeInsets.all(20), 25 | trailing: Icon(Icons.navigate_next), 26 | title: Text("Bar Charts"), 27 | onTap: () { 28 | Navigator.pushNamed(context, "/bar_chart_page"); 29 | }, 30 | ), 31 | ListTile( 32 | contentPadding: EdgeInsets.all(20), 33 | trailing: Icon(Icons.navigate_next), 34 | title: Text("Line Charts"), 35 | onTap: () { 36 | Navigator.pushNamed(context, "/line_chart_page"); 37 | }, 38 | ), 39 | ], 40 | ), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/chart/expense.dart: -------------------------------------------------------------------------------- 1 | class Expense { 2 | String title; 3 | String description; 4 | String time; 5 | 6 | Expense({required this.title, required this.description, required this.time}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/chart/expenses_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/chart/expense.dart'; 2 | import 'package:contraflutterkit/custom_widgets/image_round_text.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class ExpenseListItem extends StatelessWidget { 8 | Expense expense; 9 | 10 | ExpenseListItem({required this.expense}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | padding: EdgeInsets.all(24), 16 | child: Row( 17 | children: [ 18 | RoundImageWithText( 19 | size: 48, 20 | text: expense.title.substring(0, 1), 21 | color: dandelion, 22 | borderColor: wood_smoke, 23 | shadowColor: wood_smoke, 24 | ), 25 | SizedBox( 26 | width: 12, 27 | ), 28 | Expanded( 29 | flex: 4, 30 | child: Column( 31 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 32 | crossAxisAlignment: CrossAxisAlignment.start, 33 | children: [ 34 | Text( 35 | expense.time, 36 | textAlign: TextAlign.start, 37 | style: TextStyle( 38 | fontSize: 21, 39 | color: wood_smoke, 40 | fontWeight: FontWeight.w800), 41 | ), 42 | SizedBox( 43 | height: 6, 44 | ), 45 | Text( 46 | expense.description, 47 | textAlign: TextAlign.start, 48 | style: TextStyle( 49 | color: trout, fontWeight: FontWeight.w500, fontSize: 15), 50 | ) 51 | ], 52 | ), 53 | ), 54 | Expanded( 55 | flex: 1, 56 | child: Text( 57 | expense.time, 58 | style: TextStyle( 59 | fontSize: 11, 60 | color: santas_gray_10, 61 | fontWeight: FontWeight.bold), 62 | ), 63 | ) 64 | ], 65 | ), 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/chat/chat.dart: -------------------------------------------------------------------------------- 1 | class Chat { 2 | final String name; 3 | final String message; 4 | final String time; 5 | final String count; 6 | 7 | const Chat( 8 | {required this.name, 9 | required this.message, 10 | required this.time, 11 | required this.count}); 12 | } 13 | -------------------------------------------------------------------------------- /lib/chat/chat_home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | import 'chat_list_page.dart'; 6 | 7 | class ChatHomePage extends StatefulWidget { 8 | @override 9 | _ChatHomePageState createState() => _ChatHomePageState(); 10 | } 11 | 12 | class _ChatHomePageState extends State { 13 | int _currentIndex = 0; 14 | final List _childrenWidgets = [ 15 | ChatListPage(), 16 | ChatListPage(), 17 | ChatListPage(), 18 | ChatListPage() 19 | ]; 20 | 21 | void _onItemTapped(int index) { 22 | setState(() { 23 | _currentIndex = index; 24 | }); 25 | } 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | return Scaffold( 30 | body: Center( 31 | child: _childrenWidgets.elementAt(_currentIndex), 32 | ), 33 | bottomNavigationBar: BottomNavigationBar( 34 | items: [ 35 | BottomNavigationBarItem(icon: Icon(Icons.home), label: ("Home")), 36 | BottomNavigationBarItem( 37 | icon: Icon(Icons.search), label: ("Search")), 38 | BottomNavigationBarItem( 39 | icon: Icon(Icons.chat_bubble), label: ("Chat")), 40 | BottomNavigationBarItem(icon: Icon(Icons.info), label: ("About")), 41 | ], 42 | currentIndex: _currentIndex, 43 | onTap: _onItemTapped, 44 | selectedItemColor: wood_smoke, 45 | unselectedItemColor: trout, 46 | showSelectedLabels: true, 47 | showUnselectedLabels: true, 48 | selectedIconTheme: IconThemeData(color: wood_smoke, opacity: 1), 49 | unselectedIconTheme: IconThemeData(color: trout, opacity: 0.6), 50 | selectedLabelStyle: TextStyle( 51 | color: wood_smoke, fontSize: 12, fontWeight: FontWeight.w800), 52 | unselectedLabelStyle: 53 | TextStyle(color: trout, fontSize: 12, fontWeight: FontWeight.w800), 54 | ), 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/chat/chat_message_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/chat/message.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class ChatMessageItemWidget extends StatelessWidget { 7 | final Message message; 8 | final Color borderColor; 9 | final Color textColor; 10 | final Color color; 11 | final bool isTimeStampSame; 12 | 13 | const ChatMessageItemWidget( 14 | {required this.message, 15 | required this.color, 16 | required this.isTimeStampSame, 17 | required this.borderColor, 18 | required this.textColor}); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | print(isTimeStampSame); 23 | return Container( 24 | padding: isTimeStampSame 25 | ? EdgeInsets.symmetric(vertical: 4) 26 | : EdgeInsets.symmetric( 27 | vertical: 16, 28 | ), 29 | child: Row( 30 | mainAxisAlignment: 31 | message.isUser ? MainAxisAlignment.end : MainAxisAlignment.start, 32 | children: [ 33 | !message.isUser 34 | ? isTimeStampSame 35 | ? SizedBox( 36 | width: 48, 37 | height: 48, 38 | ) 39 | : Image.asset( 40 | "assets/images/peep_avatar.png", 41 | width: 48, 42 | height: 48, 43 | ) 44 | : SizedBox(), 45 | SizedBox( 46 | width: 12, 47 | ), 48 | Flexible( 49 | child: Container( 50 | padding: EdgeInsets.all(16), 51 | decoration: ShapeDecoration( 52 | color: message.isUser ? caribbean_color : color, 53 | shape: RoundedRectangleBorder( 54 | borderRadius: BorderRadius.all(Radius.circular(16)), 55 | side: BorderSide(color: borderColor, width: 2))), 56 | child: Text( 57 | message.message, 58 | textAlign: TextAlign.start, 59 | style: TextStyle( 60 | color: textColor, 61 | fontWeight: FontWeight.bold, 62 | fontSize: 17), 63 | ), 64 | ), 65 | ), 66 | ], 67 | ), 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/chat/chat_search_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/image_round_text.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | import 'chat.dart'; 7 | 8 | class ChatSearchItemWidget extends StatelessWidget { 9 | final Chat chat; 10 | final Color borderColor; 11 | final Color textColor; 12 | final Color color; 13 | 14 | const ChatSearchItemWidget( 15 | {required this.chat, 16 | required this.color, 17 | required this.borderColor, 18 | required this.textColor}); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Container( 23 | padding: EdgeInsets.symmetric(vertical: 24), 24 | child: Row( 25 | children: [ 26 | Expanded( 27 | flex: 1, 28 | child: RoundImageWithText( 29 | size: 54, 30 | text: chat.name.substring(0, 1), 31 | color: dandelion, 32 | borderColor: wood_smoke, 33 | shadowColor: wood_smoke, 34 | ), 35 | ), 36 | SizedBox( 37 | width: 12, 38 | ), 39 | Expanded( 40 | flex: 3, 41 | child: Text( 42 | chat.name, 43 | textAlign: TextAlign.start, 44 | style: TextStyle( 45 | color: textColor, fontWeight: FontWeight.bold, fontSize: 17), 46 | ), 47 | ), 48 | Expanded( 49 | flex: 1, 50 | child: Text( 51 | chat.time, 52 | style: TextStyle( 53 | fontSize: 11, 54 | color: santas_gray_10, 55 | fontWeight: FontWeight.bold), 56 | ), 57 | ), 58 | ], 59 | ), 60 | ); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /lib/chat/message.dart: -------------------------------------------------------------------------------- 1 | class Message { 2 | final String name; 3 | final String message; 4 | final String time; 5 | final bool isUser; 6 | 7 | const Message( 8 | {required this.name, 9 | required this.message, 10 | required this.time, 11 | required this.isUser}); 12 | } 13 | -------------------------------------------------------------------------------- /lib/content/image_text_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class ImageTextPage extends StatefulWidget { 7 | String image; 8 | 9 | ImageTextPage({required this.image}); 10 | 11 | @override 12 | _ImageTextPageState createState() => _ImageTextPageState(); 13 | } 14 | 15 | class _ImageTextPageState extends State { 16 | @override 17 | Widget build(BuildContext context) { 18 | return Scaffold( 19 | backgroundColor: white, 20 | body: Container( 21 | alignment: Alignment.bottomCenter, 22 | child: SvgPicture.asset( 23 | widget.image, 24 | height: 500, 25 | width: 180, 26 | ), 27 | ), 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/content/invite_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/content/user.dart'; 2 | import 'package:contraflutterkit/custom_widgets/contra_button.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_svg/svg.dart'; 7 | 8 | class InviteListItem extends StatelessWidget { 9 | InviteDetail inviteDetail; 10 | 11 | InviteListItem({required this.inviteDetail}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | padding: EdgeInsets.all(16), 17 | margin: EdgeInsets.symmetric(vertical: 12), 18 | decoration: ShapeDecoration( 19 | color: white, 20 | shape: RoundedRectangleBorder( 21 | borderRadius: BorderRadius.all(Radius.circular(16)))), 22 | child: Row( 23 | children: [ 24 | Expanded( 25 | flex: 1, 26 | child: SvgPicture.asset( 27 | inviteDetail.profile, 28 | width: 60, 29 | height: 60, 30 | ), 31 | ), 32 | SizedBox( 33 | width: 12, 34 | ), 35 | Expanded( 36 | flex: 4, 37 | child: Column( 38 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 39 | crossAxisAlignment: CrossAxisAlignment.start, 40 | children: [ 41 | Text( 42 | inviteDetail.name, 43 | textAlign: TextAlign.start, 44 | style: TextStyle( 45 | fontSize: 21, 46 | color: wood_smoke, 47 | fontWeight: FontWeight.w800), 48 | ), 49 | SizedBox( 50 | height: 6, 51 | ), 52 | Text( 53 | inviteDetail.designation, 54 | textAlign: TextAlign.start, 55 | style: TextStyle( 56 | color: trout, fontWeight: FontWeight.w500, fontSize: 15), 57 | ) 58 | ], 59 | ), 60 | ), 61 | ContraButton( 62 | height: 36, 63 | iconPath: "", 64 | color: inviteDetail.isInvited ? wood_smoke : lightening_yellow, 65 | isSuffix: false, 66 | isPrefix: false, 67 | size: 90, 68 | text: inviteDetail.isInvited ? "Invited" : "Invite", 69 | textSize: 12, 70 | borderColor: wood_smoke, 71 | textColor: inviteDetail.isInvited ? white : wood_smoke, 72 | callback: () {}, 73 | shadowColor: wood_smoke, 74 | ) 75 | ], 76 | ), 77 | ); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /lib/content/popular_courses_home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/content/popular_courses_page.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class PopularCoursesHomePage extends StatefulWidget { 6 | @override 7 | _PopularCoursesHomePageState createState() => _PopularCoursesHomePageState(); 8 | } 9 | 10 | class _PopularCoursesHomePageState extends State { 11 | int _currentIndex = 0; 12 | final List _childrenWidgets = [ 13 | PopularCoursesPage(), 14 | PopularCoursesPage(), 15 | PopularCoursesPage(), 16 | PopularCoursesPage(), 17 | ]; 18 | 19 | void _onItemTapped(int index) { 20 | setState(() { 21 | _currentIndex = index; 22 | }); 23 | } 24 | 25 | @override 26 | Widget build(BuildContext context) { 27 | return Scaffold( 28 | body: Center( 29 | child: _childrenWidgets.elementAt(_currentIndex), 30 | ), 31 | bottomNavigationBar: BottomNavigationBar( 32 | items: [ 33 | BottomNavigationBarItem(icon: Icon(Icons.home), label:("Home")), 34 | BottomNavigationBarItem( 35 | icon: Icon(Icons.search), label:("Search")), 36 | BottomNavigationBarItem( 37 | icon: Icon(Icons.chat_bubble), label:("Chat")), 38 | BottomNavigationBarItem(icon: Icon(Icons.info), label:("About")), 39 | ], 40 | currentIndex: _currentIndex, 41 | onTap: _onItemTapped, 42 | selectedItemColor: wood_smoke, 43 | unselectedItemColor: trout, 44 | showSelectedLabels: true, 45 | showUnselectedLabels: true, 46 | selectedIconTheme: IconThemeData(color: wood_smoke, opacity: 1), 47 | unselectedIconTheme: IconThemeData(color: trout, opacity: 0.6), 48 | selectedLabelStyle: TextStyle( 49 | color: wood_smoke, fontSize: 12, fontWeight: FontWeight.w800), 50 | unselectedLabelStyle: 51 | TextStyle(color: trout, fontSize: 12, fontWeight: FontWeight.w800), 52 | ), 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/content/user.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class InviteDetail { 4 | final String name; 5 | final String designation; 6 | final String profile; 7 | final bool isInvited; 8 | 9 | const InviteDetail( 10 | {required this.name, 11 | required this.designation, 12 | required this.profile, 13 | required this.isInvited}); 14 | } 15 | 16 | class User { 17 | final String name; 18 | final String designation; 19 | final String profile; 20 | final Color bgColor; 21 | final Color textColor; 22 | 23 | const User( 24 | {required this.name, 25 | required this.designation, 26 | required this.profile, 27 | required this.textColor, 28 | required this.bgColor}); 29 | } 30 | -------------------------------------------------------------------------------- /lib/custom_widgets/badge_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class BadgeText extends StatelessWidget { 5 | final Color color; 6 | final String text; 7 | final double? size; 8 | 9 | const BadgeText({ 10 | required this.color, 11 | required this.text, 12 | this.size, 13 | }); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | height: 24, 19 | width: 24, 20 | decoration: ShapeDecoration( 21 | color: color, 22 | shape: CircleBorder(side: BorderSide(color: color, width: 2))), 23 | child: Center( 24 | child: Text( 25 | text, 26 | style: TextStyle( 27 | color: white, fontWeight: FontWeight.bold, fontSize: 12), 28 | ), 29 | ), 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /lib/custom_widgets/button_plain.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class ButtonPlain extends StatelessWidget { 5 | final Color color; 6 | final Color borderColor; 7 | final Color textColor; 8 | final double? size; 9 | final String text; 10 | final VoidCallback onTap; 11 | final double? height; 12 | final double? textSize; 13 | 14 | const ButtonPlain( 15 | {required this.color, 16 | required this.textColor, 17 | required this.borderColor, 18 | this.size, 19 | required this.text, 20 | this.height, 21 | this.textSize, 22 | required this.onTap}); 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return ButtonTheme( 27 | height: height != null ? height! : 48, 28 | minWidth: size != null ? size! : MediaQuery.of(context).size.width, 29 | child: ElevatedButton( 30 | style: ElevatedButton.styleFrom( 31 | padding: EdgeInsets.all(16), 32 | backgroundColor: color, 33 | foregroundColor: textColor, 34 | shape: RoundedRectangleBorder( 35 | borderRadius: BorderRadius.circular(16.0), 36 | ), 37 | ), 38 | onPressed: onTap, 39 | child: Text( 40 | text, 41 | maxLines: 1, 42 | style: TextStyle( 43 | fontSize: textSize ?? 12, 44 | fontWeight: FontWeight.w800, 45 | ), 46 | ), 47 | )); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/custom_widgets/button_plain_with_shadow.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class ButtonPlainWithShadow extends StatelessWidget { 6 | final Color borderColor; 7 | final Color shadowColor; 8 | final Color color; 9 | final Color? textColor; 10 | final String text; 11 | final VoidCallback callback; 12 | final double? size; 13 | final double? height; 14 | 15 | const ButtonPlainWithShadow( 16 | {required this.borderColor, 17 | required this.shadowColor, 18 | required this.color, 19 | this.textColor, 20 | required this.text, 21 | this.size, 22 | this.height, 23 | required this.callback}); 24 | 25 | @override 26 | Widget build(BuildContext context) { 27 | return GestureDetector( 28 | onTap: callback, 29 | child: Container( 30 | width: size != null ? size : MediaQuery.of(context).size.width, 31 | height: height != null ? height : 48, 32 | padding: EdgeInsets.symmetric(horizontal: 16), 33 | child: Center( 34 | child: Text( 35 | text, 36 | textAlign: TextAlign.center, 37 | style: TextStyle( 38 | color: textColor != null ? textColor : wood_smoke, 39 | fontSize: 21, 40 | fontWeight: FontWeight.w800), 41 | ), 42 | ), 43 | decoration: ShapeDecoration( 44 | shadows: [ 45 | BoxShadow( 46 | color: shadowColor, 47 | offset: Offset( 48 | 0.0, // Move to right 10 horizontally 49 | 4.0, // Move to bottom 5 Vertically 50 | ), 51 | ) 52 | ], 53 | color: color, 54 | shape: RoundedRectangleBorder( 55 | borderRadius: BorderRadius.all(Radius.circular(16)), 56 | side: BorderSide(color: borderColor, width: 2))), 57 | ), 58 | ); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /lib/custom_widgets/button_round_with_shadow.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_svg/svg.dart'; 3 | 4 | class ButtonRoundWithShadow extends StatelessWidget { 5 | final Color borderColor; 6 | final Color shadowColor; 7 | final Color color; 8 | final String iconPath; 9 | final VoidCallback callback; 10 | final double size; 11 | 12 | const ButtonRoundWithShadow( 13 | {required this.borderColor, 14 | required this.shadowColor, 15 | required this.color, 16 | required this.iconPath, 17 | required this.size, 18 | required this.callback}); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return GestureDetector( 23 | onTap: callback, 24 | child: Container( 25 | height: size == null ? null : size, 26 | width: size == null ? null : size, 27 | padding: EdgeInsets.all(size != null ? 8 : 16), 28 | decoration: ShapeDecoration( 29 | shadows: [ 30 | BoxShadow( 31 | color: shadowColor, 32 | offset: Offset( 33 | 0.0, // Move to right 10 horizontally 34 | 4.0, // Move to bottom 5 Vertically 35 | ), 36 | ) 37 | ], 38 | color: color, 39 | shape: 40 | CircleBorder(side: BorderSide(color: borderColor, width: 2))), 41 | child: SvgPicture.asset( 42 | iconPath, 43 | ), 44 | ), 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/custom_widgets/button_solid_with_icon.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class ButtonPlainWithIcon extends StatelessWidget { 7 | final String text; 8 | final String iconPath; 9 | final VoidCallback callback; 10 | final bool isPrefix; 11 | final bool isSuffix; 12 | final Color color; 13 | final Color textColor; 14 | final double? size; 15 | 16 | const ButtonPlainWithIcon( 17 | {required this.text, 18 | required this.callback, 19 | required this.isPrefix, 20 | required this.isSuffix, 21 | required this.iconPath, 22 | required this.color, 23 | this.size, 24 | required this.textColor}); 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return ButtonTheme( 29 | minWidth: size != null ? size! : MediaQuery.of(context).size.width, 30 | child: ElevatedButton( 31 | style: ElevatedButton.styleFrom( 32 | padding: EdgeInsets.all(16), 33 | backgroundColor: color, 34 | foregroundColor: textColor, 35 | shape: RoundedRectangleBorder( 36 | borderRadius: BorderRadius.circular(16.0), 37 | ), 38 | ), 39 | onPressed: callback, 40 | child: Row( 41 | mainAxisAlignment: MainAxisAlignment.center, 42 | children: [ 43 | if (isPrefix) 44 | Padding( 45 | padding: const EdgeInsets.symmetric(horizontal: 8.0), 46 | child: SvgPicture.asset( 47 | iconPath, 48 | color: white, 49 | ), 50 | ), 51 | Text( 52 | text, 53 | style: TextStyle(fontSize: 21.0, fontWeight: FontWeight.bold), 54 | ), 55 | if (isSuffix) 56 | Padding( 57 | padding: const EdgeInsets.symmetric(horizontal: 8.0), 58 | child: SvgPicture.asset(iconPath), 59 | ), 60 | ], 61 | ), 62 | )); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/custom_widgets/chip_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/flutter_svg.dart'; 5 | 6 | class ChipWidget extends StatelessWidget { 7 | final String text; 8 | final bool selected; 9 | final VoidCallback onTap; 10 | 11 | const ChipWidget( 12 | {required this.text, required this.selected, required this.onTap}); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return GestureDetector( 17 | onTap: onTap, 18 | child: Container( 19 | height: 48, 20 | padding: EdgeInsets.all(12), 21 | child: Row( 22 | mainAxisSize: MainAxisSize.min, 23 | children: [ 24 | Text( 25 | text, 26 | style: 27 | TextStyle(color: wood_smoke, fontWeight: FontWeight.bold), 28 | ), 29 | selected ? SvgPicture.asset("assets/icons/close.svg") : SizedBox() 30 | ], 31 | ), 32 | decoration: ShapeDecoration( 33 | color: selected ? pastel_pink : white, 34 | shape: RoundedRectangleBorder( 35 | borderRadius: BorderRadius.all(Radius.circular(44)), 36 | side: BorderSide(color: wood_smoke, width: 2)))), 37 | ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /lib/custom_widgets/chips_filter_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/chip_widget.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class ChipsFilterWidget extends StatefulWidget { 7 | final List filters; 8 | 9 | const ChipsFilterWidget({required this.filters}); 10 | 11 | @override 12 | _ChipsFilterWidgetState createState() => _ChipsFilterWidgetState(); 13 | } 14 | 15 | class _ChipsFilterWidgetState extends State { 16 | List options = []; 17 | List selectedChoices = []; 18 | 19 | @override 20 | void initState() { 21 | super.initState(); 22 | options = widget.filters; 23 | selectedChoices.add(0); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Padding( 29 | padding: const EdgeInsets.only(left: 12.0), 30 | child: Wrap( 31 | alignment: WrapAlignment.start, 32 | spacing: 12, 33 | runSpacing: 12, 34 | children: List.generate( 35 | options.length, 36 | (int index) { 37 | return ChipWidget( 38 | selected: selectedChoices.contains(index), 39 | text: options[index], 40 | onTap: () { 41 | setState(() { 42 | selectedChoices.contains(index) 43 | ? selectedChoices.remove(index) 44 | : selectedChoices.add(index); 45 | }); 46 | }, 47 | ); 48 | ChoiceChip( 49 | disabledColor: white, 50 | selectedColor: pastel_pink, 51 | padding: EdgeInsets.all(12), 52 | avatarBorder: RoundedRectangleBorder( 53 | borderRadius: BorderRadius.circular(16), 54 | side: BorderSide(color: wood_smoke, width: 2)), 55 | label: Text( 56 | options[index], 57 | style: TextStyle( 58 | color: wood_smoke, 59 | fontWeight: FontWeight.w800, 60 | fontSize: 12), 61 | ), 62 | selected: selectedChoices.contains(index), 63 | onSelected: (bool selected) { 64 | setState(() { 65 | selectedChoices.contains(index) 66 | ? selectedChoices.remove(index) 67 | : selectedChoices.add(index); 68 | }); 69 | }, 70 | ); 71 | }, 72 | ).toList(), 73 | ), 74 | ); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /lib/custom_widgets/circle_dot_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class CircleDotWidget extends StatelessWidget { 4 | final bool isActive; 5 | final Color color; 6 | final Color borderColor; 7 | 8 | const CircleDotWidget( 9 | {required this.isActive, required this.color, required this.borderColor}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return AnimatedContainer( 14 | duration: Duration(milliseconds: 150), 15 | margin: EdgeInsets.symmetric(horizontal: 8), 16 | height: isActive ? 14 : 10, 17 | width: isActive ? 14 : 10, 18 | decoration: BoxDecoration( 19 | border: Border.all(width: 2.0, color: borderColor), 20 | color: color, 21 | shape: BoxShape.circle), 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /lib/custom_widgets/color_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class ColorWidget extends StatelessWidget { 4 | final Color borderColor; 5 | final Color shadowColor; 6 | final Color bgColor; 7 | final bool selected; 8 | final VoidCallback onTap; 9 | 10 | const ColorWidget( 11 | {required this.borderColor, 12 | required this.bgColor, 13 | required this.shadowColor, 14 | required this.selected, 15 | required this.onTap}); 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return GestureDetector( 20 | onTap: onTap, 21 | child: Container( 22 | height: 34, 23 | width: 34, 24 | decoration: ShapeDecoration( 25 | shadows: [ 26 | BoxShadow( 27 | color: shadowColor, 28 | offset: Offset( 29 | 0.0, // Move to right 10 horizontally 30 | selected ? 4.0 : 0.0, // Move to bottom 5 Vertically 31 | ), 32 | ) 33 | ], 34 | color: bgColor, 35 | shape: 36 | CircleBorder(side: BorderSide(color: borderColor, width: 2))), 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/custom_widgets/colors_select_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | import 'color_widget.dart'; 6 | 7 | class ColorsSelectWidget extends StatefulWidget { 8 | final List colors; 9 | 10 | const ColorsSelectWidget({required this.colors}); 11 | 12 | @override 13 | _ColorsSelectWidgetState createState() => _ColorsSelectWidgetState(); 14 | } 15 | 16 | class _ColorsSelectWidgetState extends State { 17 | List options = []; 18 | List selectedChoices = []; 19 | 20 | @override 21 | void initState() { 22 | super.initState(); 23 | options = widget.colors; 24 | selectedChoices.add(0); 25 | } 26 | 27 | @override 28 | Widget build(BuildContext context) { 29 | return Padding( 30 | padding: const EdgeInsets.only(right: 16.0, top: 16.0), 31 | child: Wrap( 32 | spacing: 12, 33 | children: List.generate( 34 | options.length, 35 | (int index) { 36 | return ColorWidget( 37 | bgColor: options[index], 38 | borderColor: wood_smoke, 39 | shadowColor: wood_smoke, 40 | selected: selectedChoices.contains(index), 41 | onTap: () { 42 | setState(() { 43 | selectedChoices.contains(index) 44 | ? selectedChoices.remove(index) 45 | : selectedChoices.add(index); 46 | }); 47 | }, 48 | ); 49 | }, 50 | ).toList(), 51 | ), 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/custom_widgets/contra_button_round.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter_svg/svg.dart'; 3 | 4 | class ContraButtonRound extends StatelessWidget { 5 | final Color borderColor; 6 | final Color shadowColor; 7 | final Color color; 8 | final Color? iconColor; 9 | final String iconPath; 10 | final VoidCallback callback; 11 | final double? size; 12 | 13 | const ContraButtonRound( 14 | {required this.borderColor, 15 | required this.shadowColor, 16 | required this.color, 17 | this.iconColor, 18 | required this.iconPath, 19 | this.size, 20 | required this.callback}); 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return GestureDetector( 25 | onTap: callback, 26 | child: Container( 27 | height: size == null ? null : size, 28 | width: size == null ? null : size, 29 | padding: EdgeInsets.all(size != null ? 8 : 16), 30 | decoration: ShapeDecoration( 31 | shadows: [ 32 | BoxShadow( 33 | color: shadowColor, 34 | offset: Offset( 35 | 0.0, // Move to right 10 horizontally 36 | 4.0, // Move to bottom 5 Vertically 37 | ), 38 | ) 39 | ], 40 | color: color, 41 | shape: 42 | CircleBorder(side: BorderSide(color: borderColor, width: 2))), 43 | child: SvgPicture.asset( 44 | iconPath, 45 | ), 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/custom_widgets/contra_input_box.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class ContraInputBox extends StatelessWidget { 7 | final String hintText; 8 | final String iconPath; 9 | final bool showPrefix; 10 | 11 | const ContraInputBox( 12 | {required this.hintText, 13 | required this.iconPath, 14 | required this.showPrefix}); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Container( 19 | child: TextField( 20 | decoration: InputDecoration( 21 | hintText: hintText, 22 | hintStyle: TextStyle( 23 | fontSize: 21, fontWeight: FontWeight.w500, color: wood_smoke), 24 | contentPadding: EdgeInsets.all(16), 25 | enabledBorder: OutlineInputBorder( 26 | borderSide: BorderSide(width: 2, color: black), 27 | borderRadius: BorderRadius.all(Radius.circular(16))), 28 | disabledBorder: OutlineInputBorder( 29 | borderSide: BorderSide(width: 2, color: black), 30 | borderRadius: BorderRadius.all(Radius.circular(16))), 31 | focusedBorder: OutlineInputBorder( 32 | borderSide: BorderSide(width: 2, color: black), 33 | borderRadius: BorderRadius.all(Radius.circular(16))), 34 | border: OutlineInputBorder( 35 | borderSide: BorderSide(width: 2, color: black), 36 | borderRadius: BorderRadius.all(Radius.circular(16))), 37 | prefixIcon: showPrefix 38 | ? Padding( 39 | padding: const EdgeInsets.all(16.0), 40 | child: SvgPicture.asset( 41 | iconPath, 42 | height: 24, 43 | width: 24, 44 | ), 45 | ) 46 | : null), 47 | ), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/custom_widgets/custom_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CustomAppBar extends PreferredSize { 5 | final double height; 6 | final Widget child; 7 | 8 | CustomAppBar({required this.height, required this.child}) 9 | : super(preferredSize: Size.fromHeight(height), child: child); 10 | 11 | @override 12 | Size get preferredSize => Size.fromHeight(height); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Container( 17 | height: preferredSize.height, 18 | alignment: Alignment.bottomCenter, 19 | child: child); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/custom_widgets/custom_input_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class CustomInputText extends StatelessWidget { 6 | final String text; 7 | final Color borderColor; 8 | final Color shadowColor; 9 | final Color color; 10 | final VoidCallback callback; 11 | 12 | const CustomInputText( 13 | {required this.text, 14 | required this.borderColor, 15 | required this.color, 16 | required this.shadowColor, 17 | required this.callback}); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Container( 22 | decoration: ShapeDecoration( 23 | color: color, 24 | shape: RoundedRectangleBorder( 25 | borderRadius: BorderRadius.all(Radius.circular(60)), 26 | side: BorderSide(color: borderColor, width: 2))), 27 | child: Row( 28 | children: [ 29 | Expanded( 30 | child: TextField( 31 | decoration: InputDecoration( 32 | hintText: text, 33 | hintStyle: TextStyle( 34 | fontSize: 17, 35 | fontWeight: FontWeight.w500, 36 | color: santas_gray), 37 | contentPadding: EdgeInsets.all(16), 38 | enabledBorder: OutlineInputBorder( 39 | borderSide: BorderSide.none, 40 | ), 41 | disabledBorder: OutlineInputBorder( 42 | borderSide: BorderSide.none, 43 | ), 44 | focusedBorder: OutlineInputBorder( 45 | borderSide: BorderSide.none, 46 | ), 47 | border: OutlineInputBorder( 48 | borderSide: BorderSide.none, 49 | ), 50 | ), 51 | ), 52 | ), 53 | IconButton( 54 | color: wood_smoke, 55 | icon: Icon(Icons.keyboard_voice), 56 | onPressed: () {}, 57 | ), 58 | IconButton( 59 | color: wood_smoke, 60 | icon: Icon(Icons.send), 61 | onPressed: callback, 62 | ) 63 | ], 64 | ), 65 | ); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /lib/custom_widgets/custom_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class CustomListItem extends StatelessWidget { 5 | final List list; 6 | 7 | const CustomListItem({required this.list}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return ListView.builder( 12 | padding: EdgeInsets.symmetric(vertical: 24), 13 | shrinkWrap: true, 14 | physics: NeverScrollableScrollPhysics(), 15 | reverse: false, 16 | itemCount: list.length, 17 | itemBuilder: (context, index) { 18 | return Container( 19 | padding: EdgeInsets.symmetric(vertical: 8), 20 | child: Row( 21 | children: [ 22 | Icon( 23 | Icons.check, 24 | color: Colors.white, 25 | ), 26 | Text( 27 | list[index], 28 | style: TextStyle(color: Colors.white, fontSize: 21), 29 | ) 30 | ], 31 | ), 32 | ); 33 | }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/custom_widgets/custom_search_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class CustomSearchText extends StatelessWidget { 7 | final String text; 8 | final String iconPath; 9 | final bool enable; 10 | final VoidCallback callback; 11 | final TextEditingController controller; 12 | 13 | const CustomSearchText( 14 | {required this.text, 15 | required this.iconPath, 16 | required this.enable, 17 | required this.callback, 18 | required this.controller}); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Container( 23 | decoration: ShapeDecoration( 24 | shadows: [ 25 | BoxShadow( 26 | color: wood_smoke, 27 | offset: Offset( 28 | 0.0, // Move to right 10 horizontally 29 | 2.0, // Move to bottom 5 Vertically 30 | ), 31 | ) 32 | ], 33 | color: white, 34 | shape: RoundedRectangleBorder( 35 | borderRadius: BorderRadius.all(Radius.circular(16)), 36 | side: BorderSide(color: wood_smoke, width: 2))), 37 | child: TextField( 38 | onTap: callback, 39 | readOnly: !enable, 40 | enableInteractiveSelection: enable, 41 | autofocus: false, 42 | controller: controller, 43 | enableSuggestions: enable, 44 | decoration: InputDecoration( 45 | hintText: text, 46 | hintStyle: TextStyle( 47 | fontSize: 21, fontWeight: FontWeight.w500, color: wood_smoke), 48 | contentPadding: EdgeInsets.all(16), 49 | enabledBorder: OutlineInputBorder( 50 | borderSide: BorderSide.none, 51 | borderRadius: BorderRadius.all(Radius.circular(16))), 52 | disabledBorder: OutlineInputBorder( 53 | borderSide: BorderSide.none, 54 | borderRadius: BorderRadius.all(Radius.circular(16))), 55 | focusedBorder: OutlineInputBorder( 56 | borderSide: BorderSide.none, 57 | borderRadius: BorderRadius.all(Radius.circular(16))), 58 | border: OutlineInputBorder( 59 | borderSide: BorderSide.none, 60 | borderRadius: BorderRadius.all(Radius.circular(16))), 61 | suffixIcon: Padding( 62 | padding: const EdgeInsets.all(16.0), 63 | child: SvgPicture.asset( 64 | iconPath, 65 | height: 24, 66 | width: 24, 67 | ), 68 | )), 69 | ), 70 | ); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /lib/custom_widgets/image_round_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class RoundImageWithText extends StatelessWidget { 5 | final Color borderColor; 6 | final Color shadowColor; 7 | final Color color; 8 | final String text; 9 | final double size; 10 | 11 | const RoundImageWithText({ 12 | required this.borderColor, 13 | required this.shadowColor, 14 | required this.color, 15 | required this.size, 16 | required this.text, 17 | }); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return Container( 22 | width: size, 23 | height: size, 24 | decoration: ShapeDecoration( 25 | color: color, 26 | shape: CircleBorder(side: BorderSide(color: borderColor, width: 2))), 27 | child: Center( 28 | child: Text( 29 | text, 30 | style: 31 | TextStyle(fontSize: 24, fontWeight: FontWeight.w800, color: white), 32 | )), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/custom_widgets/onboarding_page_text_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | 3 | class OnboardingPageTextWidget extends StatelessWidget { 4 | final String title; 5 | final String detail; 6 | final Alignment alignment; 7 | 8 | const OnboardingPageTextWidget( 9 | {required this.title, required this.detail, required this.alignment}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | child: Text(title), 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/custom_widgets/size_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class SizeWidget extends StatelessWidget { 5 | final Color borderColor; 6 | final Color shadowColor; 7 | final bool selected; 8 | final String text; 9 | final VoidCallback onTap; 10 | 11 | const SizeWidget( 12 | {required this.borderColor, 13 | required this.shadowColor, 14 | required this.selected, 15 | required this.text, 16 | required this.onTap}); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return GestureDetector( 21 | onTap: onTap, 22 | child: Container( 23 | height: 48, 24 | width: 48, 25 | decoration: ShapeDecoration( 26 | shadows: [ 27 | BoxShadow( 28 | color: shadowColor, 29 | offset: Offset( 30 | 0.0, // Move to right 10 horizontally 31 | selected ? 4.0 : 0.0, // Move to bottom 5 Vertically 32 | ), 33 | ) 34 | ], 35 | color: selected ? lightening_yellow : white, 36 | shape: RoundedRectangleBorder( 37 | borderRadius: BorderRadius.all(Radius.circular(16)), 38 | side: BorderSide(color: borderColor, width: 2))), 39 | child: Center( 40 | child: Text( 41 | text, 42 | textAlign: TextAlign.center, 43 | style: TextStyle( 44 | fontWeight: FontWeight.w800, fontSize: 24, color: wood_smoke), 45 | ), 46 | ), 47 | ), 48 | ); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /lib/custom_widgets/sizes_select_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/size_widget.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class SizesSelectWidget extends StatefulWidget { 7 | final List filters; 8 | 9 | const SizesSelectWidget({required this.filters}); 10 | 11 | @override 12 | _SizesSelectWidgetState createState() => _SizesSelectWidgetState(); 13 | } 14 | 15 | class _SizesSelectWidgetState extends State { 16 | List options = []; 17 | List selectedChoices = []; 18 | 19 | @override 20 | void initState() { 21 | super.initState(); 22 | options = widget.filters; 23 | selectedChoices.add(0); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Padding( 29 | padding: const EdgeInsets.only(top: 8.0), 30 | child: Wrap( 31 | spacing: 12, 32 | children: List.generate( 33 | options.length, 34 | (int index) { 35 | return SizeWidget( 36 | borderColor: wood_smoke, 37 | shadowColor: wood_smoke, 38 | text: options[index], 39 | selected: selectedChoices.contains(index), 40 | onTap: () { 41 | setState(() { 42 | selectedChoices.contains(index) 43 | ? selectedChoices.remove(index) 44 | : selectedChoices.add(index); 45 | }); 46 | }, 47 | ); 48 | }, 49 | ).toList(), 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/custom_widgets/star_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/shopping/category_item.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class StartWidget extends StatelessWidget { 7 | final Category category; 8 | 9 | const StartWidget({required this.category}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | padding: EdgeInsets.all(12), 15 | child: Column( 16 | children: [ 17 | Container( 18 | height: 80, 19 | width: 80, 20 | decoration: ShapeDecoration( 21 | shadows: [ 22 | BoxShadow( 23 | color: wood_smoke, 24 | offset: Offset( 25 | 0.0, // Move to right 10 horizontally 26 | 2.0, // Move to bottom 5 Vertically 27 | ), 28 | ) 29 | ], 30 | color: category.bgColor, 31 | shape: RoundedRectangleBorder( 32 | borderRadius: BorderRadius.all(Radius.circular(16)), 33 | side: BorderSide(color: wood_smoke, width: 2))), 34 | child: Icon( 35 | Icons.star_border, 36 | size: 32, 37 | color: category.startColor, 38 | ), 39 | ), 40 | SizedBox( 41 | height: 8, 42 | ), 43 | Text( 44 | category.name, 45 | style: TextStyle(fontWeight: FontWeight.w800, fontSize: 17), 46 | ) 47 | ], 48 | ), 49 | ); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /lib/login/contra_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class ContraText extends StatelessWidget { 5 | final Alignment alignment; 6 | final String text; 7 | final double? size; 8 | final Color? color; 9 | final FontWeight? weight; 10 | final TextAlign? textAlign; 11 | 12 | const ContraText( 13 | {required this.alignment, 14 | required this.text, 15 | this.size, 16 | this.color, 17 | this.weight, 18 | this.textAlign}); 19 | 20 | @override 21 | Widget build(BuildContext context) { 22 | return Align( 23 | alignment: alignment, 24 | child: Text( 25 | text, 26 | textAlign: textAlign != null ? textAlign : TextAlign.start, 27 | style: TextStyle( 28 | fontSize: size == null ? 36 : size, 29 | fontWeight: weight != null ? weight : FontWeight.w800, 30 | color: color != null ? color : black), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/login/input_text_box_bigger.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class InputTextBoxBigger extends StatelessWidget { 7 | final String text; 8 | final String iconPath; 9 | 10 | const InputTextBoxBigger({required this.text,required this.iconPath}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | height: 150, 16 | alignment: Alignment.center, 17 | child: TextField( 18 | keyboardType: TextInputType.multiline, 19 | maxLines: 4, 20 | textAlign: TextAlign.start, 21 | textAlignVertical: TextAlignVertical.top, 22 | decoration: InputDecoration( 23 | hintText: text, 24 | hintStyle: TextStyle( 25 | fontSize: 21, fontWeight: FontWeight.w500, color: wood_smoke), 26 | contentPadding: EdgeInsets.all(16), 27 | enabledBorder: OutlineInputBorder( 28 | borderSide: BorderSide(width: 2, color: black), 29 | borderRadius: BorderRadius.all(Radius.circular(16))), 30 | disabledBorder: OutlineInputBorder( 31 | borderSide: BorderSide(width: 2, color: black), 32 | borderRadius: BorderRadius.all(Radius.circular(16))), 33 | focusedBorder: OutlineInputBorder( 34 | borderSide: BorderSide(width: 2, color: black), 35 | borderRadius: BorderRadius.all(Radius.circular(16))), 36 | border: OutlineInputBorder( 37 | borderSide: BorderSide(width: 2, color: black), 38 | borderRadius: BorderRadius.all(Radius.circular(16))), 39 | prefixIcon: Container( 40 | height: 128, 41 | width: 48, 42 | alignment: Alignment.topLeft, 43 | margin: EdgeInsets.all(4), 44 | child: Padding( 45 | padding: const EdgeInsets.only(left: 12.0, top: 16.0), 46 | child: SvgPicture.asset( 47 | iconPath, 48 | height: 24, 49 | width: 24, 50 | ), 51 | ), 52 | )), 53 | ), 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/login/login_input_email_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class LoginEmailText extends StatelessWidget { 7 | final String text; 8 | final String iconPath; 9 | 10 | const LoginEmailText({required this.text,required this.iconPath}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | child: TextField( 16 | decoration: InputDecoration( 17 | hintText: text, 18 | hintStyle: TextStyle( 19 | fontSize: 21, fontWeight: FontWeight.w500, color: wood_smoke), 20 | contentPadding: EdgeInsets.all(16), 21 | enabledBorder: OutlineInputBorder( 22 | borderSide: BorderSide(width: 2, color: black), 23 | borderRadius: BorderRadius.all(Radius.circular(16))), 24 | disabledBorder: OutlineInputBorder( 25 | borderSide: BorderSide(width: 2, color: black), 26 | borderRadius: BorderRadius.all(Radius.circular(16))), 27 | focusedBorder: OutlineInputBorder( 28 | borderSide: BorderSide(width: 2, color: black), 29 | borderRadius: BorderRadius.all(Radius.circular(16))), 30 | border: OutlineInputBorder( 31 | borderSide: BorderSide(width: 2, color: black), 32 | borderRadius: BorderRadius.all(Radius.circular(16))), 33 | prefixIcon: Padding( 34 | padding: const EdgeInsets.all(16.0), 35 | child: SvgPicture.asset( 36 | iconPath, 37 | height: 24, 38 | width: 24, 39 | ), 40 | )), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/login/login_input_password_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/svg.dart'; 5 | 6 | class LoginPasswordText extends StatelessWidget { 7 | final String text; 8 | final String iconPath; 9 | 10 | const LoginPasswordText({required this.text, required this.iconPath}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | child: TextField( 16 | obscureText: true, 17 | decoration: InputDecoration( 18 | hintText: '\u25CF \u25CF \u25CF \u25CF \u25CF \u25CF', 19 | hintStyle: TextStyle( 20 | fontSize: 18, 21 | fontWeight: FontWeight.bold, 22 | color: wood_smoke, 23 | ), 24 | contentPadding: EdgeInsets.all(16), 25 | enabledBorder: OutlineInputBorder( 26 | borderSide: BorderSide(width: 2, color: black), 27 | borderRadius: BorderRadius.all(Radius.circular(16))), 28 | disabledBorder: OutlineInputBorder( 29 | borderSide: BorderSide(width: 2, color: black), 30 | borderRadius: BorderRadius.all(Radius.circular(16))), 31 | focusedBorder: OutlineInputBorder( 32 | borderSide: BorderSide(width: 2, color: black), 33 | borderRadius: BorderRadius.all(Radius.circular(16))), 34 | border: OutlineInputBorder( 35 | borderSide: BorderSide(width: 2, color: black), 36 | borderRadius: BorderRadius.all(Radius.circular(16))), 37 | prefixIcon: Padding( 38 | padding: const EdgeInsets.all(16.0), 39 | child: SvgPicture.asset( 40 | iconPath, 41 | height: 24, 42 | width: 24, 43 | ), 44 | )), 45 | ), 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /lib/login/rich_text.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class CustomRichText extends StatelessWidget { 5 | final Alignment alignment; 6 | final String text_one; 7 | final String text_second; 8 | 9 | const CustomRichText( 10 | {required this.alignment, 11 | required this.text_one, 12 | required this.text_second}); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Align( 17 | alignment: alignment, 18 | child: RichText( 19 | text: TextSpan(children: [ 20 | TextSpan( 21 | text: text_one, 22 | style: TextStyle( 23 | fontWeight: FontWeight.w500, 24 | fontSize: 13, 25 | color: black, 26 | )), 27 | TextSpan( 28 | text: text_second, 29 | style: TextStyle( 30 | fontSize: 13, fontWeight: FontWeight.w500, color: flamingo)) 31 | ]), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/maps/location.dart: -------------------------------------------------------------------------------- 1 | class Location { 2 | String name; 3 | String address; 4 | String distance; 5 | 6 | Location({required this.name, required this.address, required this.distance}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/maps/location_list_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/button_round_with_shadow.dart'; 2 | import 'package:contraflutterkit/login/contra_text.dart'; 3 | import 'package:contraflutterkit/maps/location.dart'; 4 | import 'package:contraflutterkit/maps/map_widget.dart'; 5 | import 'package:contraflutterkit/utils/colors.dart'; 6 | import 'package:flutter/cupertino.dart'; 7 | import 'package:flutter/material.dart'; 8 | 9 | class LocationListItem extends StatelessWidget { 10 | Location location; 11 | 12 | LocationListItem({required this.location}); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Container( 17 | padding: EdgeInsets.symmetric(vertical: 12), 18 | child: Column( 19 | children: [ 20 | Container( 21 | width: MediaQuery.of(context).size.width, 22 | height: 160, 23 | child: MapWidget( 24 | distance: location.distance, 25 | isDetail: false, 26 | ), 27 | ), 28 | SizedBox( 29 | height: 24, 30 | ), 31 | Row( 32 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 33 | children: [ 34 | Column( 35 | crossAxisAlignment: CrossAxisAlignment.start, 36 | children: [ 37 | ContraText( 38 | color: wood_smoke, 39 | size: 24, 40 | weight: FontWeight.w800, 41 | alignment: Alignment.center, 42 | text: "Space 8", 43 | ), 44 | ContraText( 45 | color: trout, 46 | size: 21, 47 | weight: FontWeight.w500, 48 | alignment: Alignment.center, 49 | text: "Wolf Crater, 897, Marsh", 50 | ) 51 | ], 52 | ), 53 | ButtonRoundWithShadow( 54 | size: 60, 55 | borderColor: wood_smoke, 56 | shadowColor: wood_smoke, 57 | callback: () {}, 58 | color: white, 59 | iconPath: "assets/icons/ic_navigation.svg", 60 | ) 61 | ], 62 | ) 63 | ], 64 | ), 65 | ); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /lib/maps/location_listing.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:contraflutterkit/custom_widgets/button_round_with_shadow.dart'; 4 | import 'package:contraflutterkit/custom_widgets/custom_app_bar.dart'; 5 | import 'package:contraflutterkit/custom_widgets/custom_header.dart'; 6 | import 'package:contraflutterkit/maps/location_list_item.dart'; 7 | import 'package:contraflutterkit/utils/colors.dart'; 8 | import 'package:flutter/cupertino.dart'; 9 | import 'package:flutter/foundation.dart'; 10 | import 'package:flutter/material.dart'; 11 | 12 | import 'location.dart'; 13 | 14 | class LocationListingPage extends StatefulWidget { 15 | @override 16 | _LocationListingPageState createState() => _LocationListingPageState(); 17 | } 18 | 19 | class _LocationListingPageState extends State { 20 | List list = []; 21 | 22 | @override 23 | void initState() { 24 | super.initState(); 25 | list.add(Location( 26 | address: "Wolf Crater, 897, Marsh", name: "Space 8", distance: "1.5")); 27 | list.add(Location( 28 | address: "Wolf Crater, 897, Marsh", name: "Space 8", distance: "2.0")); 29 | list.add(Location( 30 | address: "Wolf Crater, 897, Marsh", name: "Space 8", distance: "2.5")); 31 | } 32 | 33 | @override 34 | Widget build(BuildContext context) { 35 | return Scaffold( 36 | appBar: CustomAppBar( 37 | height: 200, 38 | child: Row( 39 | children: [ 40 | kIsWeb || Platform.isIOS 41 | ? SizedBox( 42 | width: 24, 43 | ) 44 | : SizedBox( 45 | width: 24, 46 | ), 47 | kIsWeb || Platform.isIOS 48 | ? ButtonRoundWithShadow( 49 | size: 48, 50 | borderColor: wood_smoke, 51 | color: white, 52 | callback: () { 53 | Navigator.pop(context); 54 | }, 55 | shadowColor: wood_smoke, 56 | iconPath: "assets/icons/close.svg") 57 | : SizedBox(), 58 | CustomHeader( 59 | fg_color: wood_smoke, 60 | isTwoLines: kIsWeb ? false : true, 61 | bg_color: white, 62 | color: wood_smoke, 63 | lineOneText: "Your", 64 | lineTwotext: "Directions", 65 | ), 66 | ], 67 | ), 68 | ), 69 | body: ListView.builder( 70 | padding: EdgeInsets.symmetric(horizontal: 24), 71 | itemBuilder: (BuildContext cotext, int index) { 72 | return LocationListItem( 73 | location: list[index], 74 | ); 75 | }, 76 | itemCount: list.length, 77 | ), 78 | ); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lib/maps/map_main_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LocationMapMainPage extends StatefulWidget { 4 | @override 5 | _LocationMapMainPageState createState() => _LocationMapMainPageState(); 6 | } 7 | 8 | class _LocationMapMainPageState extends State { 9 | @override 10 | void initState() { 11 | super.initState(); 12 | } 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text("Map and Location"), 19 | ), 20 | body: SingleChildScrollView( 21 | child: Column( 22 | children: [ 23 | ListTile( 24 | contentPadding: EdgeInsets.all(20), 25 | trailing: Icon(Icons.navigate_next), 26 | title: Text("Locations Listing"), 27 | onTap: () { 28 | Navigator.pushNamed(context, "/location_list_page"); 29 | }, 30 | ), 31 | ListTile( 32 | contentPadding: EdgeInsets.all(20), 33 | trailing: Icon(Icons.navigate_next), 34 | title: Text("Location Detail Page"), 35 | onTap: () { 36 | Navigator.pushNamed(context, "/location_detail_page"); 37 | }, 38 | ), 39 | ], 40 | ), 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/maps/map_widget.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:contraflutterkit/login/contra_text.dart'; 4 | import 'package:contraflutterkit/utils/colors.dart'; 5 | import 'package:flutter/cupertino.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:google_maps_flutter/google_maps_flutter.dart'; 8 | 9 | class MapWidget extends StatefulWidget { 10 | String distance; 11 | bool isDetail; 12 | 13 | MapWidget({required this.distance, required this.isDetail}); 14 | 15 | @override 16 | _MapWidgetState createState() => _MapWidgetState(); 17 | } 18 | 19 | class _MapWidgetState extends State { 20 | Completer _controller = Completer(); 21 | static const LatLng _center = const LatLng(45.521563, -122.677433); 22 | 23 | void _onMapCreated(GoogleMapController controller) { 24 | _controller.complete(controller); 25 | } 26 | 27 | @override 28 | void initState() { 29 | super.initState(); 30 | } 31 | 32 | @override 33 | Widget build(BuildContext context) { 34 | return Container( 35 | decoration: ShapeDecoration( 36 | shadows: [ 37 | BoxShadow( 38 | color: wood_smoke, 39 | offset: Offset(0, 2), 40 | ) 41 | ], 42 | color: white, 43 | shape: RoundedRectangleBorder( 44 | borderRadius: BorderRadius.all(Radius.circular(16)), 45 | side: BorderSide( 46 | color: wood_smoke, 47 | width: 2, 48 | ))), 49 | child: Stack( 50 | children: [ 51 | Container( 52 | padding: EdgeInsets.all(4), 53 | child: GoogleMap( 54 | onMapCreated: _onMapCreated, 55 | initialCameraPosition: CameraPosition( 56 | target: _center, 57 | zoom: 11.0, 58 | ), 59 | ), 60 | ), 61 | Positioned( 62 | right: 24, 63 | bottom: 24, 64 | child: Container( 65 | width: 64, 66 | padding: EdgeInsets.all(4), 67 | height: 64, 68 | decoration: BoxDecoration( 69 | color: wood_smoke, 70 | borderRadius: BorderRadius.all(Radius.circular(16))), 71 | child: Column( 72 | children: [ 73 | ContraText( 74 | alignment: Alignment.center, 75 | text: "1.5", 76 | size: 22, 77 | color: white, 78 | weight: FontWeight.bold, 79 | ), 80 | ContraText( 81 | alignment: Alignment.center, 82 | text: "Kms", 83 | size: 15, 84 | color: white, 85 | weight: FontWeight.bold, 86 | ) 87 | ], 88 | ), 89 | ), 90 | ) 91 | ], 92 | ), 93 | ); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /lib/menu/menu_settings_main_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MenuSettingsMainPage extends StatefulWidget { 4 | @override 5 | _MenuSettingsMainPageState createState() => _MenuSettingsMainPageState(); 6 | } 7 | 8 | class _MenuSettingsMainPageState extends State { 9 | @override 10 | void initState() { 11 | super.initState(); 12 | } 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Scaffold( 17 | appBar: AppBar( 18 | title: Text("Menu and Settings"), 19 | ), 20 | body: SingleChildScrollView( 21 | child: Column( 22 | children: [ 23 | ListTile( 24 | contentPadding: EdgeInsets.all(20), 25 | trailing: Icon(Icons.navigate_next), 26 | title: Text("Menu Type One"), 27 | onTap: () { 28 | Navigator.pushNamed(context, "/menu_type_one"); 29 | }, 30 | ), 31 | ListTile( 32 | contentPadding: EdgeInsets.all(20), 33 | trailing: Icon(Icons.navigate_next), 34 | title: Text("Menu Type Two"), 35 | onTap: () { 36 | Navigator.pushNamed(context, "/menu_type_two"); 37 | }, 38 | ), 39 | ListTile( 40 | contentPadding: EdgeInsets.all(20), 41 | trailing: Icon(Icons.navigate_next), 42 | title: Text("Settings Type One"), 43 | onTap: () { 44 | Navigator.pushNamed(context, "/settings_type_one"); 45 | }, 46 | ), 47 | ListTile( 48 | contentPadding: EdgeInsets.all(20), 49 | trailing: Icon(Icons.navigate_next), 50 | title: Text("Settings Type Two"), 51 | onTap: () { 52 | Navigator.pushNamed(context, "/settings_type_two"); 53 | }, 54 | ), 55 | ListTile( 56 | contentPadding: EdgeInsets.all(20), 57 | trailing: Icon(Icons.navigate_next), 58 | title: Text("Settings Type Three"), 59 | onTap: () { 60 | Navigator.pushNamed(context, "/settings_type_three"); 61 | }, 62 | ), 63 | ], 64 | ), 65 | ), 66 | ); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/menu/settings.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class Settings { 4 | String title; 5 | String text; 6 | bool enable; 7 | Color bgColor; 8 | Color textColor; 9 | 10 | Settings( 11 | {required this.title, 12 | required this.text, 13 | required this.enable, 14 | required this.bgColor, 15 | required this.textColor}); 16 | } 17 | 18 | class SettingsCardDetail { 19 | String title; 20 | Color bgColor; 21 | Color borderColor; 22 | List items; 23 | 24 | SettingsCardDetail( 25 | {required this.title, 26 | required this.bgColor, 27 | required this.borderColor, 28 | required this.items}); 29 | } 30 | 31 | class SettingsCardItemDetail { 32 | String title; 33 | Color textColor; 34 | Color color; 35 | 36 | SettingsCardItemDetail( 37 | {required this.title, required this.color, required this.textColor}); 38 | } 39 | 40 | class SettingsItem { 41 | String title; 42 | String description; 43 | bool enable; 44 | 45 | SettingsItem( 46 | {required this.title, required this.description, required this.enable}); 47 | } 48 | -------------------------------------------------------------------------------- /lib/menu/settings_card_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/menu/settings.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class SettingsCardItem extends StatefulWidget { 8 | Settings setting; 9 | 10 | SettingsCardItem({required this.setting}); 11 | 12 | @override 13 | _SettingsCardItemState createState() => _SettingsCardItemState(); 14 | } 15 | 16 | class _SettingsCardItemState extends State { 17 | late String title; 18 | 19 | late String text; 20 | 21 | late bool enable; 22 | 23 | late Color bgColor; 24 | 25 | late Color textColor; 26 | bool isChanged = false; 27 | 28 | void onChanged(bool value) { 29 | setState(() { 30 | isChanged = value; 31 | }); 32 | } 33 | 34 | @override 35 | void initState() { 36 | super.initState(); 37 | isChanged = widget.setting.enable; 38 | title = widget.setting.title; 39 | text = widget.setting.text; 40 | enable = widget.setting.enable; 41 | bgColor = widget.setting.bgColor; 42 | textColor = widget.setting.textColor; 43 | } 44 | 45 | @override 46 | Widget build(BuildContext context) { 47 | return Container( 48 | padding: EdgeInsets.all(24), 49 | decoration: ShapeDecoration( 50 | color: bgColor, 51 | shape: RoundedRectangleBorder( 52 | side: BorderSide(color: wood_smoke, width: 2), 53 | borderRadius: BorderRadius.all(Radius.circular(16)))), 54 | child: Column( 55 | crossAxisAlignment: CrossAxisAlignment.start, 56 | children: [ 57 | ContraText( 58 | size: 27, 59 | color: textColor, 60 | alignment: Alignment.centerLeft, 61 | text: title, 62 | weight: FontWeight.w800, 63 | textAlign: TextAlign.left, 64 | ), 65 | SizedBox( 66 | height: 8, 67 | ), 68 | ContraText( 69 | size: 15, 70 | color: textColor, 71 | alignment: Alignment.centerLeft, 72 | text: text, 73 | weight: FontWeight.bold, 74 | textAlign: TextAlign.left, 75 | ), 76 | SizedBox( 77 | height: 8, 78 | ), 79 | Switch( 80 | value: isChanged, 81 | onChanged: onChanged, 82 | activeTrackColor: lightening_yellow, 83 | inactiveTrackColor: santas_gray, 84 | inactiveThumbColor: white, 85 | ) 86 | ], 87 | ), 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /lib/menu/settings_item_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/menu/settings.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class SettingsItemWidget extends StatefulWidget { 8 | SettingsItem settingsItem; 9 | 10 | SettingsItemWidget({required this.settingsItem}); 11 | 12 | @override 13 | _SettingsItemWidgetState createState() => _SettingsItemWidgetState(); 14 | } 15 | 16 | class _SettingsItemWidgetState extends State { 17 | late String title; 18 | late String description; 19 | 20 | late bool enable; 21 | bool isChanged = false; 22 | 23 | void onChanged(bool value) { 24 | setState(() { 25 | isChanged = value; 26 | }); 27 | } 28 | 29 | @override 30 | void initState() { 31 | super.initState(); 32 | isChanged = widget.settingsItem.enable; 33 | title = widget.settingsItem.title; 34 | description = widget.settingsItem.description; 35 | } 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | return Container( 40 | padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), 41 | child: Row( 42 | crossAxisAlignment: CrossAxisAlignment.center, 43 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 44 | children: [ 45 | Expanded( 46 | flex: 1, 47 | child: Column( 48 | mainAxisSize: MainAxisSize.min, 49 | crossAxisAlignment: CrossAxisAlignment.start, 50 | children: [ 51 | ContraText( 52 | text: title, 53 | color: wood_smoke, 54 | alignment: Alignment.centerLeft, 55 | size: 21, 56 | weight: FontWeight.w800, 57 | textAlign: TextAlign.center, 58 | ), 59 | SizedBox( 60 | height: 4, 61 | ), 62 | description.isNotEmpty 63 | ? Text( 64 | description, 65 | style: TextStyle( 66 | color: trout, 67 | fontSize: 15, 68 | fontWeight: FontWeight.bold), 69 | ) 70 | : SizedBox( 71 | height: 0, 72 | ), 73 | ], 74 | ), 75 | ), 76 | Switch( 77 | value: isChanged, 78 | onChanged: onChanged, 79 | activeTrackColor: lightening_yellow, 80 | inactiveTrackColor: santas_gray, 81 | inactiveThumbColor: white, 82 | ) 83 | ], 84 | ), 85 | ); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /lib/menu/settings_list_card_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/menu/settings.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class SettingsListCardItem extends StatelessWidget { 7 | SettingsCardDetail detail; 8 | 9 | SettingsListCardItem({required this.detail}); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | margin: EdgeInsets.all(24), 15 | child: Column( 16 | children: [ 17 | ContraText( 18 | color: trout, 19 | text: detail.title, 20 | textAlign: TextAlign.left, 21 | weight: FontWeight.bold, 22 | size: 21, 23 | alignment: Alignment.centerLeft, 24 | ), 25 | SizedBox( 26 | height: 16, 27 | ), 28 | Container( 29 | padding: EdgeInsets.symmetric(vertical: 16), 30 | height: 220, 31 | decoration: ShapeDecoration( 32 | color: detail.bgColor, 33 | shadows: [BoxShadow(offset: Offset(0, 4))], 34 | shape: RoundedRectangleBorder( 35 | side: BorderSide(color: detail.borderColor, width: 2), 36 | borderRadius: BorderRadius.all(Radius.circular(16)))), 37 | child: ListView.builder( 38 | itemBuilder: (BuildContext context, int index) { 39 | return Container( 40 | padding: EdgeInsets.symmetric(vertical: 16), 41 | child: Row( 42 | children: [ 43 | Expanded( 44 | child: Container( 45 | decoration: ShapeDecoration( 46 | shape: CircleBorder(), color: lightening_yellow), 47 | width: 24, 48 | height: 24, 49 | ), 50 | flex: 1, 51 | ), 52 | Expanded( 53 | child: ContraText( 54 | text: detail.items[index].title, 55 | textAlign: TextAlign.left, 56 | weight: FontWeight.w800, 57 | size: 17, 58 | alignment: Alignment.centerLeft, 59 | color: wood_smoke, 60 | ), 61 | flex: 2, 62 | ), 63 | Expanded( 64 | child: Icon( 65 | Icons.arrow_forward_ios, 66 | color: wood_smoke, 67 | ), 68 | flex: 1, 69 | ) 70 | ], 71 | ), 72 | ); 73 | }, 74 | itemCount: detail.items.length, 75 | ), 76 | ) 77 | ], 78 | ), 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /lib/onboarding/onboard_data.dart: -------------------------------------------------------------------------------- 1 | class OnboardData { 2 | final String placeHolder; 3 | final String title; 4 | final String description; 5 | 6 | const OnboardData( 7 | {required this.placeHolder, 8 | required this.title, 9 | required this.description}); 10 | } 11 | -------------------------------------------------------------------------------- /lib/onboarding/onboard_main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class OnboardPageMain extends StatefulWidget { 5 | @override 6 | _OnboardPageMainState createState() => _OnboardPageMainState(); 7 | } 8 | 9 | class _OnboardPageMainState extends State { 10 | @override 11 | void initState() { 12 | super.initState(); 13 | } 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Scaffold( 18 | appBar: AppBar( 19 | title: Text("Onboarding"), 20 | ), 21 | body: SingleChildScrollView( 22 | child: Column( 23 | children: [ 24 | ListTile( 25 | contentPadding: EdgeInsets.all(20), 26 | trailing: Icon(Icons.navigate_next), 27 | title: Text("Type One"), 28 | onTap: () { 29 | Navigator.pushNamed(context, "/onboard_type_one"); 30 | }, 31 | ), 32 | ListTile( 33 | contentPadding: EdgeInsets.all(20), 34 | trailing: Icon(Icons.navigate_next), 35 | title: Text("Type Two"), 36 | onTap: () { 37 | Navigator.pushNamed(context, "/onboard_type_two"); 38 | }, 39 | ), 40 | ListTile( 41 | contentPadding: EdgeInsets.all(20), 42 | trailing: Icon(Icons.navigate_next), 43 | title: Text("Type Three"), 44 | onTap: () { 45 | Navigator.pushNamed(context, "/onboard_type_three"); 46 | }, 47 | ), 48 | Container( 49 | child: ListTile( 50 | contentPadding: EdgeInsets.all(20), 51 | trailing: Icon(Icons.navigate_next), 52 | title: Text("Type Four"), 53 | onTap: () { 54 | Navigator.pushNamed(context, "/onboard_type_four"); 55 | }, 56 | ), 57 | ), 58 | ], 59 | ), 60 | ), 61 | ); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/onboarding/type1/onboard_page_one.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/flutter_svg.dart'; 5 | import '../onboard_data.dart'; 6 | 7 | class OnboardPageTypeOne extends StatelessWidget { 8 | final OnboardData data; 9 | 10 | const OnboardPageTypeOne({required this.data}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Material( 15 | child: Container( 16 | color: white, 17 | child: Column( 18 | children: [ 19 | Expanded( 20 | flex: 4, 21 | child: Container( 22 | child: Column( 23 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 24 | children: [ 25 | SizedBox( 26 | height: 30, 27 | ), 28 | Center( 29 | child: SvgPicture.asset( 30 | data.placeHolder, 31 | height: 320, 32 | width: 320, 33 | ), 34 | ), 35 | ], 36 | ), 37 | ), 38 | ), 39 | Expanded( 40 | flex: 2, 41 | child: Column( 42 | crossAxisAlignment: CrossAxisAlignment.center, 43 | children: [ 44 | Padding( 45 | padding: const EdgeInsets.only( 46 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 47 | child: Text( 48 | data.title, 49 | textAlign: TextAlign.center, 50 | style: TextStyle( 51 | fontSize: 36, 52 | color: wood_smoke, 53 | fontWeight: FontWeight.w800), 54 | ), 55 | ), 56 | Padding( 57 | padding: const EdgeInsets.only( 58 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 59 | child: Text( 60 | data.description, 61 | textAlign: TextAlign.center, 62 | style: TextStyle( 63 | fontSize: 21, 64 | color: trout, 65 | fontWeight: FontWeight.w500), 66 | ), 67 | ), 68 | ], 69 | ), 70 | ), 71 | Expanded( 72 | flex: 1, 73 | child: Container(), 74 | ) 75 | ], 76 | ), 77 | ), 78 | ); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /lib/onboarding/type2/onboard_page_two.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/onboarding/onboard_data.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_svg/flutter_svg.dart'; 6 | 7 | class OnboardPageTypeTwo extends StatelessWidget { 8 | final OnboardData data; 9 | 10 | const OnboardPageTypeTwo({required this.data}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Material( 15 | child: Container( 16 | color: white, 17 | child: Column( 18 | children: [ 19 | Expanded( 20 | flex: 4, 21 | child: Container( 22 | child: Column( 23 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 24 | children: [ 25 | SizedBox( 26 | height: 40, 27 | ), 28 | Center( 29 | child: SvgPicture.asset( 30 | data.placeHolder, 31 | height: 370, 32 | width: 310, 33 | ), 34 | ), 35 | ], 36 | ), 37 | ), 38 | ), 39 | Expanded( 40 | flex: 2, 41 | child: Column( 42 | crossAxisAlignment: CrossAxisAlignment.start, 43 | children: [ 44 | Padding( 45 | padding: const EdgeInsets.only( 46 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 47 | child: Text( 48 | data.title, 49 | textAlign: TextAlign.start, 50 | style: TextStyle( 51 | fontSize: 36, 52 | color: wood_smoke, 53 | fontWeight: FontWeight.w800), 54 | ), 55 | ), 56 | Padding( 57 | padding: const EdgeInsets.only( 58 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 59 | child: Text( 60 | data.description, 61 | textAlign: TextAlign.start, 62 | style: TextStyle( 63 | fontSize: 21, 64 | color: trout, 65 | fontWeight: FontWeight.w500), 66 | ), 67 | ), 68 | ], 69 | ), 70 | ), 71 | ], 72 | ), 73 | ), 74 | ); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /lib/onboarding/type3/onboard_page_three.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/utils/colors.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/flutter_svg.dart'; 5 | 6 | import '../onboard_data.dart'; 7 | 8 | class OnboardPageTypeThree extends StatelessWidget { 9 | final OnboardData data; 10 | 11 | const OnboardPageTypeThree({required this.data}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Material( 16 | child: Container( 17 | color: flamingo, 18 | child: Column( 19 | children: [ 20 | Expanded( 21 | flex: 4, 22 | child: Container( 23 | child: Column( 24 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 25 | children: [ 26 | SizedBox( 27 | height: 40, 28 | ), 29 | Center( 30 | child: SvgPicture.asset( 31 | data.placeHolder, 32 | height: 340, 33 | width: 310, 34 | ), 35 | ), 36 | ], 37 | ), 38 | ), 39 | ), 40 | Expanded( 41 | flex: 2, 42 | child: Column( 43 | crossAxisAlignment: CrossAxisAlignment.center, 44 | children: [ 45 | Padding( 46 | padding: const EdgeInsets.only( 47 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 48 | child: Text( 49 | data.title, 50 | textAlign: TextAlign.center, 51 | style: TextStyle( 52 | fontSize: 36, 53 | color: athens_gray, 54 | fontWeight: FontWeight.w800), 55 | ), 56 | ), 57 | Padding( 58 | padding: const EdgeInsets.only( 59 | left: 24.0, right: 24.0, top: 12.0, bottom: 12.0), 60 | child: Text( 61 | data.description, 62 | textAlign: TextAlign.center, 63 | style: TextStyle( 64 | fontSize: 21, 65 | color: athens_gray, 66 | fontWeight: FontWeight.w500), 67 | ), 68 | ), 69 | ], 70 | ), 71 | ), 72 | Expanded( 73 | flex: 1, 74 | child: Container(), 75 | ) 76 | ], 77 | ), 78 | ), 79 | ); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /lib/onboarding/welcome_screen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/foundation.dart'; 6 | import 'package:flutter/material.dart'; 7 | import 'package:flutter_svg/flutter_svg.dart'; 8 | 9 | class WelcomeScreenPage extends StatelessWidget { 10 | @override 11 | Widget build(BuildContext context) { 12 | return Material( 13 | child: Container( 14 | color: persian_blue, 15 | child: Column( 16 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 17 | children: [ 18 | kIsWeb || Platform.isIOS 19 | ? AppBar( 20 | backgroundColor: persian_blue, 21 | elevation: 0, 22 | ) 23 | : SizedBox(), 24 | Column( 25 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 26 | children: [ 27 | Container( 28 | child: Center( 29 | child: SvgPicture.asset( 30 | "assets/icons/logo_mark.svg", 31 | width: 150, 32 | height: 150, 33 | ), 34 | ), 35 | ), 36 | SizedBox( 37 | height: 40, 38 | ), 39 | Text( 40 | "Welcome To Contra Flutter Kit", 41 | textAlign: TextAlign.center, 42 | style: TextStyle( 43 | fontSize: 36, color: selago, fontWeight: FontWeight.w800), 44 | ), 45 | ], 46 | ), 47 | Column( 48 | mainAxisAlignment: MainAxisAlignment.start, 49 | children: [ 50 | Padding( 51 | padding: const EdgeInsets.all(8.0), 52 | child: Text( 53 | "coded by", 54 | style: TextStyle(fontSize: 18, color: selago), 55 | ), 56 | ), 57 | RichText( 58 | text: TextSpan(children: [ 59 | TextSpan( 60 | text: "@nathansdev", 61 | style: TextStyle( 62 | fontSize: 16, 63 | decoration: TextDecoration.underline, 64 | )) 65 | ]), 66 | ), 67 | ], 68 | ), 69 | SizedBox( 70 | height: 40, 71 | ), 72 | ], 73 | ), 74 | ), 75 | ); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/payment/payment_card_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/login/contra_text.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class PaymentCartItem extends StatelessWidget { 7 | final Color bgColor; 8 | final String price; 9 | final String type; 10 | 11 | const PaymentCartItem( 12 | {required this.bgColor, required this.price, required this.type}); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | return Container( 17 | margin: EdgeInsets.symmetric(horizontal: 24, vertical: 12), 18 | padding: EdgeInsets.all(24), 19 | decoration: ShapeDecoration( 20 | color: bgColor, 21 | shadows: [ 22 | BoxShadow( 23 | color: wood_smoke, 24 | offset: Offset( 25 | 0.0, // Move to right 10 horizontally 26 | 4.0, // Move to bottom 5 Vertically 27 | ), 28 | ) 29 | ], 30 | shape: RoundedRectangleBorder( 31 | borderRadius: BorderRadius.all(Radius.circular(16)), 32 | side: BorderSide(color: wood_smoke, width: 2))), 33 | child: Center( 34 | child: Column( 35 | mainAxisSize: MainAxisSize.min, 36 | children: [ 37 | ContraText( 38 | alignment: Alignment.center, 39 | text: price, 40 | size: 44, 41 | ), 42 | Text( 43 | type, 44 | style: TextStyle( 45 | color: wood_smoke, fontSize: 21, fontWeight: FontWeight.w500), 46 | ) 47 | ], 48 | ), 49 | ), 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/payment/payment_main_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class PaymentMainPage extends StatefulWidget { 5 | @override 6 | _PaymentMainPageState createState() => _PaymentMainPageState(); 7 | } 8 | 9 | class _PaymentMainPageState extends State { 10 | @override 11 | void initState() { 12 | super.initState(); 13 | } 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Scaffold( 18 | appBar: AppBar( 19 | title: Text("Payment"), 20 | ), 21 | body: SingleChildScrollView( 22 | child: Column( 23 | children: [ 24 | ListTile( 25 | contentPadding: EdgeInsets.all(20), 26 | trailing: Icon(Icons.navigate_next), 27 | title: Text("Payment Page Type One"), 28 | onTap: () { 29 | Navigator.pushNamed(context, "/payment_page_type_one"); 30 | }, 31 | ), 32 | ListTile( 33 | contentPadding: EdgeInsets.all(20), 34 | trailing: Icon(Icons.navigate_next), 35 | title: Text("Payment Page Type Two"), 36 | onTap: () { 37 | Navigator.pushNamed(context, "/payment_page_type_two"); 38 | }, 39 | ), 40 | ListTile( 41 | contentPadding: EdgeInsets.all(20), 42 | trailing: Icon(Icons.navigate_next), 43 | title: Text("Payment Page Type Three"), 44 | onTap: () { 45 | Navigator.pushNamed(context, "/payment_page_type_three"); 46 | }, 47 | ), 48 | ], 49 | ), 50 | ), 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/payment/payment_type.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class PaymentType { 4 | final String type; 5 | final String price; 6 | final Color color; 7 | final Color buttonColor; 8 | final Color buttonTextColor; 9 | final List list; 10 | 11 | const PaymentType( 12 | {required this.type, 13 | required this.price, 14 | required this.color, 15 | required this.list, 16 | required this.buttonColor, 17 | required this.buttonTextColor}); 18 | } 19 | 20 | class CardDetail { 21 | final String type; 22 | final String number; 23 | final String user_name; 24 | final Color color; 25 | 26 | const CardDetail( 27 | {required this.type, 28 | required this.number, 29 | required this.user_name, 30 | required this.color}); 31 | } 32 | -------------------------------------------------------------------------------- /lib/shopping/category_item.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class Category { 4 | final String name; 5 | final Color bgColor; 6 | final Color startColor; 7 | 8 | const Category( 9 | {required this.name, required this.startColor, required this.bgColor}); 10 | } 11 | 12 | class CategoryBig { 13 | final String name; 14 | final String image; 15 | final Color bgColor; 16 | final Color startColor; 17 | 18 | const CategoryBig( 19 | {required this.name, 20 | required this.image, 21 | required this.startColor, 22 | required this.bgColor}); 23 | } 24 | -------------------------------------------------------------------------------- /lib/shopping/shop.dart: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/lib/shopping/shop.dart -------------------------------------------------------------------------------- /lib/shopping/shop_card_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/shopping/shop_item.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_svg/svg.dart'; 6 | 7 | class ShopCardItemWidget extends StatelessWidget { 8 | final ShopItem shopItem; 9 | final VoidCallback onTap; 10 | 11 | const ShopCardItemWidget({required this.shopItem,required this.onTap}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return GestureDetector( 16 | onTap: onTap, 17 | child: Container( 18 | padding: EdgeInsets.all(24), 19 | child: Column( 20 | children: [ 21 | Container( 22 | width: MediaQuery.of(context).size.width, 23 | decoration: ShapeDecoration( 24 | color: shopItem.bgColor, 25 | shape: RoundedRectangleBorder( 26 | borderRadius: BorderRadius.all(Radius.circular(16)), 27 | side: BorderSide(color: wood_smoke, width: 2))), 28 | child: SvgPicture.asset( 29 | shopItem.image, 30 | width: 235, 31 | height: 212, 32 | ), 33 | ), 34 | Padding( 35 | padding: const EdgeInsets.symmetric(vertical: 8.0), 36 | child: Row( 37 | mainAxisAlignment: MainAxisAlignment.start, 38 | crossAxisAlignment: CrossAxisAlignment.start, 39 | children: [ 40 | Expanded( 41 | flex: 1, 42 | child: Text( 43 | shopItem.name, 44 | maxLines: 2, 45 | style: TextStyle( 46 | color: wood_smoke, 47 | fontSize: 21, 48 | fontWeight: FontWeight.w800), 49 | ), 50 | ), 51 | Icon( 52 | Icons.favorite, 53 | color: shopItem.bgColor, 54 | ) 55 | ], 56 | ), 57 | ), 58 | Row( 59 | children: [ 60 | Text( 61 | "\$" + shopItem.price, 62 | style: TextStyle( 63 | color: wood_smoke, 64 | fontSize: 27, 65 | fontWeight: FontWeight.w800), 66 | ), 67 | ], 68 | ) 69 | ], 70 | ), 71 | ), 72 | ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /lib/shopping/shop_card_item_small.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/shopping/shop_item.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_svg/svg.dart'; 6 | 7 | class ShopCardSmallItemWidget extends StatelessWidget { 8 | final ShopItem shopItem; 9 | final VoidCallback onTap; 10 | 11 | const ShopCardSmallItemWidget({required this.shopItem, required this.onTap}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return GestureDetector( 16 | onTap: onTap, 17 | child: Container( 18 | padding: EdgeInsets.all(8), 19 | child: Column( 20 | mainAxisSize: MainAxisSize.min, 21 | crossAxisAlignment: CrossAxisAlignment.start, 22 | children: [ 23 | Container( 24 | width: 120, 25 | height: 117, 26 | decoration: ShapeDecoration( 27 | color: shopItem.bgColor, 28 | shape: RoundedRectangleBorder( 29 | borderRadius: BorderRadius.all(Radius.circular(16)), 30 | side: BorderSide(color: wood_smoke, width: 2))), 31 | child: SvgPicture.asset( 32 | shopItem.image, 33 | width: 50, 34 | height: 50, 35 | ), 36 | ), 37 | Container( 38 | alignment: Alignment.centerLeft, 39 | padding: EdgeInsets.symmetric(vertical: 2), 40 | child: Text( 41 | shopItem.name, 42 | maxLines: 2, 43 | textAlign: TextAlign.start, 44 | style: TextStyle( 45 | color: wood_smoke, 46 | fontSize: 15, 47 | fontWeight: FontWeight.w800), 48 | ), 49 | ), 50 | Container( 51 | alignment: Alignment.centerLeft, 52 | padding: EdgeInsets.symmetric(vertical: 1), 53 | child: Text( 54 | "\$" + shopItem.price, 55 | textAlign: TextAlign.start, 56 | style: TextStyle( 57 | color: trout, fontSize: 13, fontWeight: FontWeight.bold), 58 | ), 59 | ) 60 | ], 61 | ), 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/shopping/shop_grid_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/shopping/shop_item.dart'; 2 | import 'package:contraflutterkit/utils/colors.dart'; 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:flutter_svg/svg.dart'; 6 | 7 | class ShopGridItemWidget extends StatelessWidget { 8 | final ShopItem shopItem; 9 | final VoidCallback onTap; 10 | 11 | const ShopGridItemWidget({required this.shopItem, required this.onTap}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return GestureDetector( 16 | onTap: onTap, 17 | child: Column( 18 | mainAxisSize: MainAxisSize.min, 19 | children: [ 20 | Container( 21 | width: MediaQuery.of(context).size.width, 22 | decoration: ShapeDecoration( 23 | color: shopItem.bgColor, 24 | shape: RoundedRectangleBorder( 25 | borderRadius: BorderRadius.all(Radius.circular(16)), 26 | side: BorderSide(color: wood_smoke, width: 2))), 27 | child: SvgPicture.asset( 28 | shopItem.image, 29 | height: 170, 30 | ), 31 | ), 32 | SizedBox( 33 | height: 2, 34 | ), 35 | Container( 36 | alignment: Alignment.centerLeft, 37 | child: Text( 38 | shopItem.name, 39 | maxLines: 2, 40 | textAlign: TextAlign.start, 41 | overflow: TextOverflow.ellipsis, 42 | style: TextStyle( 43 | color: wood_smoke, fontSize: 17, fontWeight: FontWeight.bold), 44 | ), 45 | ), 46 | SizedBox( 47 | height: 2, 48 | ), 49 | Container( 50 | alignment: Alignment.centerLeft, 51 | child: Text( 52 | "\$" + shopItem.price, 53 | textAlign: TextAlign.start, 54 | overflow: TextOverflow.ellipsis, 55 | maxLines: 1, 56 | style: TextStyle( 57 | color: trout, fontSize: 18, fontWeight: FontWeight.w800), 58 | ), 59 | ), 60 | ], 61 | ), 62 | ); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /lib/shopping/shop_item.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | class ShopItem { 4 | final String name; 5 | final String price; 6 | final String by; 7 | final String image; 8 | final Color bgColor; 9 | 10 | const ShopItem( 11 | {required this.name, 12 | required this.price, 13 | required this.by, 14 | required this.image, 15 | required this.bgColor}); 16 | } 17 | -------------------------------------------------------------------------------- /lib/shopping/shopping_card_pager_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/custom_widgets/button_plain.dart'; 2 | import 'package:contraflutterkit/shopping/category_item.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_svg/svg.dart'; 7 | 8 | class ShoppingCardPagerItem extends StatelessWidget { 9 | final CategoryBig categoryBig; 10 | 11 | const ShoppingCardPagerItem({required this.categoryBig}); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | margin: EdgeInsets.symmetric(horizontal: 8), 17 | decoration: ShapeDecoration( 18 | color: categoryBig.bgColor, 19 | shape: RoundedRectangleBorder( 20 | borderRadius: BorderRadius.all(Radius.circular(16)), 21 | side: BorderSide(color: wood_smoke, width: 2))), 22 | child: Row( 23 | children: [ 24 | Expanded( 25 | flex: 4, 26 | child: Column( 27 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 28 | crossAxisAlignment: CrossAxisAlignment.start, 29 | children: [ 30 | Padding( 31 | padding: const EdgeInsets.only(left: 24.0, top: 24), 32 | child: Text( 33 | categoryBig.name, 34 | maxLines: 2, 35 | overflow: TextOverflow.ellipsis, 36 | style: TextStyle( 37 | color: wood_smoke, 38 | fontSize: 22, 39 | fontWeight: FontWeight.w800), 40 | ), 41 | ), 42 | Padding( 43 | padding: const EdgeInsets.only(left: 24.0, bottom: 24), 44 | child: ButtonPlain( 45 | color: wood_smoke, 46 | borderColor: wood_smoke, 47 | textColor: white, 48 | text: "Shop now", 49 | size: 96, 50 | onTap: () { 51 | Navigator.pushNamed(context, "/shopping_list_page_two"); 52 | }, 53 | ), 54 | ) 55 | ], 56 | ), 57 | ), 58 | Expanded( 59 | flex: 4, 60 | child: SvgPicture.asset( 61 | categoryBig.image, 62 | width: 210, 63 | height: 230, 64 | ), 65 | ), 66 | ], 67 | ), 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /lib/shopping/shopping_home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:contraflutterkit/shopping/shopping_home_page_one.dart'; 2 | import 'package:contraflutterkit/shopping/shopping_home_page_two.dart'; 3 | import 'package:contraflutterkit/utils/colors.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class ShoppingHomePage extends StatefulWidget { 7 | @override 8 | _ShoppingHomePageState createState() => _ShoppingHomePageState(); 9 | } 10 | 11 | class _ShoppingHomePageState extends State { 12 | int _currentIndex = 0; 13 | final List _childrenWidgets = [ 14 | ShoppingHomePageTwo(), 15 | ShoppingHomePageOne(), 16 | ShoppingHomePageTwo(), 17 | ShoppingHomePageOne(), 18 | ]; 19 | 20 | void _onItemTapped(int index) { 21 | setState(() { 22 | _currentIndex = index; 23 | }); 24 | } 25 | 26 | @override 27 | Widget build(BuildContext context) { 28 | return Scaffold( 29 | body: Center( 30 | child: _childrenWidgets.elementAt(_currentIndex), 31 | ), 32 | bottomNavigationBar: BottomNavigationBar( 33 | items: [ 34 | BottomNavigationBarItem(icon: Icon(Icons.home), label:("Home")), 35 | BottomNavigationBarItem( 36 | icon: Icon(Icons.search), label:("Search")), 37 | BottomNavigationBarItem( 38 | icon: Icon(Icons.chat_bubble), label:("Chat")), 39 | BottomNavigationBarItem(icon: Icon(Icons.info), label:("About")), 40 | ], 41 | currentIndex: _currentIndex, 42 | onTap: _onItemTapped, 43 | selectedItemColor: wood_smoke, 44 | unselectedItemColor: trout, 45 | showSelectedLabels: true, 46 | showUnselectedLabels: true, 47 | selectedIconTheme: IconThemeData(color: wood_smoke, opacity: 1), 48 | unselectedIconTheme: IconThemeData(color: trout, opacity: 0.6), 49 | selectedLabelStyle: TextStyle( 50 | color: wood_smoke, fontSize: 12, fontWeight: FontWeight.w800), 51 | unselectedLabelStyle: 52 | TextStyle(color: trout, fontSize: 12, fontWeight: FontWeight.w800), 53 | ), 54 | ); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /lib/utils/colors.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const persian_blue = Color(0xFF1947E6); 4 | const white = Color(0xFFFFFFFF); 5 | const athens_gray = Color(0xFFF4F5F7); 6 | const lightening_yellow = Color(0xFFFFBD12); 7 | const flamingo = Color(0xFFF95A2C); 8 | const black = Color(0xFF000000); 9 | const wood_smoke = Color(0xFF18191F); 10 | const trout = Color(0xFF474A57); 11 | const santas_gray = Color(0xFF969BAB); 12 | const selago = Color(0xFFE9E7FC); 13 | const carribean_green = Color(0xFF00C6AE); 14 | const santas_gray_10 = Color(0xFF9FA4B4); 15 | const dandelion = Color(0xFFFFD465); 16 | const caribbean_color = Color(0xFF00C6AE); 17 | const pastel_pink = Color(0xFFFFC7DE); 18 | const pink_salomn = Color(0xFFFF89BB); 19 | const athen_gray = Color(0xFFF4F5F7); 20 | const bareley_white = Color(0xFFFFF4CC); 21 | const fair_pink = Color(0xFFFFE8E8); 22 | const foam = Color(0xFFD6FCF7); 23 | const lavandar_bush = Color(0xFFFFF3F8); 24 | const mona_lisa = Color(0xFFFF9692); 25 | const athens = Color(0xFFEEEFF4); 26 | const turquoise_blue = Color(0xFF61E4C5); 27 | -------------------------------------------------------------------------------- /lib/utils/empty_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class EmptyState extends StatelessWidget { 5 | @override 6 | Widget build(BuildContext context) { 7 | return Material( 8 | child: Container( 9 | child: Center( 10 | child: Text("Coming soon!"), 11 | ), 12 | ), 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /lib/utils/strings.dart: -------------------------------------------------------------------------------- 1 | class Strings { 2 | static const String contra_wireframe_kit = "Contra Flutter kit"; 3 | static const String contra_wireframe_kit_next_line = "Contra Flutter \nUikit"; 4 | static const String open_source = "OPEN SOURCE"; 5 | static const String contra_wireframe_kit_page_text = 6 | "Flutter UiKit will be usefull for learning purpose especially for beginners"; 7 | } 8 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: contraflutterkit 2 | description: Flutter application built on top of contra wireframe kit. 3 | 4 | 5 | version: 1.0.0+1 6 | 7 | environment: 8 | sdk: ">=2.12.0 <3.0.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | cupertino_icons: ^1.0.4 15 | flutter_svg: ^2.0.10+1 16 | flutter_staggered_grid_view: ^0.7.0 17 | flutter_time_picker_spinner: ^2.0.0 18 | fl_chart: ^0.68.0 19 | google_maps_flutter: ^2.1.1 20 | card_swiper: ^3.0.1 21 | 22 | dev_dependencies: 23 | flutter_test: 24 | sdk: flutter 25 | linter: ^1.15.0 26 | lint: ^1.7.2 27 | 28 | flutter: 29 | 30 | assets: 31 | - assets/icons/ 32 | - assets/fonts/ 33 | - assets/images/ 34 | - assets/images/shopping/ 35 | 36 | fonts: 37 | - family: Montserrat 38 | fonts: 39 | - asset: assets/fonts/Montserrat-Bold.ttf 40 | - asset: assets/fonts/Montserrat-ExtraBold.ttf 41 | - asset: assets/fonts/Montserrat-Medium.ttf 42 | uses-material-design: true 43 | -------------------------------------------------------------------------------- /screenshots/add_alarm_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/add_alarm_page.jpg -------------------------------------------------------------------------------- /screenshots/add_label_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/add_label_screen.jpg -------------------------------------------------------------------------------- /screenshots/alarm_list_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/alarm_list_page.jpg -------------------------------------------------------------------------------- /screenshots/bar_chart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/bar_chart.jpg -------------------------------------------------------------------------------- /screenshots/blog_type_five.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/blog_type_five.jpg -------------------------------------------------------------------------------- /screenshots/blog_type_four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/blog_type_four.jpg -------------------------------------------------------------------------------- /screenshots/blog_type_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/blog_type_one.jpg -------------------------------------------------------------------------------- /screenshots/blog_type_three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/blog_type_three.jpg -------------------------------------------------------------------------------- /screenshots/blog_type_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/blog_type_two.jpg -------------------------------------------------------------------------------- /screenshots/chat_home_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/chat_home_page.jpg -------------------------------------------------------------------------------- /screenshots/chat_message_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/chat_message_page.jpg -------------------------------------------------------------------------------- /screenshots/chat_search_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/chat_search_page.jpg -------------------------------------------------------------------------------- /screenshots/clock_list_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/clock_list_page.jpg -------------------------------------------------------------------------------- /screenshots/contact_us_type_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/contact_us_type_1.jpg -------------------------------------------------------------------------------- /screenshots/content_text_eight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_eight.jpg -------------------------------------------------------------------------------- /screenshots/content_text_five.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_five.jpg -------------------------------------------------------------------------------- /screenshots/content_text_four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_four.jpg -------------------------------------------------------------------------------- /screenshots/content_text_nine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_nine.jpg -------------------------------------------------------------------------------- /screenshots/content_text_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_one.jpg -------------------------------------------------------------------------------- /screenshots/content_text_seven.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_seven.jpg -------------------------------------------------------------------------------- /screenshots/content_text_six.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_six.jpg -------------------------------------------------------------------------------- /screenshots/content_text_ten.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_ten.jpg -------------------------------------------------------------------------------- /screenshots/content_text_three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_three.jpg -------------------------------------------------------------------------------- /screenshots/content_text_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/content_text_two.jpg -------------------------------------------------------------------------------- /screenshots/home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/home.jpg -------------------------------------------------------------------------------- /screenshots/line_chart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/line_chart.jpg -------------------------------------------------------------------------------- /screenshots/location_detail.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/location_detail.jpg -------------------------------------------------------------------------------- /screenshots/location_list_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/location_list_page.jpg -------------------------------------------------------------------------------- /screenshots/login_type_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/login_type_1.jpg -------------------------------------------------------------------------------- /screenshots/login_type_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/login_type_2.jpg -------------------------------------------------------------------------------- /screenshots/login_type_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/login_type_3.jpg -------------------------------------------------------------------------------- /screenshots/login_type_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/login_type_4.jpg -------------------------------------------------------------------------------- /screenshots/menu_page_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/menu_page_one.jpg -------------------------------------------------------------------------------- /screenshots/menu_page_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/menu_page_two.jpg -------------------------------------------------------------------------------- /screenshots/onboard_type_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/onboard_type_1.jpg -------------------------------------------------------------------------------- /screenshots/onboard_type_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/onboard_type_2.jpg -------------------------------------------------------------------------------- /screenshots/onboard_type_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/onboard_type_3.jpg -------------------------------------------------------------------------------- /screenshots/onboard_type_4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/onboard_type_4.jpg -------------------------------------------------------------------------------- /screenshots/payment_type_four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/payment_type_four.jpg -------------------------------------------------------------------------------- /screenshots/payment_type_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/payment_type_one.jpg -------------------------------------------------------------------------------- /screenshots/payment_type_three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/payment_type_three.jpg -------------------------------------------------------------------------------- /screenshots/payment_type_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/payment_type_two.jpg -------------------------------------------------------------------------------- /screenshots/settings_page_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/settings_page_one.jpg -------------------------------------------------------------------------------- /screenshots/settings_page_three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/settings_page_three.jpg -------------------------------------------------------------------------------- /screenshots/settings_page_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/settings_page_two.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_five.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_five.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_four.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_four.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_one.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_six.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_six.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_three.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_three.jpg -------------------------------------------------------------------------------- /screenshots/shopping_screen_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/shopping_screen_two.jpg -------------------------------------------------------------------------------- /screenshots/signup_type_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/signup_type_1.jpg -------------------------------------------------------------------------------- /screenshots/verification_type_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/verification_type_1.jpg -------------------------------------------------------------------------------- /screenshots/weather_list_page.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/weather_list_page.jpg -------------------------------------------------------------------------------- /screenshots/welcome_screen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/welcome_screen.jpg -------------------------------------------------------------------------------- /screenshots/welcome_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathansdev/ContraFlutterKit/f45c33500f2f80258b68846e8e77267d532d1071/screenshots/welcome_screen.png -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:contraflutterkit/main.dart'; 9 | import 'package:flutter/material.dart'; 10 | import 'package:flutter_test/flutter_test.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(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 | --------------------------------------------------------------------------------