├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── ui_flutter │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── images ├── Mastercard.png ├── bg_image.png ├── credit-card.png ├── disney_plus_logo.png ├── flying-kite.png ├── froks.webp ├── google.png ├── jogger.webp ├── light_rain.png ├── light_rainsun.png ├── listen_music.jpg ├── men.webp ├── mens.webp ├── micky_mouse.png ├── partly_cloudy.png ├── paypal.png ├── profile.png ├── rainy.png ├── sandwich.png ├── shopping-bag.png ├── socks.webp ├── surfing.png ├── taxi.png ├── weather.png └── women.webp ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Runner.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── xcshareddata │ │ └── xcschemes │ │ └── Runner.xcscheme ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── WorkspaceSettings.xcsettings └── Runner │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-1024x1024@1x.png │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ └── Icon-App-83.5x83.5@2x.png │ └── LaunchImage.imageset │ │ ├── Contents.json │ │ ├── LaunchImage.png │ │ ├── LaunchImage@2x.png │ │ ├── LaunchImage@3x.png │ │ └── README.md │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── Runner-Bridging-Header.h ├── lib ├── airbnb │ ├── models │ │ ├── Place.dart │ │ └── city.dart │ ├── pages │ │ └── airbnb_homr_page.dart │ └── widgets │ │ ├── airbnb_city_widget.dart │ │ ├── airbnb_header.dart │ │ ├── airbnb_live_anywhere.dart │ │ ├── aribnb_city.dart │ │ ├── fade_app_bar.dart │ │ ├── hero_banner.dart │ │ └── search_input.dart ├── animatedContainer │ └── AnimatedContainerClass.dart ├── animation │ └── animation_class.dart ├── bottomsheetanimation │ ├── bottom_sheet.dart │ └── components │ │ ├── landend_content.dart │ │ ├── on_board_content.dart │ │ └── sign_up_content.dart ├── coinbase │ ├── models │ │ ├── coinbase_coin.dart │ │ ├── coinbase_coin_data.dart │ │ └── coinbase_data_error.dart │ ├── pages │ │ └── coinbase_homepage.dart │ ├── services │ │ └── coinbase_repository.dart │ ├── utils │ │ └── coinbase_theme.dart │ └── widgets │ │ ├── coibase_bottombar.dart │ │ ├── coinbase_asset_viewheader.dart │ │ ├── coinbase_balance_header.dart │ │ ├── coinbase_coin_details_page.dart │ │ ├── coinbase_coin_display.dart │ │ └── coinbase_topbar.dart ├── counterdisplay │ └── counter_display.dart ├── disneyui │ ├── brand_logos.dart │ ├── carosel_widget.dart │ ├── disney_bottom_navigation.dart │ ├── disney_home_page.dart │ ├── disneyappbar.dart │ └── movie_widget.dart ├── donwloadbutton │ └── download_botton.dart ├── form │ └── form_validate.dart ├── landing_page_music.dart ├── landingpage │ ├── landing_page.dart │ ├── util │ │ └── constant.dart │ └── widget │ │ ├── custom_button.dart │ │ └── custom_cricle.dart ├── main.dart ├── rippleanimation │ ├── CirclePainter.dart │ ├── CurveWave.dart │ └── RipplesAnimation.dart ├── screens │ ├── ChatListScreen.dart │ ├── DrawerScreen.dart │ ├── EComAppHomeScreen.dart │ ├── FaceIdScreen.dart │ ├── LandingScreen.dart │ ├── OtpScreen.dart │ ├── ProfileScreen.dart │ ├── SearchFilterBottomSheet.dart │ ├── SignInPage.dart │ ├── WeatherScreen.dart │ ├── WhatsAppProfileScreen.dart │ └── WhatsAppUIScreen.dart ├── shoppinglist │ └── shoppping_list.dart ├── slidemenuanimation │ └── slide_menu_animation.dart ├── splash │ └── splash.dart └── stack │ └── stack.dart ├── pubspec.lock ├── pubspec.yaml └── 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 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Web related 36 | lib/generated_plugin_registrant.dart 37 | 38 | # Symbolication related 39 | app.*.symbols 40 | 41 | # Obfuscation related 42 | app.*.map.json 43 | 44 | # Android Studio will place build artifacts here 45 | /android/app/debug 46 | /android/app/profile 47 | /android/app/release 48 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 8 | channel: stable 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 17 | base_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 18 | - platform: android 19 | create_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 20 | base_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 21 | - platform: ios 22 | create_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 23 | base_revision: ee4e09cce01d6f2d7f4baebd247fde02e5008851 24 | 25 | # User provided section 26 | 27 | # List of Local paths (relative to this file) that should be 28 | # ignored by the migrate tool. 29 | # 30 | # Files that are not part of the templates will be ignored by default. 31 | unmanaged_files: 32 | - 'lib/main.dart' 33 | - 'ios/Runner.xcodeproj/project.pbxproj' 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ui_flutter 2 | 3 | A new Flutter project. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) 13 | 14 | For help getting started with Flutter development, view the 15 | [online documentation](https://docs.flutter.dev/), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion flutter.compileSdkVersion 30 | ndkVersion flutter.ndkVersion 31 | 32 | compileOptions { 33 | sourceCompatibility JavaVersion.VERSION_1_8 34 | targetCompatibility JavaVersion.VERSION_1_8 35 | } 36 | 37 | kotlinOptions { 38 | jvmTarget = '1.8' 39 | } 40 | 41 | sourceSets { 42 | main.java.srcDirs += 'src/main/kotlin' 43 | } 44 | 45 | defaultConfig { 46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 47 | applicationId "com.example.ui_flutter" 48 | // You can update the following values to match your application needs. 49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. 50 | minSdkVersion flutter.minSdkVersion 51 | targetSdkVersion flutter.targetSdkVersion 52 | versionCode flutterVersionCode.toInteger() 53 | versionName flutterVersionName 54 | } 55 | 56 | buildTypes { 57 | release { 58 | // TODO: Add your own signing config for the release build. 59 | // Signing with the debug keys for now, so `flutter run --release` works. 60 | signingConfig signingConfigs.debug 61 | } 62 | } 63 | } 64 | 65 | flutter { 66 | source '../..' 67 | } 68 | 69 | dependencies { 70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 71 | } 72 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 15 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/ui_flutter/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.ui_flutter 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.6.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.1.2' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip 7 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /images/Mastercard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/Mastercard.png -------------------------------------------------------------------------------- /images/bg_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/bg_image.png -------------------------------------------------------------------------------- /images/credit-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/credit-card.png -------------------------------------------------------------------------------- /images/disney_plus_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/disney_plus_logo.png -------------------------------------------------------------------------------- /images/flying-kite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/flying-kite.png -------------------------------------------------------------------------------- /images/froks.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/froks.webp -------------------------------------------------------------------------------- /images/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/google.png -------------------------------------------------------------------------------- /images/jogger.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/jogger.webp -------------------------------------------------------------------------------- /images/light_rain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/light_rain.png -------------------------------------------------------------------------------- /images/light_rainsun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/light_rainsun.png -------------------------------------------------------------------------------- /images/listen_music.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/listen_music.jpg -------------------------------------------------------------------------------- /images/men.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/men.webp -------------------------------------------------------------------------------- /images/mens.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/mens.webp -------------------------------------------------------------------------------- /images/micky_mouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/micky_mouse.png -------------------------------------------------------------------------------- /images/partly_cloudy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/partly_cloudy.png -------------------------------------------------------------------------------- /images/paypal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/paypal.png -------------------------------------------------------------------------------- /images/profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/profile.png -------------------------------------------------------------------------------- /images/rainy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/rainy.png -------------------------------------------------------------------------------- /images/sandwich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/sandwich.png -------------------------------------------------------------------------------- /images/shopping-bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/shopping-bag.png -------------------------------------------------------------------------------- /images/socks.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/socks.webp -------------------------------------------------------------------------------- /images/surfing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/surfing.png -------------------------------------------------------------------------------- /images/taxi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/taxi.png -------------------------------------------------------------------------------- /images/weather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/weather.png -------------------------------------------------------------------------------- /images/women.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/images/women.webp -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 11.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Generated.xcconfig" 2 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 52 | 54 | 60 | 61 | 62 | 63 | 69 | 71 | 77 | 78 | 79 | 80 | 82 | 83 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/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/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vikassuthar44/FlutterUI/4cd92d44eb5d6adff80fd722a186e5c8858bd64b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Ui Flutter 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ui_flutter 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UIViewControllerBasedStatusBarAppearance 45 | 46 | CADisableMinimumFrameDurationOnPhone 47 | 48 | UIApplicationSupportsIndirectInputEvents 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/airbnb/models/Place.dart: -------------------------------------------------------------------------------- 1 | class Place { 2 | String title; 3 | String image; 4 | Place({ 5 | required this.title, required this.image 6 | }); 7 | } -------------------------------------------------------------------------------- /lib/airbnb/models/city.dart: -------------------------------------------------------------------------------- 1 | class City { 2 | String title; 3 | String subTitle; 4 | String image; 5 | 6 | City({required this.title, required this.subTitle, required this.image}); 7 | } 8 | -------------------------------------------------------------------------------- /lib/airbnb/pages/airbnb_homr_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../widgets/airbnb_header.dart'; 4 | import '../widgets/airbnb_live_anywhere.dart'; 5 | import '../widgets/aribnb_city.dart'; 6 | import '../widgets/fade_app_bar.dart'; 7 | import '../widgets/hero_banner.dart'; 8 | 9 | class AirbnbHomePage extends StatefulWidget { 10 | const AirbnbHomePage({Key? key}) : super(key: key); 11 | 12 | @override 13 | State createState() => _AirbnbHomePageState(); 14 | } 15 | 16 | class _AirbnbHomePageState extends State { 17 | late ScrollController _scrollController; 18 | double _scrollControllerOffset = 0.0; 19 | 20 | @override 21 | void initState() { 22 | _scrollController = ScrollController(); 23 | _scrollController.addListener(_scrollListener); 24 | super.initState(); 25 | } 26 | 27 | void _scrollListener() { 28 | setState(() { 29 | _scrollControllerOffset = _scrollController.offset; 30 | }); 31 | } 32 | @override 33 | Widget build(BuildContext context) { 34 | return Scaffold( 35 | body: Stack( 36 | children: [ 37 | CustomScrollView( 38 | controller: _scrollController, 39 | slivers: [ 40 | HeroBanner(), 41 | AirbnbHeader(header: "Explore Nearby"), 42 | AirbnbCity(), 43 | AirbnbHeader(header: "Live Anywhere"), 44 | AirbnbLiveAnywhere() 45 | ], 46 | ), 47 | FadeAppBar(scrollOffset: _scrollControllerOffset) 48 | ], 49 | ) 50 | ); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/airbnb_city_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../models/city.dart'; 4 | class CityCard extends StatelessWidget { 5 | final City city; 6 | const CityCard({ 7 | required this.city, 8 | Key? key 9 | }) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Padding( 14 | padding: const EdgeInsets.all(12.5), 15 | child: Row( 16 | crossAxisAlignment: CrossAxisAlignment.center, 17 | children: [ 18 | ClipRRect( 19 | borderRadius: BorderRadius.circular(16), 20 | child: Image.network( 21 | city.image, 22 | width: 59, 23 | fit: BoxFit.cover, 24 | ), 25 | ), 26 | Padding( 27 | padding: const EdgeInsets.only(left: 5, top: 5), 28 | child: Column( 29 | crossAxisAlignment: CrossAxisAlignment.start, 30 | children: [ 31 | Text(city.title, style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),), 32 | Text(city.subTitle, style: const TextStyle(fontSize: 12, fontWeight: FontWeight.normal),), 33 | ], 34 | ), 35 | ) 36 | ], 37 | ), 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/airbnb_header.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | class AirbnbHeader extends StatelessWidget { 3 | final String header; 4 | const AirbnbHeader({ 5 | required this.header, 6 | Key? key 7 | }) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return SliverToBoxAdapter( 12 | child: Padding( 13 | padding: const EdgeInsets.only(top: 15.0, left: 15), 14 | child: Text( 15 | header, 16 | style: TextStyle(color: Colors.black.withOpacity(0.9), fontWeight: FontWeight.bold, fontSize: 20), 17 | ), 18 | ), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/airbnb_live_anywhere.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../models/Place.dart'; 4 | 5 | class AirbnbLiveAnywhere extends StatelessWidget { 6 | AirbnbLiveAnywhere({Key? key}) : super(key: key); 7 | 8 | List places = [ 9 | Place( 10 | title: "Outdoor Getaways", 11 | image: 12 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fnature.jpeg?alt=media&token=d0dda841-e419-4be0-aa0e-56dcdd42acfd"), 13 | Place( 14 | title: "Unique Stays", 15 | image: 16 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Funique.jpeg?alt=media&token=669e01b2-64b9-47e5-a160-e1a8db1c1c7e"), 17 | ]; 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return SliverToBoxAdapter( 22 | child: SizedBox( 23 | height: 500, 24 | child: ListView.builder( 25 | itemCount: places.length, 26 | scrollDirection: Axis.horizontal, 27 | itemBuilder: (context, index) { 28 | return LiveWidget(place: places[index]); 29 | }), 30 | ), 31 | ); 32 | } 33 | } 34 | 35 | class LiveWidget extends StatelessWidget { 36 | final Place place; 37 | 38 | const LiveWidget({required this.place, Key? key}) : super(key: key); 39 | 40 | @override 41 | Widget build(BuildContext context) { 42 | return Container( 43 | width: 300, 44 | height: 400, 45 | decoration: BoxDecoration( 46 | borderRadius: BorderRadius.circular(15) 47 | ), 48 | padding: const EdgeInsets.all(15), 49 | child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ 50 | ClipRRect( 51 | borderRadius: BorderRadius.circular(15), 52 | child: Image.network( 53 | place.image, 54 | fit: BoxFit.cover, 55 | ), 56 | ), 57 | const SizedBox( 58 | height: 10, 59 | ), 60 | Text( 61 | place.title, 62 | style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16, color: Colors.black.withOpacity(0.9)), 63 | ) 64 | ]), 65 | ); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/aribnb_city.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/airbnb/widgets/airbnb_city_widget.dart'; 3 | 4 | import '../models/city.dart'; 5 | 6 | class AirbnbCity extends StatelessWidget { 7 | List cities = [ 8 | City( 9 | title: "Portland", 10 | image: 11 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fportland.png?alt=media&token=5679fa53-c854-4833-bfb2-799ad4b83f34", 12 | subTitle: "1.5 hour drive"), 13 | City( 14 | title: "Boston", 15 | image: 16 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fboston.png?alt=media&token=ddf740c9-0d85-4bd7-8cd3-3732029a3ea1", 17 | subTitle: "5 hour drive"), 18 | City( 19 | title: "Newark", 20 | image: 21 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fnewark.png?alt=media&token=f845d590-c831-4942-94d0-f2b13c11c339", 22 | subTitle: "3 hour drive"), 23 | City( 24 | title: "New York", 25 | image: 26 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fny.jpeg?alt=media&token=356763c5-18b1-4e22-96be-448756ae2b1c", 27 | subTitle: "8 hour drive"), 28 | ]; 29 | 30 | AirbnbCity({Key? key}) : super(key: key); 31 | 32 | @override 33 | Widget build(BuildContext context) { 34 | return SliverGrid( 35 | gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( 36 | crossAxisCount: 2, 37 | mainAxisSpacing: 10, 38 | crossAxisSpacing: 10, 39 | childAspectRatio: 2.5 / 1), 40 | delegate: 41 | SliverChildBuilderDelegate((BuildContext context, int index) { 42 | return CityCard(city: cities[index]); 43 | }, childCount: cities.length), 44 | 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/fade_app_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/airbnb/widgets/search_input.dart'; 3 | class FadeAppBar extends StatelessWidget { 4 | final double scrollOffset; 5 | FadeAppBar({required this.scrollOffset, Key? key}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return SafeArea( 10 | top: false, 11 | child: Container( 12 | color: Colors.white.withOpacity((scrollOffset/350).clamp(0, 1).toDouble()), 13 | height: 100, 14 | padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 24), 15 | child: const SafeArea(child: SearchInput(),), 16 | ), 17 | 18 | ); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/hero_banner.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class HeroBanner extends StatelessWidget { 4 | const HeroBanner({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return SliverToBoxAdapter( 9 | child: SizedBox( 10 | height: MediaQuery.of(context).size.height / 2.1, 11 | child: Stack( 12 | children: [ 13 | Image.network( 14 | "https://firebasestorage.googleapis.com/v0/b/flutterbricks-public.appspot.com/o/airbnb%2Fairbnb_home.webp?alt=media&token=27e4e303-eac2-4144-945f-73769bcb81f7"", 15 | height: MediaQuery.of(context).size.height / 2.1, 16 | fit: BoxFit.cover, 17 | ), 18 | Center( 19 | child: Column( 20 | mainAxisAlignment: MainAxisAlignment.center, 21 | children: [ 22 | const SizedBox( 23 | height: 35, 24 | ), 25 | const Text( 26 | "Not sure where to go? \nPerfect", 27 | style: TextStyle( 28 | color: Colors.black, 29 | fontSize: 18, 30 | fontWeight: FontWeight.w600), 31 | textAlign: TextAlign.center, 32 | ), 33 | const SizedBox( 34 | height: 25, 35 | ), 36 | ElevatedButton( 37 | onPressed: () {}, 38 | style: ElevatedButton.styleFrom( 39 | padding: const EdgeInsets.symmetric( 40 | horizontal: 50, vertical: 12.5), 41 | elevation: 10, 42 | foregroundColor: Colors.white, 43 | backgroundColor: Colors.white, 44 | shape: RoundedRectangleBorder( 45 | borderRadius: BorderRadius.circular(25))), 46 | child: ShaderMask( 47 | shaderCallback: (bounds) => const LinearGradient( 48 | colors: [Colors.purple, Colors.pink]).createShader( 49 | Rect.fromLTWH(0, 0, bounds.width, bounds.height) 50 | ), 51 | child: const Text( 52 | "I'm Flexible", 53 | style: TextStyle( 54 | color: Colors.white, fontWeight: FontWeight.w600, fontSize: 16), 55 | ), 56 | )) 57 | ], 58 | ), 59 | ) 60 | ], 61 | ), 62 | ), 63 | ); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /lib/airbnb/widgets/search_input.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SearchInput extends StatelessWidget { 4 | const SearchInput({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return Container( 9 | height: 50, 10 | decoration: BoxDecoration(boxShadow: [ 11 | BoxShadow( 12 | offset: const Offset(12, 26), 13 | blurRadius: 50, 14 | spreadRadius: 0, 15 | color: Colors.grey.withOpacity(0.1)) 16 | ]), 17 | child: TextField( 18 | controller: TextEditingController(), 19 | textAlign: TextAlign.center, 20 | style: const TextStyle(fontSize: 14), 21 | decoration: InputDecoration( 22 | prefixIcon: const Icon( 23 | Icons.search, 24 | color: Color(0xffFF5A60), 25 | ), 26 | filled: true, 27 | fillColor: Colors.white, 28 | hintText: "Where are you going?", 29 | contentPadding: const EdgeInsets.symmetric(vertical: 0, horizontal: 20), 30 | hintStyle: TextStyle(color: Colors.black.withOpacity(.75)), 31 | border: const OutlineInputBorder( 32 | borderRadius: BorderRadius.all(Radius.circular(15))), 33 | enabledBorder: const OutlineInputBorder( 34 | borderSide: BorderSide(color: Colors.white, width: 1.0), 35 | borderRadius: BorderRadius.all(Radius.circular(15))), 36 | focusedBorder: const OutlineInputBorder( 37 | borderSide: BorderSide(color: Colors.white, width: 2.0), 38 | borderRadius: BorderRadius.all(Radius.circular(15)))), 39 | ), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/animatedContainer/AnimatedContainerClass.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class AnimatedContainerClass extends StatefulWidget { 6 | const AnimatedContainerClass({Key? key}) : super(key: key); 7 | 8 | 9 | @override 10 | _AnimatedContainerClassState createState() => _AnimatedContainerClassState(); 11 | } 12 | 13 | class _AnimatedContainerClassState extends State { 14 | 15 | //default Value 16 | double height = 100; 17 | double width = 100; 18 | Color color = Colors.green; 19 | BorderRadius borderRadius = BorderRadius.all(Radius.circular(10.0)); 20 | 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return Scaffold( 25 | appBar: AppBar( 26 | title: const Text("Animated Container") 27 | ), 28 | body: Center( 29 | child: AnimatedContainer( 30 | width: width, 31 | height: height, 32 | duration: const Duration(seconds: 1), 33 | decoration: BoxDecoration( 34 | color: color, 35 | borderRadius: borderRadius 36 | ), 37 | curve: Curves.fastOutSlowIn, 38 | ), 39 | ), 40 | floatingActionButton: FloatingActionButton( 41 | onPressed: () { 42 | setState((){ 43 | Random random = Random(); 44 | width = random.nextInt(300).toDouble(); 45 | height = random.nextInt(300).toDouble(); 46 | borderRadius = BorderRadius.all(Radius.circular(random.nextInt(100).toDouble())); 47 | color = Color.fromRGBO(random.nextInt(256), random.nextInt(256), random.nextInt(256), 1); 48 | }); 49 | }, 50 | child: const Icon(Icons.play_arrow), 51 | ), 52 | ); 53 | } 54 | 55 | } -------------------------------------------------------------------------------- /lib/animation/animation_class.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | import '../landingpage/widget/custom_cricle.dart'; 6 | 7 | class AnimationList extends StatelessWidget { 8 | const AnimationList({Key? key}) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | final Size size = MediaQuery.of(context).size; 13 | return Scaffold( 14 | body: Container( 15 | color: Colors.blue, 16 | child: Stack( 17 | children: [ 18 | const Positioned( 19 | top: 0, left: -20, child: CustomCircle(color: Colors.orange)), 20 | const Positioned( 21 | bottom: 230, 22 | left: -100, 23 | child: CustomCircle(color: Colors.orange)), 24 | const Positioned( 25 | top: 230, right: -100, child: CustomCircle(color: Colors.orange)), 26 | const Positioned( 27 | bottom: 0, right: -20, child: CustomCircle(color: Colors.orange)), 28 | Center( 29 | child: ClipRRect( 30 | borderRadius: BorderRadius.circular(20), 31 | child: BackdropFilter( 32 | filter: ImageFilter.blur(sigmaX: 40.0, sigmaY: 40.0), 33 | child: Container( 34 | clipBehavior: Clip.none, 35 | width: size.width * 0.9, 36 | height: size.height * 0.9, 37 | decoration: BoxDecoration( 38 | color: Colors.white.withOpacity(0.2), 39 | borderRadius: BorderRadius.circular(20), 40 | border: Border.all( 41 | color: Colors.white.withOpacity(0.5), width: 1.5), 42 | ), 43 | child: const ItemPicker(), 44 | ), 45 | ), 46 | ), 47 | ) 48 | ], 49 | ), 50 | ), 51 | ); 52 | } 53 | } 54 | 55 | class ItemPicker extends StatefulWidget { 56 | const ItemPicker({Key? key}) : super(key: key); 57 | 58 | @override 59 | State createState() => _ItemPickerState(); 60 | } 61 | 62 | class _ItemPickerState extends State { 63 | int selectedItemIndex = 0; 64 | 65 | @override 66 | Widget build(BuildContext context) { 67 | const double listContainerBorderWidth = 1.5; 68 | final Size size = MediaQuery.of(context).size; 69 | const int itemsCount = 10; 70 | double itemHeight = 71 | (size.height * 0.9 - listContainerBorderWidth * 2) / itemsCount; 72 | return SizedBox( 73 | height: MediaQuery.of(context).size.height, 74 | width: MediaQuery.of(context).size.width, 75 | child: Stack( 76 | children: [ 77 | AnimatedPositioned( 78 | top: selectedItemIndex * itemHeight, 79 | left: 0, 80 | right: 0, 81 | height: itemHeight, 82 | curve: Curves.easeInOut, 83 | duration: const Duration(milliseconds: 200), 84 | child: Container( 85 | margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), 86 | decoration: BoxDecoration( 87 | color: Colors.white.withOpacity(0.3), 88 | borderRadius: BorderRadius.circular(10), 89 | border: Border.all( 90 | color: Colors.white.withOpacity(0.5), 91 | width: 1.5 92 | ) 93 | ), 94 | )), 95 | Positioned.fill( 96 | child: Column( 97 | crossAxisAlignment: CrossAxisAlignment.start, 98 | children: List.generate( 99 | 10, 100 | (index) => Expanded( 101 | child: InkWell( 102 | onTap: () => setState(() => selectedItemIndex = index), 103 | child: Padding( 104 | padding: const EdgeInsets.symmetric(horizontal: 30), 105 | child: Center( 106 | child: Row( 107 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 108 | children: [ 109 | Text( 110 | 'List Item ${index + 1}', 111 | style: const TextStyle( 112 | color: Colors.white, fontSize: 18, fontWeight: FontWeight.w600), 113 | ), 114 | ], 115 | ), 116 | ), 117 | ), 118 | ))), 119 | )) 120 | ], 121 | ), 122 | ); 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /lib/bottomsheetanimation/bottom_sheet.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'components/on_board_content.dart'; 4 | 5 | class BottomSheetWidget extends StatefulWidget { 6 | const BottomSheetWidget({Key? key}) : super(key: key); 7 | 8 | @override 9 | State createState() => _BottomSheetWidgetState(); 10 | } 11 | 12 | class _BottomSheetWidgetState extends State { 13 | @override 14 | void initState() { 15 | super.initState(); 16 | Future.delayed(Duration.zero, () { 17 | showModalBottomSheet( 18 | context: context, 19 | enableDrag: false, 20 | isScrollControlled: true, 21 | isDismissible: false, 22 | shape: const RoundedRectangleBorder( 23 | borderRadius: BorderRadius.only( 24 | topLeft: Radius.circular(24), topRight: Radius.circular(24))), 25 | builder: (_) => const OnBoardContent()); 26 | }); 27 | } 28 | 29 | @override 30 | Widget build(BuildContext context) { 31 | return Scaffold( 32 | body: Image.asset( 33 | "images/bg_image.png", 34 | height: double.infinity, 35 | fit: BoxFit.cover, 36 | )); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/bottomsheetanimation/components/landend_content.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | class LandendContent extends StatelessWidget { 3 | const LandendContent({Key? key}) : super(key: key); 4 | 5 | @override 6 | Widget build(BuildContext context) { 7 | return Padding( 8 | padding: const EdgeInsets.all(24), 9 | child: Column( 10 | mainAxisSize: MainAxisSize.min, 11 | crossAxisAlignment: CrossAxisAlignment.start, 12 | children: [ 13 | Text( 14 | "Find Your \nDream Jobs", 15 | style: Theme.of(context).textTheme.labelLarge?.copyWith( 16 | fontWeight: FontWeight.bold, fontSize: 42), 17 | ), 18 | const SizedBox( 19 | height: 16, 20 | ), 21 | Text( 22 | "Get your dream job near by \nyou or any places", 23 | style: Theme.of(context).textTheme.labelLarge?.copyWith( 24 | color: Colors.blueGrey.shade300, fontWeight: FontWeight.bold, fontSize: 24), 25 | ) 26 | ], 27 | ), 28 | );; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/bottomsheetanimation/components/on_board_content.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/bottomsheetanimation/components/landend_content.dart'; 3 | import 'package:ui_flutter/bottomsheetanimation/components/sign_up_content.dart'; 4 | 5 | class OnBoardContent extends StatefulWidget { 6 | const OnBoardContent({Key? key}) : super(key: key); 7 | 8 | @override 9 | State createState() => _OnBoardContentState(); 10 | } 11 | 12 | class _OnBoardContentState extends State { 13 | late PageController pageController; 14 | 15 | @override 16 | void initState() { 17 | pageController = PageController() 18 | ..addListener(() { 19 | setState(() {}); 20 | }); 21 | super.initState(); 22 | } 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | final double progress = 27 | pageController.hasClients ? pageController.page ?? 0 : 0; 28 | return SizedBox( 29 | height: 400 + progress * 140, 30 | child: Stack( 31 | fit: StackFit.expand, 32 | children: [ 33 | Column( 34 | children: [ 35 | const SizedBox( 36 | height: 16, 37 | ), 38 | Expanded( 39 | child: PageView( 40 | controller: pageController, 41 | children: const [LandendContent(), SignUpContent()], 42 | )) 43 | ], 44 | ), 45 | Positioned( 46 | height: 56, 47 | bottom: 32 + progress * 140, 48 | right: 16, 49 | child: GestureDetector( 50 | onTap: () { 51 | if(pageController.page == 0) { 52 | pageController.animateToPage(1, duration: const Duration(milliseconds: 500), curve: Curves.ease); 53 | } 54 | }, 55 | child: Container( 56 | padding: const EdgeInsets.symmetric(horizontal: 24), 57 | decoration: const BoxDecoration( 58 | borderRadius: BorderRadius.all(Radius.circular(25)), 59 | gradient: LinearGradient( 60 | begin: Alignment.bottomLeft, 61 | end: Alignment.topRight, 62 | stops: [ 63 | 0.4, 64 | 0.8 65 | ], 66 | colors: [ 67 | Color.fromARGB(255, 123, 104, 80), 68 | Color.fromARGB(255, 205, 133, 234) 69 | ])), 70 | child: DefaultTextStyle( 71 | style: const TextStyle( 72 | fontSize: 16, fontWeight: FontWeight.w600), 73 | child: Row( 74 | mainAxisAlignment: MainAxisAlignment.center, 75 | children: [ 76 | SizedBox( 77 | width: 92 + progress * 32, 78 | child: Stack( 79 | fit: StackFit.passthrough, 80 | children: [ 81 | Opacity( 82 | opacity: progress, 83 | child: const Text( 84 | "Create Account", 85 | maxLines: 1, 86 | overflow: TextOverflow.fade, 87 | softWrap: false, 88 | ) 89 | ), 90 | Opacity( 91 | opacity: 1- progress, 92 | child: const Text("Get Started") 93 | ) 94 | ], 95 | ), 96 | ), 97 | const Icon( 98 | Icons.chevron_right, 99 | size: 24, 100 | color: Colors.white, 101 | ) 102 | ], 103 | ), 104 | ), 105 | ), 106 | ), 107 | ) 108 | ], 109 | ), 110 | ); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /lib/bottomsheetanimation/components/sign_up_content.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SignUpContent extends StatelessWidget { 4 | const SignUpContent({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return Padding( 9 | padding: const EdgeInsets.all(24), 10 | child: SingleChildScrollView( 11 | child: Column( 12 | crossAxisAlignment: CrossAxisAlignment.start, 13 | children: [ 14 | const Text( 15 | "Create an Account", 16 | style: TextStyle(fontSize: 26, fontWeight: FontWeight.bold), 17 | ), 18 | const SizedBox( 19 | height: 32, 20 | ), 21 | TextFieldWidget(label: "Email Address", iconData: Icons.email), 22 | const SizedBox(height: 16,), 23 | TextFieldWidget(label: "Password", iconData: Icons.lock), 24 | const SizedBox(height: 200), 25 | Text( 26 | "Already have an account? Sign in.", 27 | style: TextStyle(fontSize: 16, color: Colors.blueGrey.shade300), 28 | ) 29 | ], 30 | ), 31 | ), 32 | ); 33 | } 34 | } 35 | 36 | class TextFieldWidget extends StatelessWidget { 37 | final String label; 38 | final IconData iconData; 39 | final bool isHidden; 40 | TextFieldWidget({ 41 | required this.label, 42 | required this.iconData, 43 | this.isHidden = false, 44 | Key? key 45 | }) : super(key: key); 46 | 47 | @override 48 | Widget build(BuildContext context) { 49 | return Padding(padding: EdgeInsets.all(16), 50 | child: Flexible( 51 | child: TextField( 52 | cursorColor: Colors.pink, 53 | obscureText: isHidden, 54 | autocorrect: !isHidden, 55 | decoration: InputDecoration( 56 | labelText: label, 57 | labelStyle: TextStyle( 58 | color: Colors.grey.shade400, fontSize: 18 59 | ), 60 | suffixIcon: Icon( 61 | iconData, 62 | color: Colors.grey.shade400, 63 | ), 64 | focusedBorder: UnderlineInputBorder( 65 | borderSide: BorderSide( 66 | color: Colors.pink.shade400, 67 | ), 68 | ), 69 | ), 70 | ), 71 | ),); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /lib/coinbase/models/coinbase_coin.dart: -------------------------------------------------------------------------------- 1 | class CoinbaseCoin { 2 | final String ticker; 3 | final String fullName; 4 | final double price; 5 | final String imageUrl; 6 | final String algorithm; 7 | final num blockNumbers; 8 | final num blockTime; 9 | final num blockReward; 10 | final String assetLaunchDate; 11 | final num maxSupply; 12 | 13 | const CoinbaseCoin( { 14 | required this.ticker, 15 | required this.fullName, 16 | required this.price, 17 | required this.imageUrl, 18 | required this.algorithm, 19 | required this.blockNumbers, 20 | required this.blockTime, 21 | required this.blockReward, 22 | required this.assetLaunchDate, 23 | required this.maxSupply }); 24 | 25 | factory CoinbaseCoin.fromMap(Map map) { 26 | return CoinbaseCoin( 27 | ticker: map['CoinInfo']?['Name'] ?? '', 28 | fullName: map['CoinInfo']?['FullName'] ?? '', 29 | price: (map['RAW']?['USD']?['PRICE'] ?? 0).toDouble(), 30 | imageUrl: "https://cryptocompare.com" + map['CoinInfo']?['ImageUrl'], 31 | algorithm: map['CoinInfo']?['Algorithm'] ?? '', 32 | blockNumbers: map['CoinInfo']?['BlockNumber'] ?? 0, 33 | blockTime: map['CoinInfo']?['BlockTime'] ?? 0, 34 | blockReward: map['CoinInfo']?['BlockReward'] ?? 0, 35 | assetLaunchDate: map['CoinInfo']?['AssetLaunchDate'] ?? '', 36 | maxSupply: map['CoinInfo']?['MaxSupply'] ?? 0); 37 | } 38 | } -------------------------------------------------------------------------------- /lib/coinbase/models/coinbase_coin_data.dart: -------------------------------------------------------------------------------- 1 | class CoinbaseCoinData { 2 | final num time; 3 | final num high; 4 | final num low; 5 | final num open; 6 | final num volumeFrom; 7 | final num volumeTo; 8 | final num close; 9 | final String conversionType; 10 | final String conversionSymbol; 11 | 12 | CoinbaseCoinData( 13 | {required this.time, 14 | required this.high, 15 | required this.low, 16 | required this.open, 17 | required this.volumeFrom, 18 | required this.volumeTo, 19 | required this.close, 20 | required this.conversionType, 21 | required this.conversionSymbol}); 22 | 23 | factory CoinbaseCoinData.toFromMap(Map map) { 24 | return CoinbaseCoinData( 25 | time: map['time'] ?? 0, 26 | high: map['high'] ?? 0.0, 27 | low: map['low'] ?? 0.0, 28 | open: map['open'] ?? 0.0, 29 | volumeFrom: map['volumefrom'] ?? 0.0, 30 | volumeTo: map['volumeto'] ?? 0.0, 31 | close: map['close'] ?? 0.0, 32 | conversionType: map['conversionType'] ?? "", 33 | conversionSymbol: map['conversionSymbol'] ?? "" 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /lib/coinbase/models/coinbase_data_error.dart: -------------------------------------------------------------------------------- 1 | class CoinbaseDataError { 2 | final String message; 3 | 4 | const CoinbaseDataError({this.message = ''}); 5 | } -------------------------------------------------------------------------------- /lib/coinbase/pages/coinbase_homepage.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/coinbase/services/coinbase_repository.dart'; 3 | 4 | import '../widgets/coibase_bottombar.dart'; 5 | import '../widgets/coinbase_asset_viewheader.dart'; 6 | import '../widgets/coinbase_balance_header.dart'; 7 | import '../widgets/coinbase_coin_display.dart'; 8 | import '../widgets/coinbase_topbar.dart'; 9 | 10 | class CoinbaseHomepage extends StatefulWidget { 11 | const CoinbaseHomepage({Key? key}) : super(key: key); 12 | 13 | @override 14 | State createState() => _CoinbaseHomepageState(); 15 | } 16 | 17 | class _CoinbaseHomepageState extends State { 18 | @override 19 | Widget build(BuildContext context) { 20 | 21 | return Scaffold( 22 | backgroundColor: Colors.white, 23 | body: SafeArea( 24 | child: SizedBox( 25 | height: MediaQuery.of(context).size.height, 26 | child: ListView( 27 | children: const [ 28 | CoinbaseTopBar(), 29 | CoinbaseBalanceHeader(balance: 259.54), 30 | CoinbaseAssetViewHeader(), 31 | CoinbaseCoinDisplay() 32 | ], 33 | ), 34 | ), 35 | ), 36 | bottomNavigationBar: CoinbaseBottomBar( 37 | selectIndex: (i) { 38 | // change the page according to the index 39 | // uncomment in case you want to implement more pages and make sure 40 | // to create a _selectedIndex variable 41 | 42 | // setState((){ 43 | // _selectedIndex = i; 44 | // }) 45 | }, 46 | ), 47 | ); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /lib/coinbase/services/coinbase_repository.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:developer'; 3 | 4 | import 'package:http/http.dart' as http; 5 | import 'package:ui_flutter/coinbase/models/coinbase_coin.dart'; 6 | import 'package:ui_flutter/coinbase/models/coinbase_coin_data.dart'; 7 | import 'package:ui_flutter/coinbase/models/coinbase_data_error.dart'; 8 | class CoinbaseRepository { 9 | static const String _baseUrl = "https://min-api.cryptocompare.com/"; 10 | 11 | static Future> getCoins() async { 12 | const requestUrl = "${_baseUrl}data/top/totalvolfull?limit=50&tsym=USD&page=0"; 13 | 14 | try { 15 | final response = await http.Client().get(Uri.parse(requestUrl)); 16 | if(response.statusCode == 200) { 17 | //log("Vikas " + response.body.toString()); 18 | final json = jsonDecode(response.body) as Map; 19 | final data = json['Data'] as List; 20 | return data.map((e) { 21 | return CoinbaseCoin.fromMap(e); 22 | }).toList(); 23 | } else { 24 | throw const CoinbaseDataError(message: "Failed to load currencies"); 25 | } 26 | } catch (err) { 27 | throw CoinbaseDataError(message: err.toString()); 28 | } 29 | } 30 | 31 | static Future> getCoinHourlyData(String ticker) async { 32 | final requestUrl = '${_baseUrl}data/v2/histohour?fsym=$ticker&tsym=USD&limit=25'; 33 | try { 34 | final response = await http.Client().get(Uri.parse(requestUrl)); 35 | if(response.statusCode == 200) { 36 | final json = jsonDecode(response.body) as Map; 37 | final data = json['Data']['Data'] as List; 38 | log("Response : ${data.toString()}"); 39 | return data.map((e) { 40 | return CoinbaseCoinData.toFromMap(e); 41 | }).toList(); 42 | } else { 43 | log("Response : fialed"); 44 | throw const CoinbaseDataError(message: "Failed to load Coins data!"); 45 | } 46 | } catch(err) { 47 | log("Response : error $err"); 48 | throw CoinbaseDataError(message: err.toString()); 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /lib/coinbase/utils/coinbase_theme.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CoinbaseTheme{ 4 | static Color color = const Color(0xFF0150F5); 5 | } -------------------------------------------------------------------------------- /lib/coinbase/widgets/coibase_bottombar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/coinbase/utils/coinbase_theme.dart'; 3 | 4 | class CoinbaseBottomBar extends StatefulWidget { 5 | final Function(int) selectIndex; 6 | 7 | const CoinbaseBottomBar({required this.selectIndex, Key? key}) 8 | : super(key: key); 9 | 10 | @override 11 | State createState() => _CoinbaseBottomBarState(); 12 | } 13 | 14 | class _CoinbaseBottomBarState extends State { 15 | int _selectedIndex = 1; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return BottomAppBar( 20 | color: Colors.white, 21 | child: SizedBox( 22 | height: 56, 23 | width: MediaQuery.of(context).size.width, 24 | child: Padding( 25 | padding: const EdgeInsets.symmetric(horizontal: 0), 26 | child: Row( 27 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 28 | children: [ 29 | BottomIconButton( 30 | title: "Assets", 31 | icon: Icons.pie_chart_outline, 32 | isSelected: _selectedIndex == 0, 33 | onPressed: () { 34 | setState(() { 35 | _selectedIndex = 0; 36 | widget.selectIndex(0); 37 | }); 38 | }), 39 | BottomIconButton( 40 | title: "Trade", 41 | icon: Icons.bar_chart, 42 | isSelected: _selectedIndex == 1, 43 | onPressed: () { 44 | setState(() { 45 | _selectedIndex = 1; 46 | widget.selectIndex(1); 47 | }); 48 | }), 49 | BottomIconButton2( 50 | icon: Icons.compare_arrows, 51 | onPressed: () { 52 | setState(() { 53 | widget.selectIndex(2); 54 | }); 55 | }), 56 | BottomIconButton( 57 | title: "Pay", 58 | icon: Icons.circle_outlined, 59 | isSelected: _selectedIndex == 3, 60 | onPressed: () { 61 | setState(() { 62 | _selectedIndex = 3; 63 | widget.selectIndex(3); 64 | }); 65 | }), 66 | BottomIconButton( 67 | title: "For You", 68 | icon: Icons.account_box, 69 | isSelected: _selectedIndex == 4, 70 | onPressed: () { 71 | setState(() { 72 | _selectedIndex = 4; 73 | widget.selectIndex(4); 74 | }); 75 | }), 76 | ], 77 | ), 78 | ), 79 | ), 80 | ); 81 | } 82 | } 83 | 84 | class BottomIconButton extends StatelessWidget { 85 | const BottomIconButton( 86 | {required this.title, 87 | required this.icon, 88 | required this.isSelected, 89 | required this.onPressed, 90 | Key? key}) 91 | : super(key: key); 92 | 93 | final String title; 94 | final IconData icon; 95 | final bool isSelected; 96 | final Function() onPressed; 97 | 98 | @override 99 | Widget build(BuildContext context) { 100 | return Column( 101 | crossAxisAlignment: CrossAxisAlignment.center, 102 | children: [ 103 | IconButton( 104 | onPressed: onPressed, 105 | icon: Icon( 106 | icon, 107 | size: 25, 108 | color: isSelected 109 | ? CoinbaseTheme.color 110 | : Colors.black.withOpacity(0.75), 111 | )), 112 | Text( 113 | title, 114 | style: TextStyle( 115 | fontSize: 12, 116 | height: .1, 117 | color: isSelected 118 | ? CoinbaseTheme.color 119 | : Colors.black.withOpacity(0.75)), 120 | ) 121 | ], 122 | ); 123 | } 124 | } 125 | 126 | class BottomIconButton2 extends StatelessWidget { 127 | const BottomIconButton2( 128 | {required this.icon, required this.onPressed, Key? key}) 129 | : super(key: key); 130 | 131 | final IconData icon; 132 | final Function() onPressed; 133 | 134 | @override 135 | Widget build(BuildContext context) { 136 | return CircleAvatar( 137 | backgroundColor: CoinbaseTheme.color, 138 | child: IconButton( 139 | onPressed: onPressed, 140 | icon: Icon(icon, size: 25, color: Colors.white)), 141 | ); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /lib/coinbase/widgets/coinbase_asset_viewheader.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CoinbaseAssetViewHeader extends StatelessWidget { 4 | const CoinbaseAssetViewHeader({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return Padding( 9 | padding: const EdgeInsets.only(top: 15, left: 15, right: 15, bottom: 25), 10 | child: Row( 11 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 12 | children: [ 13 | const Text( 14 | "Top assets", 15 | style: TextStyle( 16 | fontSize: 20, color: Colors.black, fontWeight: FontWeight.bold), 17 | ), 18 | Row( 19 | children: const [ 20 | Text( 21 | "View all", 22 | style: TextStyle( 23 | color: Colors.black, 24 | fontSize: 16, 25 | fontWeight: FontWeight.w600), 26 | ), 27 | Icon(Icons.keyboard_arrow_down) 28 | ], 29 | ) 30 | ], 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/coinbase/widgets/coinbase_balance_header.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CoinbaseBalanceHeader extends StatelessWidget { 4 | final double balance; 5 | 6 | const CoinbaseBalanceHeader({required this.balance, Key? key}) 7 | : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Padding( 12 | padding: const EdgeInsets.all(15), 13 | child: Column( 14 | crossAxisAlignment: CrossAxisAlignment.start, 15 | children: [ 16 | Text( 17 | "Total balance", 18 | style: 19 | TextStyle(fontSize: 15, color: Colors.black.withOpacity(0.55)), 20 | ), 21 | Text( 22 | "\$ ${balance.toStringAsFixed(2)}", 23 | style: const TextStyle( 24 | fontSize: 25, color: Colors.black, fontWeight: FontWeight.bold), 25 | ) 26 | ], 27 | ), 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /lib/coinbase/widgets/coinbase_coin_details_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:fl_chart/fl_chart.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:ui_flutter/coinbase/models/coinbase_coin.dart'; 6 | import 'package:ui_flutter/coinbase/models/coinbase_coin_data.dart'; 7 | import 'package:ui_flutter/coinbase/services/coinbase_repository.dart'; 8 | import 'package:ui_flutter/coinbase/utils/coinbase_theme.dart'; 9 | 10 | class CoinbaseCoinDetails extends StatefulWidget { 11 | final CoinbaseCoin coinbaseCoin; 12 | 13 | const CoinbaseCoinDetails({required this.coinbaseCoin, Key? key}) 14 | : super(key: key); 15 | 16 | @override 17 | State createState() => _CoinbaseCoinDetailsState(); 18 | } 19 | 20 | class _CoinbaseCoinDetailsState extends State { 21 | late Future> _getCoinHourly; 22 | late double _coinPrice; 23 | 24 | @override 25 | void initState() { 26 | _getCoinHourly = 27 | CoinbaseRepository.getCoinHourlyData(widget.coinbaseCoin.ticker); 28 | _coinPrice = widget.coinbaseCoin.price; 29 | super.initState(); 30 | } 31 | 32 | convertToSpots(List coinData) { 33 | final List spot = []; 34 | double maxPrice = 0.0; 35 | double minPrice = double.maxFinite; 36 | double maxTime = 0.0; 37 | double minTime = double.maxFinite; 38 | const normalizer = 1000; 39 | 40 | //for loop over coin data 41 | for (var i = 0; i < coinData.length; i++) { 42 | final CoinbaseCoinData coin = coinData[i]; 43 | final double price = coin.high.toDouble(); 44 | final double time = coin.time.toDouble() / normalizer; 45 | if (price > maxPrice) { 46 | maxPrice = price; 47 | } 48 | if (price < minPrice) { 49 | minPrice = price; 50 | } 51 | if (time > maxTime) { 52 | maxTime = time; 53 | } 54 | if (time < minTime) { 55 | minTime = time; 56 | } 57 | spot.add(FlSpot(time, price)); 58 | } 59 | return [spot, maxPrice, maxTime, minPrice, minTime]; 60 | } 61 | 62 | @override 63 | Widget build(BuildContext context) { 64 | return Scaffold( 65 | backgroundColor: Colors.white, 66 | appBar: AppBar( 67 | backgroundColor: Colors.white, 68 | title: Text( 69 | widget.coinbaseCoin.fullName, 70 | style: const TextStyle( 71 | color: Colors.black, 72 | ), 73 | ), 74 | leading: IconButton( 75 | onPressed: () { 76 | Navigator.pop(context); 77 | }, 78 | icon: const Icon(Icons.arrow_back, color: Colors.black), 79 | ), 80 | ), 81 | body: SafeArea( 82 | child: Padding( 83 | padding: const EdgeInsets.only(left: 15, right: 15, top: 40), 84 | child: ListView( 85 | children: [ 86 | Text( 87 | "${widget.coinbaseCoin.fullName} price", 88 | style: TextStyle( 89 | fontWeight: FontWeight.normal, 90 | fontSize: 14, 91 | color: Colors.grey.shade700), 92 | ), 93 | Text( 94 | "\$ ${_coinPrice.toStringAsFixed(2)} ", 95 | style: const TextStyle( 96 | fontWeight: FontWeight.bold, 97 | fontSize: 28, 98 | color: Colors.black), 99 | ), 100 | //graph here 101 | const SizedBox( 102 | height: 50, 103 | ), 104 | FutureBuilder>( 105 | future: _getCoinHourly, 106 | builder: (context, snapshot) { 107 | if (snapshot.connectionState == ConnectionState.done && 108 | snapshot.data != null) { 109 | final f = convertToSpots(snapshot.data!); 110 | return CoinHourlyWidget( 111 | flsopts: f[0], 112 | maxPrice: f[1], 113 | maxTime: f[2], 114 | minPrice: f[3], 115 | minTime: f[4], 116 | priceCallback: (d) { 117 | setState(() { 118 | _coinPrice = d ?? widget.coinbaseCoin.price; 119 | }); 120 | }); 121 | } 122 | return const Text("Loading..."); 123 | }), 124 | coinAdditionalInfo(), 125 | const SizedBox( 126 | height: 25, 127 | ), 128 | ElevatedButton( 129 | onPressed: () {}, 130 | style: ButtonStyle( 131 | shape: MaterialStateProperty.all(RoundedRectangleBorder( 132 | borderRadius: BorderRadius.circular(25))), 133 | padding: MaterialStateProperty.all( 134 | const EdgeInsets.symmetric( 135 | horizontal: 0, vertical: 15)), 136 | backgroundColor: 137 | MaterialStateProperty.all(CoinbaseTheme.color)), 138 | child: const Text( 139 | "Trade", 140 | style: TextStyle(fontSize: 18, color: Colors.white), 141 | )) 142 | ], 143 | ), 144 | )), 145 | ); 146 | } 147 | 148 | Widget coinAdditionalInfo() { 149 | return Column( 150 | crossAxisAlignment: CrossAxisAlignment.start, 151 | children: [ 152 | Text( 153 | widget.coinbaseCoin.fullName, 154 | style: const TextStyle(fontSize: 22, fontWeight: FontWeight.bold), 155 | ), 156 | Text( 157 | widget.coinbaseCoin.ticker, 158 | style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w300), 159 | ), 160 | const SizedBox( 161 | height: 10, 162 | ), 163 | Container( 164 | width: MediaQuery.of(context).size.width, 165 | height: 1, 166 | color: Colors.grey.shade300, 167 | ), 168 | const SizedBox( 169 | height: 10, 170 | ), 171 | const Text( 172 | "Additional Information:", 173 | style: TextStyle(fontWeight: FontWeight.w500, fontSize: 18), 174 | ), 175 | const SizedBox( 176 | height: 10, 177 | ), 178 | Text( 179 | "Algorithm: ${widget.coinbaseCoin.algorithm}", 180 | style: const TextStyle(fontSize: 16), 181 | ), 182 | Text( 183 | "Block Number: ${widget.coinbaseCoin.blockNumbers.toStringAsFixed(2)}", 184 | style: const TextStyle(fontSize: 16), 185 | ), 186 | Text( 187 | "Block Reward: ${widget.coinbaseCoin.blockReward.toStringAsFixed(2)}", 188 | style: const TextStyle(fontSize: 16), 189 | ), 190 | Text( 191 | "Block Time: ${widget.coinbaseCoin.blockTime.toStringAsFixed(2)}", 192 | style: const TextStyle(fontSize: 16), 193 | ), 194 | Text( 195 | "Max Supply: ${widget.coinbaseCoin.maxSupply}", 196 | style: const TextStyle(fontSize: 16), 197 | ), 198 | ], 199 | ); 200 | } 201 | } 202 | 203 | class CoinHourlyWidget extends StatefulWidget { 204 | final List flsopts; 205 | final double maxPrice; 206 | final double maxTime; 207 | final double minPrice; 208 | final double minTime; 209 | final Function(double?) priceCallback; 210 | 211 | const CoinHourlyWidget( 212 | {required this.flsopts, 213 | required this.maxPrice, 214 | required this.maxTime, 215 | required this.minPrice, 216 | required this.minTime, 217 | required this.priceCallback, 218 | Key? key}) 219 | : super(key: key); 220 | 221 | @override 222 | State createState() => _CoinHourlyWidgetState(); 223 | } 224 | 225 | class _CoinHourlyWidgetState extends State { 226 | @override 227 | Widget build(BuildContext context) { 228 | return AspectRatio( 229 | aspectRatio: 1.7, 230 | child: LineChart(LineChartData( 231 | backgroundColor: Colors.transparent, 232 | gridData: FlGridData( 233 | show: false, 234 | drawVerticalLine: true, 235 | horizontalInterval: 1, 236 | verticalInterval: 1), 237 | lineTouchData: LineTouchData( 238 | enabled: true, 239 | touchCallback: (c, cc) { 240 | widget.priceCallback(cc?.lineBarSpots?[0].y); 241 | }, 242 | touchTooltipData: LineTouchTooltipData( 243 | tooltipBgColor: Colors.transparent, 244 | tooltipPadding: const EdgeInsets.all(10), 245 | ), 246 | ), 247 | showingTooltipIndicators: [], 248 | titlesData: FlTitlesData( 249 | show: true, 250 | rightTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)), 251 | topTitles: AxisTitles( 252 | sideTitles: SideTitles(showTitles: false), 253 | ), 254 | bottomTitles: AxisTitles( 255 | sideTitles: SideTitles(showTitles: false), 256 | ), 257 | leftTitles: AxisTitles( 258 | sideTitles: SideTitles(showTitles: false), 259 | ), 260 | ), 261 | borderData: FlBorderData( 262 | show: true, 263 | border: Border.all(color: Colors.white, width: 0), 264 | ), 265 | minX: widget.minTime, 266 | maxX: widget.maxTime, 267 | minY: widget.minPrice, 268 | maxY: widget.maxPrice, 269 | lineBarsData: [ 270 | LineChartBarData( 271 | spots: widget.flsopts, 272 | isCurved: false, 273 | color: CoinbaseTheme.color, 274 | barWidth: 2, 275 | isStrokeCapRound: false, 276 | dotData: FlDotData( 277 | show: false, 278 | ), 279 | ) 280 | ])), 281 | ); 282 | } 283 | } 284 | -------------------------------------------------------------------------------- /lib/coinbase/widgets/coinbase_coin_display.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/coinbase/services/coinbase_repository.dart'; 3 | import 'package:ui_flutter/coinbase/widgets/coinbase_coin_details_page.dart'; 4 | 5 | import '../models/coinbase_coin.dart'; 6 | 7 | class CoinbaseCoinDisplay extends StatefulWidget { 8 | const CoinbaseCoinDisplay({Key? key}) : super(key: key); 9 | 10 | @override 11 | State createState() => _CoinbaseCoinDisplayState(); 12 | } 13 | 14 | class _CoinbaseCoinDisplayState extends State { 15 | late Future> _getCoins; 16 | 17 | @override 18 | void initState() { 19 | _getCoins = CoinbaseRepository.getCoins(); 20 | super.initState(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | return FutureBuilder>( 26 | future: _getCoins, 27 | builder: (context, snapshot) { 28 | if (snapshot.connectionState == ConnectionState.done && 29 | snapshot.data != null) { 30 | final coins = snapshot.data ?? []; 31 | return Padding( 32 | padding: 33 | const EdgeInsets.only(bottom: 40), 34 | child: Column( 35 | children: coins 36 | .map((coin) => InkWell( 37 | onTap: () { 38 | Navigator.push(context, MaterialPageRoute( 39 | builder: (_) => CoinbaseCoinDetails(coinbaseCoin: coin) 40 | )); 41 | }, child: CoinbaseCard(coinbaseCoin: coin))) 42 | .toList(), 43 | ), 44 | ); 45 | } 46 | return const Center(child: Text("Loading")); 47 | }); 48 | } 49 | } 50 | 51 | class CoinbaseCard extends StatelessWidget { 52 | final CoinbaseCoin coinbaseCoin; 53 | 54 | const CoinbaseCard({required this.coinbaseCoin, Key? key}) : super(key: key); 55 | 56 | @override 57 | Widget build(BuildContext context) { 58 | return Padding( 59 | padding: const EdgeInsets.only(left: 15.0, right: 15.0, bottom: 12, top: 12), 60 | child: SizedBox( 61 | width: double.infinity, 62 | height: 50, 63 | child: Row( 64 | children: [ 65 | Image.network( 66 | coinbaseCoin.imageUrl, 67 | width: 35, 68 | ), 69 | const SizedBox( 70 | width: 15, 71 | ), 72 | Column( 73 | mainAxisAlignment: MainAxisAlignment.center, 74 | crossAxisAlignment: CrossAxisAlignment.start, 75 | children: [ 76 | Text( 77 | coinbaseCoin.fullName, 78 | style: const TextStyle( 79 | fontSize: 16, 80 | fontWeight: FontWeight.w700, 81 | ), 82 | ), 83 | Text( 84 | coinbaseCoin.ticker.toUpperCase(), 85 | style: const TextStyle( 86 | fontSize: 14, fontWeight: FontWeight.w300), 87 | ) 88 | ], 89 | ), 90 | const Spacer(), 91 | Text( 92 | "\$ ${coinbaseCoin.price.toStringAsFixed(2)}", 93 | style: 94 | const TextStyle(fontSize: 16, fontWeight: FontWeight.normal), 95 | ) 96 | ], 97 | ), 98 | )); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/coinbase/widgets/coinbase_topbar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CoinbaseTopBar extends StatelessWidget { 4 | const CoinbaseTopBar({Key? key}) : super(key: key); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return Row( 9 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 10 | children: [ 11 | IconButton( 12 | onPressed: () {}, 13 | icon: const Icon(Icons.menu), 14 | ), 15 | IconButton( 16 | onPressed: () {}, 17 | icon: const Icon(Icons.notifications) 18 | ) 19 | ], 20 | ); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/counterdisplay/counter_display.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CounterDisplay extends StatefulWidget { 4 | const CounterDisplay({super.key}); 5 | 6 | 7 | @override 8 | State createState() => _CounterDisplayState(); 9 | 10 | } 11 | 12 | class _CounterDisplayState extends State { 13 | 14 | int _counter = 0; 15 | 16 | void _increment() { 17 | setState(() { 18 | ++_counter; 19 | }); 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return Center( 25 | child: Row( 26 | mainAxisAlignment: MainAxisAlignment.center, 27 | children: [ 28 | CounterDisplayText(title: "Increment", onPressed: _increment), 29 | const SizedBox(width: 20), 30 | CounterIncrement(counter:_counter) 31 | ], 32 | ), 33 | ); 34 | } 35 | } 36 | 37 | class CounterIncrement extends StatelessWidget { 38 | 39 | const CounterIncrement({ 40 | required this.counter, 41 | super.key 42 | }); 43 | 44 | final int counter; 45 | 46 | @override 47 | Widget build(BuildContext context) { 48 | return Text("Count $counter"); 49 | } 50 | 51 | } 52 | 53 | class CounterDisplayText extends StatelessWidget { 54 | 55 | const CounterDisplayText({ 56 | required this.title, 57 | required this.onPressed, 58 | super.key 59 | }); 60 | 61 | final String title; 62 | 63 | final VoidCallback onPressed; 64 | 65 | 66 | @override 67 | Widget build(BuildContext context) { 68 | return ElevatedButton( 69 | onPressed: onPressed, 70 | child: Text(title) 71 | ); 72 | } 73 | } -------------------------------------------------------------------------------- /lib/disneyui/brand_logos.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BrandLogos extends StatelessWidget { 4 | const BrandLogos({Key? key}) : super(key: key); 5 | static List logos = [ 6 | 'https://www.nicepng.com/png/full/23-233994_disney-logo-black-and-white-nba-finals-logo.png', 7 | 'https://www.brandloyalty.com/cache/pixar.8711/pixar-s800x600.png', 8 | 'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Marvel_Logo.svg/2560px-Marvel_Logo.svg.png', 9 | 'https://www.freepnglogos.com/uploads/star-wars-logo-31.png', 10 | 'https://cutewallpaper.org/24/national-geographic-logo-png/national-geographic-keith-ladzinski.png', 11 | ]; 12 | 13 | final startColor = const Color.fromARGB(255, 54, 56, 70); 14 | final endColor = const Color.fromARGB(255, 39, 41, 53); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return SizedBox( 19 | height: 70, 20 | child: ListView.builder( 21 | scrollDirection: Axis.horizontal, 22 | itemCount: logos.length, 23 | physics: const ClampingScrollPhysics(), 24 | itemBuilder: (context, index) { 25 | return showBrandLogo(logos[index]); 26 | } 27 | ), 28 | ); 29 | } 30 | 31 | Widget showBrandLogo(String imageUrl) { 32 | return Container( 33 | height: 80, 34 | width: 80, 35 | margin: const EdgeInsets.all(4), 36 | child: Container( 37 | padding: const EdgeInsets.all(4), 38 | decoration: BoxDecoration( 39 | borderRadius: BorderRadius.circular(10), 40 | border: Border.all( 41 | color: Colors.white54, 42 | width: 0.5 43 | ), 44 | gradient: LinearGradient( 45 | begin: Alignment.topCenter, 46 | end: Alignment.bottomCenter, 47 | colors: [ 48 | startColor, 49 | endColor 50 | ] 51 | ) 52 | ), 53 | child: Image.network(imageUrl, fit: BoxFit.contain,), 54 | ), 55 | ); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /lib/disneyui/carosel_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class CarouselWidget extends StatefulWidget { 4 | const CarouselWidget({Key? key}) : super(key: key); 5 | 6 | @override 7 | State createState() => _CarouselWidgetState(); 8 | } 9 | 10 | class _CarouselWidgetState extends State { 11 | 12 | List images = [ 13 | "https://d23.com/app/uploads/2019/10/00-toy-story-4-az.jpg", 14 | "https://d23.com/app/uploads/2019/09/1-endgame-az.jpg", 15 | "https://d23.com/app/uploads/2017/05/1180w-600h_051917_event-cars-3-screening.jpg", 16 | "https://d23.com/app/uploads/2020/04/1180w-600h_011520-disney-az-frozen2.jpg", 17 | ]; 18 | 19 | int currentPage = 1; 20 | final PageController _pageController = PageController(initialPage: 1, viewportFraction: 0.9); 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return SizedBox( 25 | width: MediaQuery.of(context).size.width, 26 | height: 220, 27 | child: PageView.builder( 28 | controller: _pageController, 29 | itemCount: images.length, 30 | onPageChanged: (page) { 31 | setState(() { 32 | currentPage = page; 33 | }); 34 | }, 35 | pageSnapping: true, 36 | itemBuilder: (context, index) { 37 | bool isCenter = index == currentPage; 38 | return showCarouselImage(images[index], isCenter); 39 | } 40 | ), 41 | ); 42 | } 43 | 44 | AnimatedContainer showCarouselImage(String imageUrl, bool isCenter) { 45 | double margin = isCenter ? 0 : 20; 46 | return AnimatedContainer( 47 | margin: EdgeInsets.symmetric(horizontal: 6, vertical: margin), 48 | duration: const Duration(microseconds: 500), 49 | decoration: BoxDecoration( 50 | borderRadius: BorderRadius.circular(10), 51 | image: DecorationImage(image: NetworkImage(imageUrl), fit: BoxFit.cover) 52 | ), 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /lib/disneyui/disney_bottom_navigation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | Widget disneyBottomNavigation() { 4 | return Container( 5 | color: const Color(0xFF202436), 6 | child: Column( 7 | mainAxisSize: MainAxisSize.min, 8 | crossAxisAlignment: CrossAxisAlignment.stretch, 9 | mainAxisAlignment: MainAxisAlignment.end, 10 | children: [ 11 | const Divider( 12 | color: Colors.white12, 13 | thickness: 0.5, 14 | height: 0.5, 15 | ), 16 | BottomNavigationBar( 17 | items: const [ 18 | BottomNavigationBarItem(icon: Icon(Icons.home), label: "Home"), 19 | BottomNavigationBarItem(icon: Icon(Icons.search), label: "Search"), 20 | BottomNavigationBarItem( 21 | icon: Icon(Icons.download), label: "Downloads"), 22 | BottomNavigationBarItem(icon: CircleAvatar( 23 | radius: 16, 24 | backgroundColor: Colors.white, 25 | child: CircleAvatar( 26 | radius: 15, 27 | backgroundImage: AssetImage("images/micky_mouse.png"), 28 | ), 29 | ), 30 | label: "Profile" 31 | ) 32 | ], 33 | type: BottomNavigationBarType.fixed, 34 | selectedItemColor: Colors.white, 35 | elevation: 0, 36 | backgroundColor: Colors.transparent, 37 | unselectedItemColor: Colors.white54, 38 | showSelectedLabels: true, 39 | showUnselectedLabels: true, 40 | ) 41 | ], 42 | ), 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /lib/disneyui/disney_home_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/disneyui/disney_bottom_navigation.dart'; 3 | import 'package:ui_flutter/disneyui/disneyappbar.dart'; 4 | 5 | import 'brand_logos.dart'; 6 | import 'carosel_widget.dart'; 7 | import 'movie_widget.dart'; 8 | 9 | 10 | class DisneyHomePage extends StatelessWidget { 11 | const DisneyHomePage({Key? key}) : super(key: key); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | backgroundColor: const Color(0xFF202436), 17 | appBar: disneyAppBar(), 18 | bottomNavigationBar: disneyBottomNavigation(), 19 | body: SingleChildScrollView( 20 | child: Column( 21 | children: [ 22 | SizedBox(height: 10), 23 | CarouselWidget(), 24 | SizedBox(height: 20,), 25 | BrandLogos(), 26 | SizedBox(height: 20,), 27 | MovieWidget(title: "Recommended Movie for You",), 28 | SizedBox(height: 20,), 29 | MovieWidget(title: "Hit Movies",) 30 | ], 31 | ), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/disneyui/disneyappbar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | AppBar disneyAppBar() { 5 | return AppBar( 6 | elevation: 0, 7 | backgroundColor: const Color(0xFF202436), 8 | title: SizedBox( 9 | height: kToolbarHeight, 10 | child: Image.asset("images/disney_plus_logo.png", color: Colors.white,), 11 | ), 12 | ); 13 | } -------------------------------------------------------------------------------- /lib/disneyui/movie_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MovieWidget extends StatelessWidget { 4 | String title = ""; 5 | 6 | MovieWidget({required this.title, Key? key}) : super(key: key); 7 | 8 | static List covers = [ 9 | 'https://media.comicbook.com/uploads1/2015/06/antmanposter-139745.jpg', 10 | 'https://i.pinimg.com/236x/92/5d/e8/925de870f00d0f1f83502772bbc6c84c.jpg', 11 | 'https://hips.hearstapps.com/digitalspyuk.cdnds.net/13/18/comics-infinity-1-cover-artwork.jpg', 12 | 'https://i.pinimg.com/originals/69/3b/5a/693b5ae03a25cb9d3a6ce3f567d1f817.jpg', 13 | 'https://i.pinimg.com/736x/fd/12/df/fd12dfea52d3f17c9ef93a148ccf2c4c.jpg', 14 | ]; 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Column( 19 | crossAxisAlignment: CrossAxisAlignment.start, 20 | children: [ 21 | Padding( 22 | padding: EdgeInsets.only(left: 4), 23 | child: Text( 24 | title, 25 | style: Theme.of(context).textTheme.labelMedium?.copyWith( 26 | fontSize: 20, fontWeight: FontWeight.bold, color: Colors.grey), 27 | ), 28 | ), 29 | const SizedBox(height: 5,), 30 | SizedBox( 31 | height: 180, 32 | child: ListView.builder( 33 | scrollDirection: Axis.horizontal, 34 | itemCount: covers.length, 35 | itemBuilder: (context, index) { 36 | return showMovie(covers[index]); 37 | }), 38 | ) 39 | ], 40 | ); 41 | } 42 | 43 | Widget showMovie(String imageUrl) { 44 | return Container( 45 | padding: const EdgeInsets.all(4), 46 | height: 200, 47 | width: 120, 48 | child: Image.network( 49 | imageUrl, 50 | fit: BoxFit.fill, 51 | ), 52 | ); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /lib/form/form_validate.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FormValidate extends StatefulWidget { 4 | const FormValidate({Key? key}) : super(key: key); 5 | 6 | @override 7 | State createState() => _FormValidateState(); 8 | } 9 | 10 | class _FormValidateState extends State { 11 | final _formKey = GlobalKey(); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | body: Padding( 17 | padding: const EdgeInsets.symmetric(vertical: 88.0, horizontal: 20), 18 | child: Form( 19 | key: _formKey, 20 | child: Column( 21 | crossAxisAlignment: CrossAxisAlignment.center, 22 | children: [ 23 | TextFormField( 24 | validator: (value) { 25 | if (value == null || value.isEmpty) { 26 | return "Please enter name"; 27 | } else { 28 | return null; 29 | } 30 | }, 31 | decoration: InputDecoration( 32 | hintText: "Enter Your name", 33 | filled: true, 34 | focusedBorder: InputBorder.none, 35 | enabledBorder: InputBorder.none), 36 | ), 37 | SizedBox(height: 20,), 38 | TextFormField( 39 | validator: (value) { 40 | if (value == null || value.isEmpty) { 41 | return "Please enter name"; 42 | } else { 43 | return null; 44 | } 45 | }, 46 | decoration: InputDecoration( 47 | hintText: "Enter Your name", 48 | filled: true, 49 | border: OutlineInputBorder(), 50 | ), 51 | ), 52 | SizedBox(height: 20,), 53 | TextFormField( 54 | onChanged: (value) { 55 | ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Enter value is $value"))); 56 | }, 57 | validator: (value) { 58 | if (value == null || value.isEmpty) { 59 | return "Please enter name"; 60 | } else { 61 | return null; 62 | } 63 | }, 64 | decoration: InputDecoration( 65 | hintText: "Enter LOL Your name", 66 | filled: true, 67 | focusedBorder: InputBorder.none, 68 | enabledBorder: InputBorder.none), 69 | ), 70 | Padding( 71 | padding: EdgeInsets.all(10), 72 | child: ElevatedButton( 73 | onPressed: () { 74 | if (_formKey.currentState!.validate()) { 75 | ScaffoldMessenger.of(context).showSnackBar( 76 | const SnackBar(content: Text("Processing Data"))); 77 | } 78 | }, 79 | child: Text("Submit"), 80 | ), 81 | ) 82 | ], 83 | ), 84 | ), 85 | ), 86 | ); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /lib/landing_page_music.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | class LandingPageMusic extends StatelessWidget { 3 | const LandingPageMusic({Key? key}) : super(key: key); 4 | 5 | @override 6 | Widget build(BuildContext context) { 7 | final Size size = MediaQuery.of(context).size; 8 | return Scaffold( 9 | body: Stack( 10 | children: [ 11 | SizedBox( 12 | height: size.height, 13 | width: size.width, 14 | child: const Image( 15 | fit: BoxFit.fitHeight, 16 | image: AssetImage("images/listen_music.jpg"), 17 | ), 18 | ), 19 | Positioned( 20 | bottom: 0, 21 | child: Container( 22 | width: size.width, 23 | height: size.width-100, 24 | decoration: BoxDecoration( 25 | color: Colors.black, 26 | borderRadius: BorderRadius.circular(20) 27 | ), 28 | child: Column( 29 | crossAxisAlignment: CrossAxisAlignment.center, 30 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 31 | children: [ 32 | Text("Let's Enjoy With \nBest Product", style: Theme.of(context).textTheme.titleLarge!.copyWith( 33 | color: Colors.white60, fontWeight: FontWeight.w600, fontSize: 32 34 | ), 35 | textAlign: TextAlign.center, 36 | ), 37 | Text("Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit, sed do \neiusmod tempor incididunt ut", style: Theme.of(context).textTheme.titleLarge!.copyWith( 38 | color: Colors.white60, fontWeight: FontWeight.w600, fontSize: 16 39 | ), 40 | textAlign: TextAlign.center, 41 | ), 42 | ElevatedButton( 43 | onPressed: () { 44 | ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text("Click on Button"))); 45 | }, 46 | style: ElevatedButton.styleFrom( 47 | backgroundColor: Colors.yellow, 48 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)) 49 | ), 50 | child: const Text("Let's Go", style: TextStyle(color: Colors.black),)) 51 | ], 52 | ), 53 | ), 54 | ) 55 | ], 56 | ), 57 | ); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /lib/landingpage/landing_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/landingpage/util/constant.dart'; 3 | import 'package:ui_flutter/landingpage/widget/custom_button.dart'; 4 | import 'package:ui_flutter/landingpage/widget/custom_cricle.dart'; 5 | import 'package:ui_flutter/splash/splash.dart'; 6 | 7 | class LandingPage extends StatelessWidget { 8 | const LandingPage({Key? key}) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | final Size size = MediaQuery.of(context).size; 13 | return Scaffold( 14 | body:Stack( 15 | children: [ 16 | Positioned( 17 | right: 120, 18 | top: -20, 19 | child: CustomCircle(color: darkPurple), 20 | ), 21 | Positioned( 22 | left: 120, 23 | top: 220, 24 | child: CustomCircle(color: lightPurple), 25 | ), 26 | Padding( 27 | padding: const EdgeInsets.all(20.0), 28 | child: Column( 29 | mainAxisAlignment: MainAxisAlignment.end, 30 | crossAxisAlignment: CrossAxisAlignment.start, 31 | children: [ 32 | const Text( 33 | "Let's \nGet Started", 34 | style: TextStyle(fontSize: 50.0, fontWeight: FontWeight.w900), 35 | ), 36 | const Text( 37 | "Grow Together", 38 | style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.w400), 39 | ), 40 | const SizedBox( 41 | height: 20.0, 42 | ), 43 | Center( 44 | child: InkWell( 45 | onTap: () { 46 | Navigator.of(context).push( 47 | MaterialPageRoute(builder: (ctx) => SplashScreen()) 48 | ); 49 | }, 50 | child: CustomButton( 51 | size: size.width * 0.7, 52 | text: 'Join Now', 53 | ), 54 | ), 55 | ), 56 | const SizedBox( 57 | height: 40.0, 58 | ) 59 | ], 60 | ), 61 | ) 62 | ], 63 | ), 64 | ); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /lib/landingpage/util/constant.dart: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | import 'dart:ui'; 5 | 6 | Color darkPurple = const Color(0xFFFF4500); 7 | Color lightPurple = const Color(0xAAFF4500); 8 | -------------------------------------------------------------------------------- /lib/landingpage/widget/custom_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../util/constant.dart'; 4 | 5 | class CustomButton extends StatelessWidget { 6 | const CustomButton({ 7 | super.key, 8 | required this.size, 9 | required this.text, 10 | }); 11 | 12 | final double size; 13 | final String text; 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | width: size, 19 | decoration: BoxDecoration( 20 | color: darkPurple, 21 | borderRadius: const BorderRadius.only( 22 | topLeft: Radius.circular(25), bottomRight: Radius.circular(25))), 23 | child: Padding( 24 | padding: const EdgeInsets.all(10.0), 25 | child: Center( 26 | child: Text( 27 | text, 28 | style: const TextStyle( 29 | color: Colors.white, fontWeight: FontWeight.w600, fontSize: 24), 30 | )), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/landingpage/widget/custom_cricle.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class CustomCircle extends StatelessWidget { 5 | const CustomCircle({ 6 | super.key, required this.color, 7 | }); 8 | 9 | final Color color; 10 | @override 11 | Widget build(BuildContext context) { 12 | return Container( 13 | height: 300, 14 | width: 300, 15 | decoration: BoxDecoration( 16 | color: color, 17 | shape: BoxShape.circle 18 | ), 19 | ); 20 | } 21 | } -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/landingpage/util/constant.dart'; 3 | import 'package:ui_flutter/screens/OtpScreen.dart'; 4 | import 'package:ui_flutter/screens/WhatsAppProfileScreen.dart'; 5 | import 'package:ui_flutter/rippleanimation/RipplesAnimation.dart'; 6 | import 'package:ui_flutter/animatedContainer/AnimatedContainerClass.dart'; 7 | import 'package:ui_flutter/slidemenuanimation/slide_menu_animation.dart'; 8 | import 'package:ui_flutter/splash/splash.dart'; 9 | import 'package:ui_flutter/stack/stack.dart'; 10 | 11 | import 'airbnb/pages/airbnb_homr_page.dart'; 12 | import 'animation/animation_class.dart'; 13 | import 'bottomsheetanimation/bottom_sheet.dart'; 14 | import 'coinbase/pages/coinbase_homepage.dart'; 15 | import 'counterdisplay/counter_display.dart'; 16 | import 'disneyui/disney_home_page.dart'; 17 | import 'donwloadbutton/download_botton.dart'; 18 | import 'form/form_validate.dart'; 19 | import 'landing_page_music.dart'; 20 | import 'landingpage/landing_page.dart'; 21 | import 'shoppinglist/shoppping_list.dart'; 22 | 23 | void main() => runApp(const MyApp()); 24 | 25 | class MyApp extends StatelessWidget { 26 | const MyApp({Key? key}) : super(key: key); 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | return MaterialApp( 31 | title: "Flutter UI", 32 | debugShowCheckedModeBanner: false, 33 | theme: ThemeData(), 34 | home: const BottomSheetWidget(), 35 | ); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/rippleanimation/CirclePainter.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math show sin, pi, sqrt; 3 | 4 | 5 | class CirclePainter extends CustomPainter { 6 | 7 | late final Color colorValue; 8 | late final Animation _animation; 9 | 10 | CirclePainter( 11 | this._animation, { 12 | required this.colorValue, 13 | }) : super(repaint: _animation); 14 | 15 | void circle(Canvas canvas, Rect rect, double value) { 16 | final double opacity = (1.0 - (value / 4.0)).clamp(0.0, 1.0); 17 | final Color color = colorValue.withOpacity(opacity); 18 | final double size = rect.width/2; 19 | final double area = size * size; 20 | final double radius = math.sqrt(area * value / 4); 21 | final Paint paint = Paint()..color = color; 22 | canvas.drawCircle(rect.center, radius, paint); 23 | } 24 | 25 | 26 | 27 | @override 28 | void paint(Canvas canvas, Size size) { 29 | final Rect rect = Rect.fromLTRB(0.0, 0.0, size.width, size.height); 30 | for(int wave = 3; wave >= 0; wave--) { 31 | circle(canvas, rect, wave + _animation.value); 32 | } 33 | } 34 | 35 | @override 36 | bool shouldRepaint(covariant CustomPainter oldDelegate) => true; 37 | 38 | } -------------------------------------------------------------------------------- /lib/rippleanimation/CurveWave.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:math' as math show sin, pi; 3 | 4 | 5 | class CurveWave extends Curve { 6 | //const PulsateCurve(); 7 | @override 8 | double transform(double t) { 9 | if(t ==0 || t == 1) { 10 | return 0.01; 11 | } 12 | return math.sin(t * math.pi); 13 | } 14 | } -------------------------------------------------------------------------------- /lib/rippleanimation/RipplesAnimation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:ui_flutter/rippleanimation/CirclePainter.dart'; 3 | 4 | class RipplesAnimation extends StatefulWidget { 5 | const RipplesAnimation({Key? key}) : super(key: key); 6 | 7 | @override 8 | State createState() => _RipplesAnimationState(); 9 | } 10 | 11 | class _RipplesAnimationState extends State with TickerProviderStateMixin { 12 | late AnimationController _controller; 13 | 14 | @override 15 | void initState() { 16 | super.initState(); 17 | _controller = AnimationController( 18 | duration: const Duration(milliseconds: 2000), 19 | vsync: this, 20 | )..repeat(); 21 | } 22 | 23 | @override 24 | Widget build(BuildContext context) { 25 | Size size = MediaQuery.of(context).size; 26 | return Scaffold( 27 | appBar: AppBar( 28 | title: const Text("Ripple Animation Demo"), 29 | ), 30 | body: Center( 31 | child: CustomPaint( 32 | painter: CirclePainter( 33 | _controller, 34 | colorValue: Colors.blueAccent 35 | ), 36 | child: SizedBox( 37 | width: size.width, 38 | height: size.height, 39 | child: const Center( 40 | child: Text("Searching...", style: TextStyle(color: Colors.white),) 41 | ), 42 | ), 43 | ), 44 | ), 45 | ); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/screens/ChatListScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ChatListScreen extends StatefulWidget { 4 | @override 5 | _ChatListScreenState createState() => _ChatListScreenState(); 6 | } 7 | 8 | class StoryList { 9 | late String name; 10 | late String profilePic; 11 | late Color bgColor; 12 | late String lastMsg; 13 | 14 | StoryList(this.name, this.profilePic, this.bgColor,this.lastMsg); 15 | } 16 | 17 | class _ChatListScreenState extends State { 18 | late List storyLists; 19 | final Color _accentColor = const Color(0xFF164CA2); 20 | 21 | @override 22 | void initState() { 23 | super.initState(); 24 | storyLists = [ 25 | StoryList("Vikas Suthar", "https://cdn.iconscout.com/icon/free/png-256/face-1659511-1410033.png", Colors.amber, "This is last message from Vikas Suthar. Tap to reply"), 26 | StoryList("Deepika Padukon", "https://cdn.iconscout.com/icon/free/png-128/face-1659512-1410034.png", Colors.amber, "This is last message from Deepika Padukon.Tap to reply"), 27 | StoryList("Dev Anand", "https://cdn.iconscout.com/icon/free/png-128/asian-1659529-1410051.png", Colors.amber, "This is last message from Dev Anand. Tap to reply"), 28 | StoryList("Katrina Kaif", "https://cdn.iconscout.com/icon/free/png-128/air-hostess-1659534-1410056.png", Colors.amber, "This is last message from Katrina Kaif. Tap to reply"), 29 | StoryList("Salman khan", "https://cdn.iconscout.com/icon/free/png-128/avatar-1659528-1410050.png", Colors.amber, "This is last message from Salman khan. Tap to reply"), 30 | StoryList("Dev Anand", "https://cdn.iconscout.com/icon/free/png-128/boy-1659526-1410048.png", Colors.amber, "This is last message from Dev Anand. Tap to reply"), 31 | StoryList("Vikky Trivedi", "https://cdn.iconscout.com/icon/free/png-128/business-1659524-1410046.png", Colors.amber, "This is last message from Vikky Trivedi. Tap to reply"), 32 | StoryList("Bhavesh Jain", "https://cdn.iconscout.com/icon/free/png-128/avatar-1659503-1410025.png", Colors.amber, "This is last message from Bhavesh Jain. Tap to reply"), 33 | 34 | ]; 35 | } 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | Size size = MediaQuery.of(context).size; 40 | return Scaffold( 41 | backgroundColor: Colors.blue, 42 | appBar: AppBar( 43 | leading: const Icon(Icons.arrow_back_ios), 44 | elevation: 0, 45 | backgroundColor: Colors.blue, 46 | actions: const [ 47 | Icon(Icons.search), 48 | SizedBox(width: 20.0,) 49 | ], 50 | ), 51 | body: Column( 52 | mainAxisAlignment: MainAxisAlignment.start, 53 | crossAxisAlignment: CrossAxisAlignment.start, 54 | children: [ 55 | Padding( 56 | padding: size.width>600 ? EdgeInsets.all(25.0) : EdgeInsets.all(16.0), 57 | child: const Text( 58 | "Chat with \nyour friends", 59 | style: TextStyle( 60 | color: Colors.white, 61 | fontWeight: FontWeight.bold, 62 | fontSize: 30.0, 63 | fontFamily: 'Raleway'), 64 | ), 65 | ), 66 | Container( 67 | height: 100, 68 | padding: EdgeInsets.only(left: 20.0), 69 | child: Row( 70 | children: [ 71 | Container( 72 | child: addStorywidget(), 73 | ), 74 | Container( 75 | child: storyList() 76 | ), 77 | ], 78 | ), 79 | ), 80 | Expanded( 81 | child: Container( 82 | height: 537, 83 | decoration: const BoxDecoration( 84 | color: Colors.white, 85 | borderRadius: BorderRadius.only( 86 | topRight: Radius.circular(40.0), topLeft: Radius.circular(40.0) 87 | ) 88 | ), 89 | child: profileChatList(), 90 | ), 91 | ) 92 | ], 93 | ), 94 | ); 95 | } 96 | 97 | Widget profileChatList() { 98 | return Expanded( 99 | child: ListView.separated( 100 | separatorBuilder: (BuildContext context, int index) { 101 | return const SizedBox(height: 10.0); 102 | }, 103 | scrollDirection: Axis.vertical, 104 | shrinkWrap: true, 105 | itemCount: storyLists.length, 106 | padding: const EdgeInsets.all(16.0), 107 | itemBuilder: (BuildContext context, int index) { 108 | return ListTile( 109 | contentPadding: const EdgeInsets.all(5.0), 110 | title: Text(storyLists[index].name, style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),), 111 | subtitle: Text(storyLists[index].lastMsg, style: const TextStyle(fontSize: 12.0),), 112 | leading: Container( 113 | width: 50.0, 114 | height: 50.0, 115 | decoration: BoxDecoration( 116 | color: storyLists[index].bgColor, 117 | image: DecorationImage( 118 | image: NetworkImage( 119 | storyLists[index].profilePic), 120 | fit: BoxFit.cover, 121 | ), 122 | borderRadius: const BorderRadius.all(Radius.circular(50.0)), 123 | ), 124 | ), 125 | ); 126 | } 127 | ), 128 | ); 129 | } 130 | 131 | Widget addStorywidget() { 132 | return Container( 133 | child: Column( 134 | mainAxisAlignment: MainAxisAlignment.start, 135 | children: [ 136 | Container( 137 | width: 60.0, 138 | height: 60.0, 139 | decoration: BoxDecoration( 140 | color: const Color(0xff7c94b6), 141 | image: const DecorationImage( 142 | image: NetworkImage( 143 | "https://cdn.iconscout.com/icon/free/png-128/add-new-create-plus-insert-append-interface-2503.png"), 144 | fit: BoxFit.cover, 145 | ), 146 | borderRadius: const BorderRadius.all(Radius.circular(50.0)), 147 | border: Border.all( 148 | color: Colors.orange, 149 | width: 2.0, 150 | ), 151 | ), 152 | ), 153 | const SizedBox(height: 10.0,), 154 | const SizedBox( 155 | width: 60.0, 156 | child: Text( 157 | "Add", 158 | textAlign: TextAlign.center, 159 | style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),), 160 | ) 161 | ], 162 | ), 163 | ); 164 | } 165 | Widget storyList() { 166 | return Expanded( 167 | child: ListView.separated( 168 | scrollDirection: Axis.horizontal, 169 | shrinkWrap: true, 170 | itemCount: storyLists.length, 171 | padding: const EdgeInsets.only(left: 10.0), 172 | itemBuilder: (BuildContext context, int index) { 173 | return Column( 174 | mainAxisAlignment: MainAxisAlignment.start, 175 | children: [ 176 | Container( 177 | width: 60.0, 178 | height: 60.0, 179 | decoration: BoxDecoration( 180 | color: const Color(0xff7c94b6), 181 | image: DecorationImage( 182 | image: NetworkImage( 183 | storyLists[index].profilePic), 184 | fit: BoxFit.cover, 185 | ), 186 | borderRadius: const BorderRadius.all(Radius.circular(50.0)), 187 | border: Border.all( 188 | color: Colors.orange, 189 | width: 2.0, 190 | ), 191 | ), 192 | ), 193 | const SizedBox(height: 10.0,), 194 | SizedBox( 195 | width: 60.0, 196 | child: Text( 197 | textAlign: TextAlign.center, 198 | storyLists[index].name, 199 | overflow: TextOverflow.ellipsis, 200 | softWrap: true, 201 | style: const TextStyle(color: Colors.white, fontWeight: FontWeight.bold),), 202 | ) 203 | ], 204 | ); 205 | }, separatorBuilder: (BuildContext context, int index) { 206 | return const SizedBox(width: 20.0); 207 | },), 208 | ); 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /lib/screens/DrawerScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class DrawerScreen extends StatefulWidget { 4 | const DrawerScreen({Key? key}) : super(key: key); 5 | 6 | @override 7 | DrawerScreenState createState() => DrawerScreenState(); 8 | } 9 | 10 | class DrawerScreenState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Scaffold( 14 | appBar: AppBar( 15 | title: const Text("Drawer Screen"), 16 | ), 17 | body: const Center( 18 | child: Text("Body Part"), 19 | ), 20 | drawer: Drawer( 21 | child: ListView( 22 | padding: EdgeInsets.symmetric(horizontal: 20.0), 23 | children: [ 24 | DrawerHeader(child: Row( 25 | children: [ 26 | Container( 27 | width: 60.0, 28 | height: 60.0, 29 | decoration: const BoxDecoration( 30 | color: Color(0xff7c94b6), 31 | image: DecorationImage( 32 | image: NetworkImage( 33 | "https://avatars.githubusercontent.com/u/18672346?v=4"), 34 | fit: BoxFit.cover, 35 | ), 36 | borderRadius: BorderRadius.all(Radius.circular(75.0)), 37 | ), 38 | ), 39 | const SizedBox( 40 | width: 15.0, 41 | ), 42 | Column( 43 | mainAxisAlignment: MainAxisAlignment.center, 44 | crossAxisAlignment: CrossAxisAlignment.start, 45 | children: const [ 46 | Text("Vikas Suthar", 47 | style: TextStyle( 48 | color: Colors.deepOrangeAccent, 49 | fontWeight: FontWeight.bold, 50 | fontSize: 20.0)), 51 | Text("52 Events", 52 | style: TextStyle( 53 | fontWeight: FontWeight.normal, 54 | fontSize: 15.0)), 55 | ], 56 | ) 57 | 58 | ], 59 | )), 60 | menuItem("Home", Icons.home, true), 61 | menuItem("Explore", Icons.search,false), 62 | menuItem("My Events", Icons.event,false), 63 | menuItem("Tasks", Icons.task,false), 64 | menuItem("Invite Friends", Icons.inventory,false), 65 | menuItem("Settings", Icons.settings,false), 66 | menuItem("About", Icons.info,false), 67 | const SizedBox(height: 100.0), 68 | menuItem("Log Out", Icons.logout,false), 69 | 70 | ], 71 | ), 72 | ), 73 | ); 74 | } 75 | 76 | Widget menuItem(String title, IconData iconData, bool isSelected) { 77 | return ListTile( 78 | selected: isSelected, 79 | selectedColor: Colors.deepOrangeAccent, 80 | title: Text(title, style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0),), 81 | leading: Icon(iconData), 82 | onTap: (){ 83 | Navigator.of(context).pop(); 84 | final snackBar = SnackBar( 85 | content: Text("Press On $title"), 86 | action: SnackBarAction( 87 | label: "Undo", 88 | onPressed: () { 89 | 90 | }, 91 | ), 92 | ); 93 | ScaffoldMessenger.of(context).showSnackBar(snackBar); 94 | }, 95 | ); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /lib/screens/FaceIdScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class FaceIdScreen extends StatefulWidget { 5 | 6 | @override 7 | _FaceIdScreenState createState() => _FaceIdScreenState(); 8 | } 9 | 10 | 11 | class _FaceIdScreenState extends State { 12 | final Color _accentColor = const Color(0xFF164CA2); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | 17 | return Scaffold( 18 | body: Stack( 19 | fit: StackFit.expand, 20 | children: [ 21 | Container( 22 | width: double.infinity, 23 | height: double.infinity, 24 | decoration: BoxDecoration( 25 | gradient: LinearGradient( 26 | begin: FractionalOffset.topCenter, 27 | end: FractionalOffset.bottomCenter, 28 | colors: [ 29 | _accentColor.withOpacity(0.5), 30 | _accentColor 31 | ], 32 | stops: const [ 33 | 0.0, 34 | 1.0 35 | ] 36 | ) 37 | ), 38 | ), 39 | Align( 40 | alignment: Alignment(0, -0.1), 41 | child: Column( 42 | 43 | ), 44 | ) 45 | ], 46 | ) 47 | ); 48 | } 49 | 50 | } -------------------------------------------------------------------------------- /lib/screens/LandingScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LandingScreen extends StatefulWidget { 4 | @override 5 | _LandingScreenState createState() => _LandingScreenState(); 6 | } 7 | 8 | class _LandingScreenState extends State { 9 | final Color _accentColor = const Color(0xFFD64CA2); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | Size size = MediaQuery.of(context).size; 14 | 15 | return Scaffold( 16 | body: Stack( 17 | fit: StackFit.expand, 18 | children: [ 19 | Align( 20 | alignment: Alignment.topCenter, 21 | child: Container( 22 | width: double.infinity, 23 | height: 350, 24 | decoration: BoxDecoration( 25 | borderRadius: BorderRadius.only( 26 | bottomRight: Radius.circular((size.width / 2))), 27 | gradient: LinearGradient( 28 | begin: FractionalOffset.topCenter, 29 | end: FractionalOffset.bottomCenter, 30 | colors: [_accentColor.withOpacity(0.5), _accentColor], 31 | stops: const [0.0, 1.0])))), 32 | Positioned( 33 | top: 50, 34 | left: 0, 35 | right: 0, 36 | child: Column( 37 | mainAxisAlignment: MainAxisAlignment.center, 38 | crossAxisAlignment: CrossAxisAlignment.center, 39 | children: [ 40 | const Image( 41 | width: 100, 42 | height: 100, 43 | image: AssetImage("images/flying-kite.png") 44 | ), 45 | const Text( 46 | "Welcome to Kidly!", 47 | textAlign: TextAlign.left, 48 | style: TextStyle( 49 | color: Colors.white, 50 | fontSize: 30.0, 51 | fontWeight: FontWeight.bold, 52 | fontFamily: 'Raleway'), 53 | ), 54 | const SizedBox(height: 20.0,), 55 | const Text( 56 | "Welcome to Kidly!", 57 | style: TextStyle( 58 | color: Colors.white70, 59 | fontSize: 14.0, 60 | fontWeight: FontWeight.bold, 61 | fontFamily: 'Raleway'), 62 | ), 63 | const Image( 64 | image: AssetImage("images/playing_kid.png")), 65 | const SizedBox(height: 100,), 66 | Row( 67 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 68 | children: [ 69 | SizedBox( 70 | width: 150, 71 | height: 40, 72 | child: TextButton( 73 | onPressed: () {}, 74 | style: TextButton.styleFrom( 75 | primary: Colors.white, 76 | elevation: 2, 77 | backgroundColor: _accentColor), 78 | child: const Text( 79 | "Login", 80 | style: TextStyle(fontSize: 15), 81 | ), 82 | ), 83 | ), 84 | const SizedBox(width: 20.0,), 85 | SizedBox( 86 | width: 150, 87 | height: 40, 88 | child: TextButton( 89 | onPressed: () {}, 90 | style: TextButton.styleFrom( 91 | primary: Colors.white, 92 | elevation: 2, 93 | backgroundColor: _accentColor), 94 | child: const Text( 95 | "Sign Up", 96 | style: TextStyle(fontSize: 15), 97 | ), 98 | ), 99 | ), 100 | ], 101 | ), 102 | const SizedBox(height: 40.0,), 103 | Row( 104 | mainAxisAlignment: MainAxisAlignment.center, 105 | children: [ 106 | Container( 107 | width: 100, 108 | height: 1.0, 109 | color: Colors.black26, 110 | ), 111 | const SizedBox(width: 10.0,), 112 | const Text("or", style: TextStyle(color: Colors.black38),), 113 | const SizedBox(width: 10.0,), 114 | Container( 115 | width: 100, 116 | height: 1.0, 117 | color: Colors.black26, 118 | ), 119 | ], 120 | ), 121 | const SizedBox(height: 40.0,), 122 | Row( 123 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 124 | children: [ 125 | SizedBox( 126 | width: 150, 127 | height: 40, 128 | child: TextButton( 129 | onPressed: () {}, 130 | style: TextButton.styleFrom( 131 | primary: Colors.white, 132 | elevation: 2, 133 | backgroundColor: Colors.white), 134 | child: Row( 135 | mainAxisAlignment: MainAxisAlignment.center, 136 | children: const [ 137 | Image( 138 | image: AssetImage("images/google.png"), 139 | width: 25, 140 | height: 25, 141 | color: null, 142 | ), 143 | SizedBox(width: 10.0,), 144 | Text( 145 | "Google", 146 | style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), 147 | ) 148 | ], 149 | ) 150 | ), 151 | ), 152 | SizedBox( 153 | width: 150, 154 | height: 40, 155 | child: TextButton( 156 | onPressed: () {}, 157 | style: TextButton.styleFrom( 158 | primary: Colors.white, 159 | elevation: 2, 160 | backgroundColor: Colors.blueAccent), 161 | child: Row( 162 | mainAxisAlignment: MainAxisAlignment.center, 163 | children: const [ 164 | Icon( 165 | Icons.facebook_rounded, 166 | color: Colors.white, 167 | ), 168 | SizedBox(width: 10.0,), 169 | Text( 170 | "Facebook", 171 | style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), 172 | ) 173 | ], 174 | ) 175 | ), 176 | ), 177 | ], 178 | ) 179 | ], 180 | ) 181 | ) 182 | ], 183 | ), 184 | ); 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /lib/screens/OtpScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class OtpScreen extends StatefulWidget { 4 | 5 | @override 6 | _OtpScreenState createState() => _OtpScreenState(); 7 | } 8 | 9 | class _OtpScreenState extends State { 10 | 11 | final Color _accentColor = const Color(0xFF164CA2); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | appBar: AppBar( 17 | leading: const Icon(Icons.arrow_back_ios), 18 | elevation: 0, 19 | backgroundColor: _accentColor.withOpacity(0.5), 20 | ), 21 | body: Stack( 22 | fit: StackFit.expand, 23 | children: [ 24 | Container( 25 | width: double.infinity, 26 | height: double.infinity, 27 | decoration: BoxDecoration( 28 | gradient: LinearGradient( 29 | begin: FractionalOffset.topCenter, 30 | end: FractionalOffset.bottomCenter, 31 | colors: [ 32 | _accentColor.withOpacity(0.5), 33 | _accentColor 34 | ], 35 | stops: const [ 36 | 0.0, 37 | 1.0 38 | ] 39 | ) 40 | ), 41 | ), 42 | Align( 43 | alignment: const Alignment(0,-0.1), 44 | child: Column( 45 | children: [ 46 | const SizedBox(height: 50.0,), 47 | const SizedBox( 48 | height: 150, 49 | width: 150, 50 | child: Icon( 51 | Icons.verified_user, 52 | size: 150, 53 | color: Colors.white, 54 | ), 55 | ), 56 | const SizedBox(height: 30.0,), 57 | const Text("Verification", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 25.0, fontFamily: 'Raleway'),), 58 | const SizedBox(height: 10.0,), 59 | const Text("We have sent OTP on your number \n+91XXXXXXXXXX", 60 | textAlign: TextAlign.center, 61 | style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 12.0, fontFamily: 'Raleway'),), 62 | 63 | const SizedBox(height: 20.0,), 64 | const Text("Enter your OTP code number", style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 15.0, fontFamily: 'Raleway'),), 65 | const SizedBox(height: 20.0,), 66 | Row( 67 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 68 | children: [ 69 | OtpBox(), 70 | OtpBox(), 71 | OtpBox(), 72 | OtpBox(), 73 | ], 74 | ), 75 | const SizedBox(height: 30.0,), 76 | SizedBox( 77 | width: 325, 78 | height: 50, 79 | child: MaterialButton( 80 | elevation: 5.0, 81 | onPressed: (){}, 82 | color: Colors.orange, 83 | shape: const RoundedRectangleBorder( 84 | borderRadius: BorderRadius.all(Radius.circular(20.0)) 85 | ), 86 | child: const Text("Verify", style: TextStyle(color: Colors.white, fontSize: 20.0, fontWeight: FontWeight.bold),), 87 | ), 88 | ), 89 | const SizedBox(height: 50.0,), 90 | const Text("Didn't you receive any code?", style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 15.0, fontFamily: 'Raleway'),), 91 | const SizedBox(height: 10.0,), 92 | const Text("Resend New Code", style: TextStyle(color: Colors.orange, fontWeight: FontWeight.bold, fontSize: 20.0, fontFamily: 'Raleway'),), 93 | 94 | ], 95 | ), 96 | ) 97 | ], 98 | ), 99 | ); 100 | } 101 | 102 | Widget OtpBox() { 103 | return Container( 104 | height: 50, 105 | width: 50, 106 | decoration: const BoxDecoration( 107 | borderRadius: BorderRadius.all(Radius.circular(10.0)), 108 | color: Colors.white 109 | ), 110 | ); 111 | } 112 | 113 | } -------------------------------------------------------------------------------- /lib/screens/ProfileScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ProfileScreen extends StatefulWidget { 4 | @override 5 | _ProfileScreenState createState() => _ProfileScreenState(); 6 | } 7 | 8 | class ProfileSetting { 9 | late String name; 10 | late IconData icons; 11 | 12 | ProfileSetting(this.name, this.icons); 13 | } 14 | 15 | class _ProfileScreenState extends State { 16 | late List profileSettinglist; 17 | 18 | @override 19 | void initState() { 20 | super.initState(); 21 | profileSettinglist = [ 22 | ProfileSetting("My Profile", Icons.person), 23 | ProfileSetting("Setting", Icons.settings), 24 | ProfileSetting("Notifications", Icons.notifications), 25 | ProfileSetting("Transaction History", Icons.event_note), 26 | ProfileSetting("FAQ", Icons.help), 27 | ProfileSetting("About App", Icons.help), 28 | ProfileSetting("Logout", Icons.logout), 29 | ]; 30 | } 31 | 32 | @override 33 | Widget build(BuildContext context) { 34 | return Scaffold( 35 | backgroundColor: Colors.white70, 36 | appBar: AppBar( 37 | backgroundColor: Colors.white70, 38 | elevation: 0, 39 | leading: const Icon( 40 | Icons.arrow_back_ios, 41 | color: Colors.black, 42 | ), 43 | title: const Text( 44 | "Profile", 45 | style: TextStyle( 46 | color: Colors.black, fontWeight: FontWeight.bold, fontSize: 20.0), 47 | ), 48 | ), 49 | body: Container( 50 | color: Colors.white70, 51 | child: Column( 52 | mainAxisAlignment: MainAxisAlignment.start, 53 | crossAxisAlignment: CrossAxisAlignment.start, 54 | children: [ 55 | const SizedBox( 56 | height: 20.0, 57 | ), 58 | profileView(), 59 | const SizedBox(height: 10.0,), 60 | profileSettingList() 61 | ], 62 | ), 63 | ), 64 | ); 65 | } 66 | 67 | Widget profileSettingList() { 68 | return ListView.builder( 69 | scrollDirection: Axis.vertical, 70 | shrinkWrap: true, 71 | padding: const EdgeInsets.all(10.0), 72 | itemCount: profileSettinglist.length, 73 | itemBuilder: (BuildContext context, int index) { 74 | return Card( 75 | color: Colors.white, 76 | margin: const EdgeInsets.all(5.0), 77 | shape: const RoundedRectangleBorder( 78 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 79 | ), 80 | child: ListTile( 81 | leading: Icon(profileSettinglist[index].icons, color: Colors.black,), 82 | title: Text(profileSettinglist[index].name,style: const TextStyle( 83 | color: Colors.black, 84 | fontWeight: FontWeight.bold, 85 | fontSize: 16.0)), 86 | trailing: const Icon(Icons.arrow_forward_ios, color: Colors.black,), 87 | contentPadding: const EdgeInsets.all(10.0), 88 | ), 89 | ); 90 | }); 91 | } 92 | 93 | Widget profileView() { 94 | return Row( 95 | children: [ 96 | const SizedBox(width: 27.0), 97 | Container( 98 | width: 60.0, 99 | height: 60.0, 100 | decoration: BoxDecoration( 101 | color: const Color(0xff7c94b6), 102 | image: const DecorationImage( 103 | image: NetworkImage( 104 | "https://avatars.githubusercontent.com/u/18672346?v=4"), 105 | fit: BoxFit.cover, 106 | ), 107 | borderRadius: const BorderRadius.all(Radius.circular(50.0)), 108 | border: Border.all( 109 | color: Colors.black54, 110 | width: 2.0, 111 | ), 112 | ), 113 | ), 114 | const SizedBox( 115 | width: 20.0, 116 | ), 117 | Column( 118 | mainAxisSize: MainAxisSize.max, 119 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 120 | crossAxisAlignment: CrossAxisAlignment.start, 121 | children: const [ 122 | Text( 123 | "Vikas Suthar", 124 | style: TextStyle( 125 | color: Colors.black, 126 | fontWeight: FontWeight.bold, 127 | fontSize: 18.0), 128 | ), 129 | SizedBox(height: 5.0), 130 | Text( 131 | "username: androiddev_vikas", 132 | style: TextStyle( 133 | color: Colors.black38, 134 | fontWeight: FontWeight.normal, 135 | fontSize: 14.0), 136 | ) 137 | ], 138 | ) 139 | ], 140 | ); 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /lib/screens/SignInPage.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | 4 | class SignInScreen extends StatefulWidget { 5 | const SignInScreen({Key? key}) : super(key: key); 6 | 7 | @override 8 | _SignInScreenState createState() => _SignInScreenState(); 9 | } 10 | 11 | class _SignInScreenState extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | Size size = MediaQuery.of(context).size; 15 | return Scaffold( 16 | appBar: AppBar( 17 | backgroundColor: Theme.of(context).scaffoldBackgroundColor, 18 | elevation: 0, 19 | title: const Text("Sign In", style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.w800, color: Colors.black),), 20 | ), 21 | body: SafeArea( 22 | child: Padding( 23 | padding: EdgeInsets.all(30.0), 24 | child: Column( 25 | mainAxisAlignment: MainAxisAlignment.center, 26 | children: [ 27 | const TextField( 28 | decoration: InputDecoration( 29 | contentPadding: EdgeInsets.all(20.0), 30 | border: OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(15.0))), 31 | labelText: "Email Address", 32 | labelStyle: TextStyle(color: Colors.grey, fontWeight: FontWeight.w600, fontSize: 14.0), 33 | ), 34 | keyboardType: TextInputType.emailAddress, 35 | ), 36 | const SizedBox(height: 20.0,), 37 | const TextField( 38 | decoration: InputDecoration( 39 | contentPadding: EdgeInsets.all(20.0), 40 | border: OutlineInputBorder(borderRadius: BorderRadius.all(Radius.circular(15.0))), 41 | labelText: "Password", 42 | labelStyle: TextStyle(color: Colors.grey, fontWeight: FontWeight.w600, fontSize: 14.0) 43 | ), 44 | textInputAction: TextInputAction.done, 45 | keyboardType: TextInputType.phone, 46 | ), 47 | const SizedBox(height: 40.0,), 48 | GestureDetector( 49 | onTap: (){}, 50 | child: Container( 51 | height: 60.0, 52 | width: size.width, 53 | decoration: const BoxDecoration( 54 | color: Colors.pink, 55 | borderRadius: BorderRadius.all(Radius.circular(15.0)) 56 | ), 57 | child: const Center( 58 | child: Text( 59 | "Sign In", 60 | style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold, fontSize: 18.0), 61 | ), 62 | ), 63 | ), 64 | ), 65 | const SizedBox(height: 20.0,), 66 | const Center( 67 | child: Text( 68 | "Don't have account?", 69 | style: TextStyle( 70 | color: Colors.pink, 71 | fontWeight: FontWeight.bold 72 | ), 73 | ), 74 | ), 75 | const SizedBox(height: 40.0,), 76 | Row( 77 | mainAxisAlignment: MainAxisAlignment.spaceEvenly, 78 | children: [ 79 | Container( 80 | width: 100.0, 81 | height: 1.0, 82 | color: Colors.black38, 83 | ), 84 | const Text("OR"), 85 | Container( 86 | width: 100.0, 87 | height: 1.0, 88 | color: Colors.black38, 89 | ) 90 | ], 91 | ), 92 | const SizedBox(height: 40.0,), 93 | Row( 94 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 95 | children: [ 96 | Container( 97 | margin: const EdgeInsets.all(15.0), 98 | padding: const EdgeInsets.symmetric(horizontal: 15.0, vertical: 10.0), 99 | decoration: BoxDecoration( 100 | borderRadius:const BorderRadius.all(Radius.circular(15.0)), 101 | border: Border.all(color: Colors.blueAccent) 102 | ), 103 | child: Row( 104 | children: const [ 105 | Image( 106 | image: AssetImage("images/google.png"), 107 | width: 25, 108 | height: 25, 109 | color: null, 110 | ), 111 | SizedBox(width: 10.0,), 112 | Text( 113 | "Google", 114 | style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold), 115 | ) 116 | ], 117 | ), 118 | ), 119 | Container( 120 | padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 12.0), 121 | decoration: const BoxDecoration( 122 | borderRadius: BorderRadius.all(Radius.circular(15.0)), 123 | color: Colors.blueAccent 124 | ), 125 | child: Row( 126 | children: const [ 127 | Icon( 128 | Icons.facebook_rounded, 129 | color: Colors.white, 130 | ), 131 | SizedBox(width: 10.0,), 132 | Text( 133 | "Facebook", 134 | style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), 135 | ) 136 | ], 137 | ), 138 | ) 139 | ], 140 | ) 141 | ], 142 | ), 143 | ), 144 | ), 145 | ); 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /lib/screens/WeatherScreen.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class WeatherScreen extends StatefulWidget { 6 | const WeatherScreen({Key? key}) : super(key: key); 7 | 8 | @override 9 | _WeatherScreenState createState() => _WeatherScreenState(); 10 | } 11 | 12 | class WeatherData { 13 | late String day; 14 | late String date; 15 | late String maxTemp; 16 | late String minTemp; 17 | late AssetImage icons; 18 | late String raintChances; 19 | 20 | WeatherData(this.day, this.date, this.icons, this.maxTemp, this.minTemp, 21 | this.raintChances); 22 | } 23 | 24 | class _WeatherScreenState extends State { 25 | late List weatherData; 26 | 27 | @override 28 | initState() { 29 | super.initState(); 30 | weatherData = [ 31 | WeatherData("Today,", "4 June", const AssetImage("images/light_rainsun.png"), "26", "16", "32%"), 32 | WeatherData("Sunday,", "5 June", const AssetImage("images/light_rainsun.png"), "27", "14", "32%"), 33 | WeatherData("Monday,", "6 June", const AssetImage("images/light_rain.png"), "29", "16", "35%"), 34 | WeatherData("Tuesday,", "7 June", const AssetImage("images/partly_cloudy.png"), "29", "13", "42%"), 35 | WeatherData("Wednesday,", "8 June", const AssetImage("images/rainy.png"), "24", "16", "80%"), 36 | ]; 37 | } 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | return Scaffold( 42 | appBar: AppBar( 43 | leading: const Icon( 44 | Icons.menu, 45 | color: Colors.black54, 46 | ), 47 | elevation: 0, 48 | backgroundColor: Theme.of(context).scaffoldBackgroundColor, 49 | ), 50 | body: SafeArea( 51 | child: Padding( 52 | padding: const EdgeInsets.all(20.0), 53 | child: Column( 54 | mainAxisAlignment: MainAxisAlignment.start, 55 | children: [ 56 | Row( 57 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 58 | crossAxisAlignment: CrossAxisAlignment.start, 59 | children: [ 60 | Column( 61 | crossAxisAlignment: CrossAxisAlignment.start, 62 | children: [ 63 | const Text( 64 | "Cloudy and \nRainy", 65 | style: TextStyle( 66 | color: Colors.black, 67 | wordSpacing: 5.0, 68 | fontFamily: 'Sorts Mill Goudy', 69 | fontWeight: FontWeight.bold, 70 | fontSize: 35.0), 71 | ), 72 | Row(children: const [ 73 | Text( 74 | "18", 75 | style: TextStyle( 76 | color: Colors.black, 77 | fontWeight: FontWeight.normal, 78 | fontSize: 30.0), 79 | ), 80 | Text( 81 | "o", 82 | style: TextStyle( 83 | color: Colors.black, 84 | fontWeight: FontWeight.normal, 85 | fontSize: 30.0, 86 | fontFeatures: [FontFeature.superscripts()]), 87 | ) 88 | ]), 89 | ], 90 | ), 91 | const Image( 92 | image: AssetImage("images/weather.png"), 93 | width: 100, 94 | height: 100, 95 | color: null, 96 | ), 97 | ], 98 | ), 99 | const Text("Current Location: Bangalore, India", style: TextStyle(fontWeight: FontWeight.normal, color: Colors.black, fontFamily: 'Sorts Mill Goudy', fontSize: 14.0),), 100 | const SizedBox(height: 10.0,), 101 | ListView.builder( 102 | scrollDirection: Axis.vertical, 103 | shrinkWrap: true, 104 | itemCount: weatherData.length, 105 | itemBuilder: (context, index) { 106 | return nextFiveDayWeather(weatherData[index]); 107 | }), 108 | ], 109 | ), 110 | ), 111 | ), 112 | ); 113 | } 114 | 115 | Widget nextFiveDayWeather(WeatherData weatherData) { 116 | return Container( 117 | padding: const EdgeInsets.symmetric(vertical: 10.0), 118 | child: Container( 119 | decoration: const BoxDecoration( 120 | color: Colors.black12, 121 | borderRadius: BorderRadius.all(Radius.circular(10.0))), 122 | padding: const EdgeInsets.symmetric(vertical: 25.0, horizontal: 15.0), 123 | child: Row( 124 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 125 | children: [ 126 | Column( 127 | crossAxisAlignment: CrossAxisAlignment.start, 128 | children: [ 129 | Text( 130 | weatherData.day, 131 | style: const TextStyle(fontWeight: FontWeight.bold), 132 | ), 133 | Text(weatherData.date) 134 | ], 135 | ), 136 | Row( 137 | children: [ 138 | Image(image: weatherData.icons,color: null,), 139 | const SizedBox( 140 | width: 20.0), 141 | Row( 142 | children: [ 143 | Text( 144 | weatherData.maxTemp, 145 | style: const TextStyle(fontWeight: FontWeight.bold), 146 | ), 147 | const Text( 148 | "o", 149 | style: TextStyle(fontFeatures: [FontFeature.superscripts()]), 150 | ) 151 | ], 152 | ), 153 | const SizedBox( 154 | width: 10.0), 155 | Row( 156 | children: [ 157 | Text(weatherData.minTemp), 158 | const Text( 159 | "o", 160 | style: TextStyle(fontFeatures: [FontFeature.superscripts()]), 161 | ) 162 | ], 163 | ), 164 | const SizedBox(width: 20.0,), 165 | Text(weatherData.raintChances), 166 | const Icon(Icons.arrow_drop_down) 167 | ], 168 | ) 169 | ], 170 | ), 171 | ), 172 | ); 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /lib/screens/WhatsAppProfileScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/foundation.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class WhatsAppProfileScreen extends StatefulWidget { 5 | const WhatsAppProfileScreen({Key? key}) : super(key: key); 6 | 7 | @override 8 | _WhatsAppProfileState createState() => _WhatsAppProfileState(); 9 | } 10 | 11 | class _WhatsAppProfileState extends State { 12 | @override 13 | Widget build(BuildContext context) { 14 | return Scaffold( 15 | appBar: AppBar( 16 | centerTitle: true, 17 | elevation: 1.0, 18 | backgroundColor: Colors.white, 19 | leading: Row( 20 | mainAxisAlignment: MainAxisAlignment.center, 21 | crossAxisAlignment: CrossAxisAlignment.center, 22 | children: const [ 23 | Icon( 24 | Icons.arrow_back_ios, 25 | color: Colors.blueAccent, 26 | ), 27 | //Text("Back", style: TextStyle(color: Colors.blueAccent, fontWeight: FontWeight.bold),) 28 | ], 29 | ), 30 | title: const Text( 31 | "Contact Info", 32 | style: TextStyle( 33 | color: Colors.black, fontWeight: FontWeight.bold, fontSize: 22.0), 34 | ), 35 | ), 36 | body: Container( 37 | height: double.infinity, 38 | width: double.infinity, 39 | color: Colors.grey.shade200, 40 | child: SingleChildScrollView( 41 | child: Column( 42 | children: [ 43 | const SizedBox( 44 | height: 20.0, 45 | ), 46 | //clickable(), 47 | profileView(), 48 | const SizedBox( 49 | height: 20.0, 50 | ), 51 | callView(), 52 | const SizedBox(height: 10.0,), 53 | aboutView(), 54 | const SizedBox(height: 10.0,), 55 | mediaView(), 56 | const SizedBox(height: 10.0,), 57 | controlView(), 58 | const SizedBox(height: 10.0,), 59 | privacyView(), 60 | const SizedBox(height: 10.0,), 61 | contactDetailsview(), 62 | const SizedBox(height: 10.0,), 63 | shareView(), 64 | const SizedBox(height: 10.0,), 65 | reportView(), 66 | const SizedBox(height: 40.0,), 67 | ], 68 | ), 69 | ), 70 | ), 71 | ); 72 | } 73 | 74 | clickable() { 75 | return GestureDetector( 76 | child: Container( 77 | width: 200, 78 | height: 100, 79 | color: Colors.white, 80 | ), 81 | onTap: () { 82 | 83 | }, 84 | ); 85 | } 86 | 87 | profileView() { 88 | return Column( 89 | children: [ 90 | Container( 91 | width: 120.0, 92 | height: 120.0, 93 | decoration: const BoxDecoration( 94 | color: Color(0xff7c94b6), 95 | image: DecorationImage( 96 | image: NetworkImage( 97 | "https://avatars.githubusercontent.com/u/18672346?v=4"), 98 | fit: BoxFit.cover, 99 | ), 100 | borderRadius: BorderRadius.all(Radius.circular(75.0)), 101 | ), 102 | ), 103 | const SizedBox( 104 | height: 10.0, 105 | ), 106 | const Text("Vikas Suthar", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 25.0)), 107 | const SizedBox( 108 | height: 5.0, 109 | ), 110 | const Text("+91 9876543210", style: TextStyle(color: Colors.black54, fontWeight: FontWeight.bold, fontSize: 16.0)) 111 | ], 112 | ); 113 | } 114 | 115 | callView() { 116 | return Container( 117 | margin: EdgeInsets.symmetric(horizontal: 10.0), 118 | child: Row( 119 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 120 | children: [ 121 | singleCallView("Audio", Icons.call), 122 | singleCallView("Video", Icons.video_call), 123 | singleCallView("Search", Icons.search), 124 | singleCallView("Pay", Icons.currency_rupee), 125 | ], 126 | ), 127 | ); 128 | } 129 | 130 | singleCallView(String title, IconData icons) { 131 | return InkWell( 132 | child: Container( 133 | width: 80, 134 | padding: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 10.0), 135 | decoration: const BoxDecoration( 136 | color: Colors.white, 137 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 138 | ), 139 | child: Column( 140 | children: [ 141 | Icon(icons, color: Colors.blueAccent,), 142 | const SizedBox(height: 5.0), 143 | Text(title, style: const TextStyle(color: Colors.blueAccent),) 144 | ], 145 | ), 146 | ), 147 | onTap: () {}, 148 | ); 149 | } 150 | 151 | aboutView() { 152 | return Container( 153 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 154 | width: double.infinity, 155 | padding: const EdgeInsets.all(10.0), 156 | decoration: const BoxDecoration( 157 | color: Colors.white, 158 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 159 | ), 160 | child: Column( 161 | mainAxisAlignment: MainAxisAlignment.start, 162 | crossAxisAlignment: CrossAxisAlignment.start, 163 | children: const [ 164 | Text("In a Meeting. Talk me later", style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 18.0)), 165 | SizedBox(height: 5.0), 166 | Text("21 December, 2021", style: TextStyle(color: Colors.black),) 167 | ], 168 | ), 169 | ); 170 | } 171 | 172 | mediaView() { 173 | return Container( 174 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 175 | decoration: const BoxDecoration( 176 | color: Colors.white, 177 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 178 | ), 179 | child: Column( 180 | children: [ 181 | singleMediaView("Media, Links and Docs", "23", Icons.perm_media_outlined, Colors.blueAccent,""), 182 | const Divider(), 183 | singleMediaView("Starred Messages", "53", Icons.star, Colors.yellow,""), 184 | ], 185 | ), 186 | ); 187 | } 188 | 189 | singleMediaView(String title, String count, IconData iconData, Color bgColor, String subTitle) { 190 | return ListTile( 191 | title: Text(title, style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold),), 192 | subtitle: subTitle.isNotEmpty ? Text(subTitle, style: const TextStyle(color: Colors.black54, fontSize: 12.0),): null, 193 | leading: Container( 194 | padding: const EdgeInsets.all(5.0), 195 | decoration: BoxDecoration( 196 | color: bgColor,borderRadius: const BorderRadius.all(Radius.circular(10.0)) 197 | ), 198 | child: Icon(iconData, color: Colors.white,), 199 | ), 200 | trailing: SizedBox( 201 | width: 70.0, 202 | child: Row( 203 | mainAxisAlignment: MainAxisAlignment.end, 204 | children: [ 205 | Text(count), 206 | const SizedBox(width: 5.0), 207 | const Icon( 208 | Icons.arrow_forward_ios, 209 | size: 15.0, 210 | ) 211 | ], 212 | ), 213 | ), 214 | ); 215 | } 216 | 217 | controlView() { 218 | return Container( 219 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 220 | decoration: const BoxDecoration( 221 | color: Colors.white, 222 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 223 | ), 224 | child: Column( 225 | children: [ 226 | singleMediaView("Mute", "No", Icons.volume_up, Colors.green,""), 227 | const Divider(), 228 | singleMediaView("Wallpaper and Sound", "", Icons.wallpaper, Colors.pink,""), 229 | const Divider(), 230 | singleMediaView("Save to Camera Roll", "Default", Icons.file_download_outlined, Colors.yellow,"") 231 | ], 232 | ), 233 | ); 234 | } 235 | 236 | privacyView() { 237 | return Container( 238 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 239 | decoration: const BoxDecoration( 240 | color: Colors.white, 241 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 242 | ), 243 | child: Column( 244 | children: [ 245 | singleMediaView("Disappearing Messages", "Off", Icons.privacy_tip, Colors.blue,""), 246 | const Divider(), 247 | singleMediaView("Encryption", "", Icons.lock, Colors.blue,"Messages and calls are end-to-end encrypted. Tap to verify."), 248 | ], 249 | ), 250 | ); 251 | } 252 | 253 | contactDetailsview() { 254 | return Container( 255 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 256 | decoration: const BoxDecoration( 257 | color: Colors.white, 258 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 259 | ), 260 | child: Column( 261 | children: [ 262 | singleMediaView("Contact Details", "", Icons.person, Colors.grey,""), 263 | ], 264 | ), 265 | ); 266 | } 267 | 268 | shareView() { 269 | return Container( 270 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 271 | decoration: const BoxDecoration( 272 | color: Colors.white, 273 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 274 | ), 275 | child: Column( 276 | crossAxisAlignment: CrossAxisAlignment.start, 277 | children: [ 278 | singleShareView("Share Contact", Colors.blue), 279 | const Divider(), 280 | singleShareView("Export Chat", Colors.blue), 281 | const Divider(), 282 | singleShareView("Clear Chat", Colors.red) 283 | ], 284 | ), 285 | ); 286 | } 287 | 288 | singleShareView(String title, Color textColor) { 289 | return Container( 290 | padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0), 291 | child: Column( 292 | crossAxisAlignment: CrossAxisAlignment.start, 293 | children: [ 294 | Text(title, style: TextStyle(color: textColor, fontWeight: FontWeight.bold, fontSize: 16.0),), 295 | ], 296 | ), 297 | ); 298 | } 299 | 300 | reportView() { 301 | return Container( 302 | width: double.infinity, 303 | margin: const EdgeInsets.symmetric(horizontal: 10.0), 304 | decoration: const BoxDecoration( 305 | color: Colors.white, 306 | borderRadius: BorderRadius.all(Radius.circular(10.0)) 307 | ), 308 | child: Column( 309 | crossAxisAlignment: CrossAxisAlignment.start, 310 | children: [ 311 | singleShareView("Block Vikas Suthar", Colors.red), 312 | const Divider(), 313 | singleShareView("Report Vikas suthar", Colors.red), 314 | ], 315 | ), 316 | ); 317 | } 318 | } 319 | -------------------------------------------------------------------------------- /lib/screens/WhatsAppUIScreen.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class WhatsAppUIScreen extends StatefulWidget { 4 | @override 5 | _WhatsAppUIScreenState createState() => _WhatsAppUIScreenState(); 6 | } 7 | 8 | class StoryData { 9 | late String name; 10 | late AssetImage profileIcon; 11 | 12 | StoryData(this.name, this.profileIcon); 13 | } 14 | 15 | class _WhatsAppUIScreenState extends State { 16 | late List storyListData; 17 | 18 | @override 19 | initState() { 20 | super.initState(); 21 | storyListData = [ 22 | StoryData("Vikas", const AssetImage("images/google.png")), 23 | StoryData("Vikas", const AssetImage("images/google.png")), 24 | StoryData("Vikas", const AssetImage("images/google.png")), 25 | StoryData("Vikas", const AssetImage("images/google.png")), 26 | StoryData("Vikas", const AssetImage("images/google.png")), 27 | StoryData("Vikas", const AssetImage("images/google.png")) 28 | ]; 29 | } 30 | 31 | @override 32 | Widget build(BuildContext context) { 33 | return Scaffold( 34 | appBar: AppBar( 35 | backgroundColor: Theme.of(context).scaffoldBackgroundColor, 36 | leading: const Icon( 37 | Icons.menu, 38 | color: Colors.black87, 39 | ), 40 | elevation: 0, 41 | title: const Text( 42 | "Whatsapp Chat", 43 | style: TextStyle( 44 | fontSize: 22.0, fontWeight: FontWeight.bold, color: Colors.black), 45 | ), 46 | ), 47 | body: Container( 48 | padding: const EdgeInsets.all(15.0), 49 | child: Center( 50 | child: Column( 51 | mainAxisSize: MainAxisSize.min, 52 | children: [ 53 | Row( 54 | children: [ 55 | /*Container( 56 | width: 60.0, 57 | height: 60.0, 58 | decoration: BoxDecoration( 59 | color: const Color(0xff7c94b6), 60 | image: DecorationImage( 61 | image: AssetImage("images/rainy.png"), 62 | fit: BoxFit.cover 63 | ), 64 | borderRadius: const BorderRadius.all( Radius.circular(50.0)), 65 | border: Border.all( 66 | color: Colors.red, 67 | width: 3.0, 68 | ), 69 | ), 70 | )*/ 71 | Expanded( 72 | child: ListView.builder( 73 | scrollDirection: Axis.horizontal, 74 | shrinkWrap: true, 75 | itemCount: storyListData.length + 1, 76 | itemBuilder: (context, index) { 77 | return storyList(storyListData[index]); 78 | }) 79 | ) 80 | ], 81 | ) 82 | ], 83 | )), 84 | ), 85 | ); 86 | } 87 | 88 | Widget storyList(StoryData storyData) { 89 | return Container( 90 | padding: const EdgeInsets.all(10.0), 91 | child: Row( 92 | crossAxisAlignment: CrossAxisAlignment.start, 93 | children: [ 94 | Column( 95 | crossAxisAlignment: CrossAxisAlignment.center, 96 | children: [ 97 | Container( 98 | width: 60.0, 99 | height: 60.0, 100 | decoration: BoxDecoration( 101 | color: const Color(0xff7c94b6), 102 | image: DecorationImage( 103 | image: storyData.profileIcon, 104 | fit: BoxFit.cover 105 | ), 106 | borderRadius: const BorderRadius.all( Radius.circular(50.0)), 107 | border: Border.all( 108 | color: Colors.red, 109 | width: 3.0, 110 | ), 111 | ), 112 | ), 113 | const SizedBox(height: 5.0,), 114 | const Text("Vikas") 115 | ], 116 | ) 117 | ], 118 | ), 119 | ); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /lib/shoppinglist/shoppping_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class Product { 5 | const Product({required this.name}); 6 | 7 | final String name; 8 | } 9 | 10 | typedef OnCartChangedCallBack = Function(Product product, bool incart); 11 | 12 | class ShoppingItem extends StatelessWidget { 13 | @override 14 | Widget build(BuildContext context) { 15 | return Scaffold( 16 | appBar: AppBar( 17 | title: const Text("Shopping List"), 18 | ), 19 | body: const ShoppingListItem( 20 | product: [ 21 | Product(name: "Chips"), 22 | Product(name: "Mango"), 23 | Product(name: "banana"), 24 | Product(name: "Potato"), 25 | Product(name: "Tomato"), 26 | Product(name: "Chillis"), 27 | Product(name: "LOL") 28 | ], 29 | ), 30 | ); 31 | } 32 | } 33 | 34 | class ShoppingListItem extends StatefulWidget { 35 | 36 | const ShoppingListItem({ 37 | required this.product, 38 | super.key 39 | }); 40 | 41 | final List product; 42 | 43 | @override 44 | State createState() => _ShoppingListItemState(); 45 | 46 | } 47 | 48 | class _ShoppingListItemState extends State { 49 | final _shoppingCart = {}; 50 | 51 | void _handleCartChanged(Product product, bool inCart) { 52 | setState(() { 53 | if (!inCart) { 54 | _shoppingCart.add(product); 55 | } else { 56 | _shoppingCart.remove(product); 57 | } 58 | }); 59 | } 60 | 61 | @override 62 | Widget build(BuildContext context) { 63 | return ListView( 64 | padding: const EdgeInsets.symmetric(vertical: 10), 65 | children: widget.product.map((product) { 66 | return ShoppingMenu( 67 | product: product, 68 | inCart: _shoppingCart.contains(product), 69 | onCartChangedCallBack: _handleCartChanged 70 | ); 71 | } 72 | ).toList() 73 | ); 74 | } 75 | 76 | } 77 | 78 | class ShoppingMenu extends StatelessWidget { 79 | 80 | const ShoppingMenu({ 81 | required this.product, 82 | required this.inCart, 83 | required this.onCartChangedCallBack 84 | }); 85 | 86 | final Product product; 87 | final bool inCart; 88 | final OnCartChangedCallBack onCartChangedCallBack; 89 | 90 | Color _getColor(BuildContext context) { 91 | return inCart ? Colors.black54 : Theme.of(context).primaryColor; 92 | } 93 | 94 | TextStyle? _getStyle() { 95 | if(!inCart) return null; 96 | 97 | return const TextStyle( 98 | color: Colors.black54, 99 | decoration: TextDecoration.lineThrough 100 | ); 101 | } 102 | 103 | @override 104 | Widget build(BuildContext context) { 105 | return ListTile( 106 | onTap: () { 107 | onCartChangedCallBack(product, inCart); 108 | }, 109 | leading: CircleAvatar( 110 | backgroundColor: _getColor(context), 111 | child: Text(product.name[0]), 112 | ), 113 | title: Text( 114 | product.name, 115 | style: _getStyle(), 116 | ), 117 | ); 118 | } 119 | 120 | } 121 | -------------------------------------------------------------------------------- /lib/slidemenuanimation/slide_menu_animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class SlideMenuAnimation extends StatefulWidget { 4 | SlideMenuAnimation({Key? key}) : super(key: key); 5 | bool _isDrawerOpen = false; 6 | static const _menuTitles = [ 7 | 'Declarative style', 8 | 'Premade widgets', 9 | 'Stateful hot reload', 10 | 'Native performance', 11 | 'Great community', 12 | ]; 13 | 14 | @override 15 | State createState() => _SlideMenuAnimationState(); 16 | } 17 | 18 | class _SlideMenuAnimationState extends State 19 | with SingleTickerProviderStateMixin { 20 | late AnimationController _slideAnimationController; 21 | 22 | @override 23 | void initState() { 24 | _slideAnimationController = AnimationController( 25 | vsync: this, duration: const Duration(milliseconds: 150)); 26 | super.initState(); 27 | } 28 | 29 | @override 30 | void dispose() { 31 | _slideAnimationController.dispose(); 32 | super.dispose(); 33 | } 34 | 35 | bool _isDrawerOpen() { 36 | return _slideAnimationController.value == 1.0; 37 | } 38 | 39 | bool _isDrawerClosed() { 40 | return _slideAnimationController.value == 0.0; 41 | } 42 | 43 | bool _isDrawerOpening() { 44 | return _slideAnimationController.status == AnimationStatus.forward; 45 | } 46 | 47 | void _toggleDrawer() { 48 | if (_isDrawerOpen() || _isDrawerOpening()) { 49 | _slideAnimationController.reverse(); 50 | } else { 51 | _slideAnimationController.forward(); 52 | } 53 | } 54 | 55 | @override 56 | Widget build(BuildContext context) { 57 | return Scaffold( 58 | appBar: AppBar( 59 | title: const Text("Slide Menu Animation"), 60 | actions: [ 61 | AnimatedBuilder( 62 | animation: _slideAnimationController, 63 | builder: (context, child) { 64 | return IconButton( 65 | onPressed: _toggleDrawer, 66 | icon: _isDrawerOpen() || _isDrawerOpening() 67 | ? const Icon(Icons.clear) 68 | : const Icon(Icons.menu), 69 | ); 70 | }), 71 | ], 72 | ), 73 | body: Stack( 74 | children: [_menuContent(), _drawerContent()], 75 | ), 76 | ); 77 | } 78 | 79 | Widget _drawerContent() { 80 | return AnimatedBuilder( 81 | animation: _slideAnimationController, 82 | builder: (context, child) { 83 | return _isDrawerClosed() 84 | ? const Center(child: Text("Drawer Closed")) 85 | : const Menu(); 86 | }); 87 | } 88 | 89 | Widget _menuContent() { 90 | return const Center(); 91 | } 92 | } 93 | 94 | class Menu extends StatefulWidget { 95 | const Menu({Key? key}) : super(key: key); 96 | 97 | @override 98 | State createState() => _MenuState(); 99 | } 100 | 101 | class _MenuState extends State with SingleTickerProviderStateMixin { 102 | 103 | static const _menuTitles = [ 104 | 'Declarative style', 105 | 'Premade widgets', 106 | 'Stateful hot reload', 107 | 'Native performance', 108 | 'Great community', 109 | ]; 110 | 111 | static const _initialDelayTime = Duration(milliseconds: 50); 112 | static const _itemSlideTime = Duration(milliseconds: 250); 113 | static const _staggerTime = Duration(milliseconds: 50); 114 | static const _buttonDelayTime = Duration(milliseconds: 150); 115 | static const _buttonTime = Duration(milliseconds: 500); 116 | final _animationTime = _initialDelayTime + 117 | (_staggerTime * _menuTitles.length) + _buttonDelayTime + _buttonTime; 118 | 119 | late AnimationController _staggerController; 120 | final List _itemSlideInterval = []; 121 | late Interval _buttonInterval; 122 | 123 | @override 124 | void initState() { 125 | _createAnimationInterval(); 126 | _staggerController = AnimationController( 127 | vsync: this, 128 | duration: _animationTime) 129 | ..forward(); 130 | super.initState(); 131 | } 132 | 133 | void _createAnimationInterval() { 134 | for (var i = 0; i < _menuTitles.length; i++) { 135 | final startTime = _initialDelayTime + (_staggerTime * i); 136 | final endTime = startTime + _itemSlideTime; 137 | _itemSlideInterval.add( 138 | Interval(startTime.inMilliseconds / _animationTime.inMilliseconds, 139 | endTime.inMilliseconds / _animationTime.inMilliseconds) 140 | ); 141 | } 142 | 143 | final _buttonStartTime = Duration(milliseconds: (_menuTitles.length * 50)) + 144 | _buttonDelayTime; 145 | final _buttonEndTime = _buttonStartTime + _buttonTime; 146 | _buttonInterval = Interval( 147 | _buttonStartTime.inMilliseconds / _animationTime.inMilliseconds, 148 | _buttonEndTime.inMilliseconds / _animationTime.inMilliseconds); 149 | } 150 | 151 | @override 152 | void dispose() { 153 | _staggerController.dispose(); 154 | super.dispose(); 155 | } 156 | 157 | 158 | @override 159 | Widget build(BuildContext context) { 160 | return Container( 161 | child: Stack( 162 | fit: StackFit.expand, 163 | children: [ 164 | //_buildFlutterLogo(), 165 | _buildContent(), 166 | ], 167 | ), 168 | ); 169 | } 170 | 171 | Widget _buildContent() { 172 | return Column( 173 | crossAxisAlignment: CrossAxisAlignment.start, 174 | children: [ 175 | const SizedBox(height: 20,), 176 | ..._buildListItem(), 177 | const SizedBox(height: 50,), 178 | _buildButton(), 179 | ], 180 | ); 181 | } 182 | 183 | Widget _buildButton() { 184 | return SizedBox( 185 | width: double.infinity, 186 | child: Padding( 187 | padding: const EdgeInsets.all(24.0), 188 | child: AnimatedBuilder( 189 | animation: _staggerController, 190 | builder: (context, child) { 191 | final animationPercent = Curves.elasticOut.transform( 192 | _buttonInterval.transform(_staggerController.value)); 193 | final opacity = animationPercent.clamp(0.0, 1.0); 194 | final scale = (animationPercent * 0.5) + 0.5; 195 | 196 | return Opacity( 197 | opacity: opacity, 198 | child: Transform.scale( 199 | scale: scale, 200 | child: child, 201 | ), 202 | ); 203 | }, 204 | child: ElevatedButton( 205 | style: ElevatedButton.styleFrom( 206 | shape: const StadiumBorder(), 207 | backgroundColor: Colors.blue, 208 | padding: const EdgeInsets.symmetric(horizontal: 48, vertical: 14), 209 | ), 210 | onPressed: () {}, 211 | child: const Text( 212 | 'Get started', 213 | style: TextStyle( 214 | color: Colors.white, 215 | fontSize: 22, 216 | ), 217 | ), 218 | ), 219 | ), 220 | ), 221 | ); 222 | } 223 | 224 | List _buildListItem() { 225 | final listItem = []; 226 | for (var i = 0; i < _menuTitles.length; i++) { 227 | listItem.add( 228 | InkWell( 229 | onTap: () { 230 | ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text("Click on ${_menuTitles[i]}"))); 231 | }, 232 | child: AnimatedBuilder( 233 | animation: _staggerController, 234 | builder: (context, child) { 235 | final animationPercent = Curves.easeOut.transform( 236 | _itemSlideInterval[i].transform(_staggerController.value), 237 | ); 238 | final opacity = animationPercent; 239 | final slideDistance = (1.0 - animationPercent) * 150; 240 | 241 | return Opacity( 242 | opacity: opacity, 243 | child: Transform.translate( 244 | offset: Offset(slideDistance, 0), 245 | child: child, 246 | ), 247 | ); 248 | }, 249 | child: SizedBox( 250 | width: double.infinity, 251 | child: Padding( 252 | padding: const EdgeInsets.symmetric(horizontal: 36, vertical: 16), 253 | child: Text( 254 | _menuTitles[i], 255 | textAlign: TextAlign.left, 256 | style: const TextStyle( 257 | color: Colors.white, 258 | fontSize: 24, 259 | fontWeight: FontWeight.w500, 260 | ), 261 | ), 262 | ), 263 | ), 264 | ), 265 | ) 266 | ); 267 | } 268 | return listItem; 269 | } 270 | 271 | Widget _buildFlutterLogo() { 272 | return const Positioned( 273 | right: -100, 274 | bottom: 100, 275 | child: Opacity( 276 | opacity: 0.2, 277 | child: FlutterLogo( 278 | size: 400, 279 | ), 280 | ), 281 | ); 282 | } 283 | } 284 | 285 | -------------------------------------------------------------------------------- /lib/splash/splash.dart: -------------------------------------------------------------------------------- 1 | 2 | import 'package:flutter/material.dart'; 3 | 4 | class SplashScreen extends StatelessWidget { 5 | 6 | void _onPress() { 7 | 8 | } 9 | @override 10 | Widget build(BuildContext context) { 11 | return Scaffold( 12 | body: Container( 13 | color: Colors.black12, 14 | child: Center( 15 | child: Column( 16 | crossAxisAlignment: CrossAxisAlignment.center, 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | children: [ 19 | const SizedBox(height: 50), 20 | const Image( 21 | width: 300, 22 | height: 300, 23 | image: AssetImage("images/surfing.png") 24 | ), 25 | const SizedBox(height: 50), 26 | const Text("Welcome", style: TextStyle(fontSize: 42, fontWeight: FontWeight.bold),), 27 | const SizedBox(height: 10), 28 | const Text( 29 | "Stay organised and live stress-free \nwith you do app", 30 | style: TextStyle(fontSize: 16, fontWeight: FontWeight.normal), 31 | textAlign: TextAlign.center, 32 | ), 33 | const SizedBox(height: 50,), 34 | Container( 35 | margin: EdgeInsets.symmetric(horizontal: 50), 36 | child: ElevatedButton( 37 | onPressed: () { 38 | _onPress(); 39 | }, 40 | child: const ListTile( 41 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(50))), 42 | title: Text("Sign Up"), 43 | trailing: Icon(Icons.arrow_forward_ios), 44 | ) 45 | ), 46 | ), 47 | const SizedBox(height: 10), 48 | Row( 49 | mainAxisAlignment: MainAxisAlignment.center, 50 | children: const [ 51 | Text("Already have an account? "), 52 | Text("Login", style: TextStyle(fontWeight: FontWeight.bold),), 53 | ], 54 | ) 55 | ], 56 | ), 57 | ), 58 | ), 59 | ); 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "2.10.0" 12 | bloc: 13 | dependency: transitive 14 | description: 15 | name: bloc 16 | sha256: "658a5ae59edcf1e58aac98b000a71c762ad8f46f1394c34a52050cafb3e11a80" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "8.1.1" 20 | boolean_selector: 21 | dependency: transitive 22 | description: 23 | name: boolean_selector 24 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.1.1" 28 | bottom_navy_bar: 29 | dependency: "direct main" 30 | description: 31 | name: bottom_navy_bar 32 | sha256: b30d9a566909b9a56f366b9e8abe0c24ef8939e4b464d1cad5ded6a1e2dcfca1 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "6.0.0" 36 | characters: 37 | dependency: transitive 38 | description: 39 | name: characters 40 | sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.2.1" 44 | clock: 45 | dependency: transitive 46 | description: 47 | name: clock 48 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.1.1" 52 | collection: 53 | dependency: transitive 54 | description: 55 | name: collection 56 | sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.17.0" 60 | cupertino_icons: 61 | dependency: "direct main" 62 | description: 63 | name: cupertino_icons 64 | sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.0.5" 68 | equatable: 69 | dependency: "direct main" 70 | description: 71 | name: equatable 72 | sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "2.0.5" 76 | fake_async: 77 | dependency: transitive 78 | description: 79 | name: fake_async 80 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "1.3.1" 84 | fl_chart: 85 | dependency: "direct main" 86 | description: 87 | name: fl_chart 88 | sha256: "749b3342ea3e95cbf61a0fec31a62606e837377b8b6d0caa7367a7ef80f38b7d" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "0.55.2" 92 | flutter: 93 | dependency: "direct main" 94 | description: flutter 95 | source: sdk 96 | version: "0.0.0" 97 | flutter_bloc: 98 | dependency: "direct main" 99 | description: 100 | name: flutter_bloc 101 | sha256: "434951eea948dbe87f737b674281465f610b8259c16c097b8163ce138749a775" 102 | url: "https://pub.dev" 103 | source: hosted 104 | version: "8.1.2" 105 | flutter_lints: 106 | dependency: "direct dev" 107 | description: 108 | name: flutter_lints 109 | sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c 110 | url: "https://pub.dev" 111 | source: hosted 112 | version: "2.0.1" 113 | flutter_test: 114 | dependency: "direct dev" 115 | description: flutter 116 | source: sdk 117 | version: "0.0.0" 118 | http: 119 | dependency: "direct main" 120 | description: 121 | name: http 122 | sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" 123 | url: "https://pub.dev" 124 | source: hosted 125 | version: "0.13.5" 126 | http_parser: 127 | dependency: transitive 128 | description: 129 | name: http_parser 130 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 131 | url: "https://pub.dev" 132 | source: hosted 133 | version: "4.0.2" 134 | js: 135 | dependency: transitive 136 | description: 137 | name: js 138 | sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" 139 | url: "https://pub.dev" 140 | source: hosted 141 | version: "0.6.5" 142 | lints: 143 | dependency: transitive 144 | description: 145 | name: lints 146 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 147 | url: "https://pub.dev" 148 | source: hosted 149 | version: "2.0.1" 150 | matcher: 151 | dependency: transitive 152 | description: 153 | name: matcher 154 | sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" 155 | url: "https://pub.dev" 156 | source: hosted 157 | version: "0.12.13" 158 | material_color_utilities: 159 | dependency: transitive 160 | description: 161 | name: material_color_utilities 162 | sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 163 | url: "https://pub.dev" 164 | source: hosted 165 | version: "0.2.0" 166 | meta: 167 | dependency: transitive 168 | description: 169 | name: meta 170 | sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" 171 | url: "https://pub.dev" 172 | source: hosted 173 | version: "1.8.0" 174 | nested: 175 | dependency: transitive 176 | description: 177 | name: nested 178 | sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" 179 | url: "https://pub.dev" 180 | source: hosted 181 | version: "1.0.0" 182 | path: 183 | dependency: transitive 184 | description: 185 | name: path 186 | sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b 187 | url: "https://pub.dev" 188 | source: hosted 189 | version: "1.8.2" 190 | provider: 191 | dependency: transitive 192 | description: 193 | name: provider 194 | sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f 195 | url: "https://pub.dev" 196 | source: hosted 197 | version: "6.0.5" 198 | sky_engine: 199 | dependency: transitive 200 | description: flutter 201 | source: sdk 202 | version: "0.0.99" 203 | source_span: 204 | dependency: transitive 205 | description: 206 | name: source_span 207 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 208 | url: "https://pub.dev" 209 | source: hosted 210 | version: "1.9.1" 211 | stack_trace: 212 | dependency: transitive 213 | description: 214 | name: stack_trace 215 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 216 | url: "https://pub.dev" 217 | source: hosted 218 | version: "1.11.0" 219 | stream_channel: 220 | dependency: transitive 221 | description: 222 | name: stream_channel 223 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 224 | url: "https://pub.dev" 225 | source: hosted 226 | version: "2.1.1" 227 | string_scanner: 228 | dependency: transitive 229 | description: 230 | name: string_scanner 231 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 232 | url: "https://pub.dev" 233 | source: hosted 234 | version: "1.2.0" 235 | term_glyph: 236 | dependency: transitive 237 | description: 238 | name: term_glyph 239 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 240 | url: "https://pub.dev" 241 | source: hosted 242 | version: "1.2.1" 243 | test_api: 244 | dependency: transitive 245 | description: 246 | name: test_api 247 | sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 248 | url: "https://pub.dev" 249 | source: hosted 250 | version: "0.4.16" 251 | typed_data: 252 | dependency: transitive 253 | description: 254 | name: typed_data 255 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 256 | url: "https://pub.dev" 257 | source: hosted 258 | version: "1.3.1" 259 | vector_math: 260 | dependency: transitive 261 | description: 262 | name: vector_math 263 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 264 | url: "https://pub.dev" 265 | source: hosted 266 | version: "2.1.4" 267 | sdks: 268 | dart: ">=2.18.0 <3.0.0" 269 | flutter: ">=1.16.0" 270 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: ui_flutter 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 6 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 7 | 8 | # The following defines the version and build number for your application. 9 | # A version number is three numbers separated by dots, like 1.2.43 10 | # followed by an optional build number separated by a +. 11 | # Both the version and the builder number may be overridden in flutter 12 | # build by specifying --build-name and --build-number, respectively. 13 | # In Android, build-name is used as versionName while build-number used as versionCode. 14 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 15 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 16 | # Read more about iOS versioning at 17 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 18 | version: 1.0.0+1 19 | 20 | environment: 21 | sdk: ">=2.17.0 <3.0.0" 22 | 23 | # Dependencies specify other packages that your package needs in order to work. 24 | # To automatically upgrade your package dependencies to the latest versions 25 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 26 | # dependencies can be manually updated by changing the version numbers below to 27 | # the latest version available on pub.dev. To see which dependencies have newer 28 | # versions available, run `flutter pub outdated`. 29 | dependencies: 30 | flutter: 31 | sdk: flutter 32 | 33 | 34 | # The following adds the Cupertino Icons font to your application. 35 | # Use with the CupertinoIcons class for iOS style icons. 36 | cupertino_icons: ^1.0.2 37 | bottom_navy_bar: ^6.0.0 38 | http: ^0.13.4 39 | fl_chart: ^0.55.0 40 | equatable: ^2.0.0 41 | flutter_bloc: ^8.0.1 42 | 43 | dev_dependencies: 44 | flutter_test: 45 | sdk: flutter 46 | 47 | # The "flutter_lints" package below contains a set of recommended lints to 48 | # encourage good coding practices. The lint set provided by the package is 49 | # activated in the `analysis_options.yaml` file located at the root of your 50 | # package. See that file for information about deactivating specific lint 51 | # rules and activating additional ones. 52 | flutter_lints: ^2.0.0 53 | 54 | # For information on the generic Dart part of this file, see the 55 | # following page: https://dart.dev/tools/pub/pubspec 56 | 57 | # The following section is specific to Flutter packages. 58 | flutter: 59 | 60 | # The following line ensures that the Material Icons font is 61 | # included with your application, so that you can use the icons in 62 | # the material Icons class. 63 | uses-material-design: true 64 | 65 | # To add assets to your application, add an assets section, like this: 66 | assets: 67 | - images/google.png 68 | - images/weather.png 69 | - images/light_rain.png 70 | - images/light_rainsun.png 71 | - images/partly_cloudy.png 72 | - images/rainy.png 73 | - images/flying-kite.png 74 | - images/men.webp 75 | - images/mens.webp 76 | - images/froks.webp 77 | - images/jogger.webp 78 | - images/socks.webp 79 | - images/women.webp 80 | - images/surfing.png 81 | - images/profile.png 82 | - images/mastercard.png 83 | - images/sandwich.png 84 | - images/credit-card.png 85 | - images/paypal.png 86 | - images/taxi.png 87 | - images/shopping-bag.png 88 | - images/listen_music.jpg 89 | - images/disney_plus_logo.png 90 | - images/micky_mouse.png 91 | - images/bg_image.png 92 | 93 | # An image asset can refer to one or more resolution-specific "variants", see 94 | # https://flutter.dev/assets-and-images/#resolution-aware 95 | 96 | # For details regarding adding assets from package dependencies, see 97 | # https://flutter.dev/assets-and-images/#from-packages 98 | 99 | # To add custom fonts to your application, add a fonts section here, 100 | # in this "flutter" section. Each entry in this list should have a 101 | # "family" key with the font family name, and a "fonts" key with a 102 | # list giving the asset and other descriptors for the font. For 103 | # example: 104 | # fonts: 105 | # - family: Schyler 106 | # fonts: 107 | # - asset: fonts/Schyler-Regular.ttf 108 | # - asset: fonts/Schyler-Italic.ttf 109 | # style: italic 110 | # - family: Trajan Pro 111 | # fonts: 112 | # - asset: fonts/TrajanPro.ttf 113 | # - asset: fonts/TrajanPro_Bold.ttf 114 | # weight: 700 115 | # 116 | # For details regarding fonts from package dependencies, 117 | # see https://flutter.dev/custom-fonts/#from-packages 118 | -------------------------------------------------------------------------------- /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 in the flutter_test package. 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:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:ui_flutter/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | --------------------------------------------------------------------------------