├── README.md ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── beybico_admin │ │ │ │ └── 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 ├── assets ├── icons │ ├── Documents.svg │ ├── Search.svg │ ├── drop_box.svg │ ├── folder.svg │ ├── logo.svg │ ├── media.svg │ ├── menu_dashbord.svg │ ├── menu_doc.svg │ ├── menu_notification.svg │ ├── menu_profile.svg │ ├── menu_setting.svg │ ├── menu_store.svg │ ├── menu_task.svg │ ├── menu_tran.svg │ └── unknown.svg ├── images │ ├── mockup-2.png │ ├── mockup-3.png │ ├── mockup.png │ └── profile_pic.png ├── logo │ ├── logo.png │ ├── logo.svg │ ├── logo_icon.png │ ├── logo_name.svg │ └── logo_text.png └── slides │ ├── background-1.jpeg │ ├── background-2.jpeg │ ├── background-3.jpeg │ └── background.jpeg ├── ios ├── .gitignore ├── Flutter │ ├── AppFrameworkInfo.plist │ ├── Debug.xcconfig │ └── Release.xcconfig ├── Podfile ├── 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 ├── core │ ├── constants │ │ └── color_constants.dart │ ├── init │ │ └── provider_list.dart │ ├── models │ │ └── data.dart │ ├── utils │ │ └── colorful_tag.dart │ └── widgets │ │ ├── app_button_widget.dart │ │ ├── calendar_item.dart │ │ ├── input_widget.dart │ │ └── wrapper.dart ├── main.dart ├── models │ ├── daily_info_model.dart │ ├── recent_user_model.dart │ └── slider_model.dart ├── providers │ └── menu_provider.dart ├── responsive.dart └── screens │ ├── dashboard │ ├── components │ │ ├── calendar_data_section.dart │ │ ├── calendar_list_widget.dart │ │ ├── calendart_widget.dart │ │ ├── charts.dart │ │ ├── header.dart │ │ ├── list_calendar_data.dart │ │ ├── mini_information_card.dart │ │ ├── mini_information_widget.dart │ │ ├── recent_forums.dart │ │ ├── recent_users copy.dart │ │ ├── recent_users.dart │ │ ├── user_details_mini_card.dart │ │ └── user_details_widget.dart │ └── dashboard_screen.dart │ ├── forms │ ├── components │ │ └── add_new_widget.dart │ ├── input_form.dart │ └── input_form_bak.dart │ ├── home │ ├── components │ │ └── side_menu.dart │ └── home_screen.dart │ └── login │ ├── components │ └── slider_widget.dart │ └── login_screen.dart ├── pubspec.lock ├── pubspec.yaml ├── routes.dart ├── screenshots └── deniz-codes-sc.png ├── test └── widget_test.dart └── web ├── favicon.png ├── icons ├── Icon-192.png └── Icon-512.png ├── index.html └── manifest.json /README.md: -------------------------------------------------------------------------------- 1 | # 🔥 🔥 Smart Admin Panel & Dashboard 2 | 3 | Flutter Web Smart Admin & Panel Dashboard with flutter UI kit. 4 | 5 | 6 | ### Support 7 | 8 | > ⭐️ If you want to access the backend(Firebase or Django) integrated fully management system with comprehensive features and good documentation. You can leave me message. ⭐️ 9 | 10 | 11 | [![BTC](https://img.shields.io/badge/BTC-33FY83UU8o5q8qogNzFY2CegPn6PzRCsJA-f5f5f5?logo=bitcoin)](https://blockchain.com/btc/address/33FY83UU8o5q8qogNzFY2CegPn6PzRCsJA) 12 | 13 | 14 | ### Smart Admin Panel & Dashboard 15 | 16 | 17 | ![alt text](/screenshots/deniz-codes-sc.png) 18 | 19 | 20 | ### 💻 Requirements 21 | 22 | - Any Operating System (MacOS, Linux, Windows) 23 | - Any IDE with Flutter SDK installed (Android Studio, VSCode etc) 24 | - A little knowledge of Dart and Flutter 25 | 26 | 27 | ### 👨‍💻 Author 28 | 29 | Developed by Deniz Çolak -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 30 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | defaultConfig { 36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 37 | applicationId "com.example.smart_admin_dashboard" 38 | minSdkVersion 16 39 | targetSdkVersion 30 40 | versionCode flutterVersionCode.toInteger() 41 | versionName flutterVersionName 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 59 | } 60 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 13 | 17 | 21 | 26 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/beybico_admin/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.smart_admin_dashboard 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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.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-6.7-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 | -------------------------------------------------------------------------------- /assets/icons/Documents.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/Search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /assets/icons/drop_box.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icons/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/media.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_dashbord.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_doc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_notification.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_profile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_setting.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_store.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_task.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/menu_tran.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icons/unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/mockup-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/images/mockup-2.png -------------------------------------------------------------------------------- /assets/images/mockup-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/images/mockup-3.png -------------------------------------------------------------------------------- /assets/images/mockup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/images/mockup.png -------------------------------------------------------------------------------- /assets/images/profile_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/images/profile_pic.png -------------------------------------------------------------------------------- /assets/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/logo/logo.png -------------------------------------------------------------------------------- /assets/logo/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 43 | 44 | 45 | 46 | 47 | 48 | SMART 49 | DASHBOARD 50 | 51 | D 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /assets/logo/logo_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/logo/logo_icon.png -------------------------------------------------------------------------------- /assets/logo/logo_name.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 39 | 40 | 41 | 42 | 43 | 44 | SMART 45 | DASHBOARD 46 | 47 | D 48 | 49 | 50 | -------------------------------------------------------------------------------- /assets/logo/logo_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/logo/logo_text.png -------------------------------------------------------------------------------- /assets/slides/background-1.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/slides/background-1.jpeg -------------------------------------------------------------------------------- /assets/slides/background-2.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/slides/background-2.jpeg -------------------------------------------------------------------------------- /assets/slides/background-3.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/slides/background-3.jpeg -------------------------------------------------------------------------------- /assets/slides/background.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/assets/slides/background.jpeg -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | *.mode1v3 2 | *.mode2v3 3 | *.moved-aside 4 | *.pbxuser 5 | *.perspectivev3 6 | **/*sync/ 7 | .sconsign.dblite 8 | .tags* 9 | **/.vagrant/ 10 | **/DerivedData/ 11 | Icon? 12 | **/Pods/ 13 | **/.symlinks/ 14 | profile 15 | xcuserdata 16 | **/.generated/ 17 | Flutter/App.framework 18 | Flutter/Flutter.framework 19 | Flutter/Flutter.podspec 20 | Flutter/Generated.xcconfig 21 | Flutter/app.flx 22 | Flutter/app.zip 23 | Flutter/flutter_assets/ 24 | Flutter/flutter_export_environment.sh 25 | ServiceDefinitions.json 26 | Runner/GeneratedPluginRegistrant.* 27 | 28 | # Exceptions to above rules. 29 | !default.mode1v3 30 | !default.mode2v3 31 | !default.pbxuser 32 | !default.perspectivev3 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | use_frameworks! 32 | use_modular_headers! 33 | 34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 35 | end 36 | 37 | post_install do |installer| 38 | installer.pods_project.targets.each do |target| 39 | flutter_additional_ios_build_settings(target) 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /ios/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 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/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/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | smart_admin_dashboard 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/core/constants/color_constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | const primaryColor = Color(0xFF2697FF); 4 | //const secondaryColor = Color(0xFF2A2D3E); 5 | //const bgColor = Color(0xFF212132); 6 | 7 | const secondaryColor = Color(0xFF292929); 8 | const bgColor = Color(0xFF212121); 9 | const darkgreenColor = Color(0xFF2c614f); 10 | const greenColor = Color(0xFF6bab58); 11 | 12 | const defaultPadding = 16.0; 13 | const double defaultBorderRadius = 15; 14 | 15 | class ColorConstants { 16 | static Color blue = Color(0xFF0D46BB); 17 | } 18 | 19 | class Palette { 20 | static const Color background = Color(0xFFEDEEF2); 21 | static const Color wrapperBg = Color(0xFF212121); 22 | } 23 | -------------------------------------------------------------------------------- /lib/core/init/provider_list.dart: -------------------------------------------------------------------------------- 1 | import 'package:provider/single_child_widget.dart'; 2 | 3 | //import '../navigation/navigation_service.dart'; 4 | 5 | class ApplicationProvider { 6 | static ApplicationProvider? _instance; 7 | static ApplicationProvider get instance { 8 | _instance ??= ApplicationProvider._init(); 9 | return _instance!; 10 | } 11 | 12 | ApplicationProvider._init(); 13 | 14 | List singleItems = []; 15 | List dependItems = [ 16 | //ChangeNotifierProvider( 17 | // create: (_) => MenuController(), 18 | //), 19 | 20 | // Provider.value(value: NavigationService.instance) 21 | ]; 22 | List uiChangesItems = []; 23 | } 24 | -------------------------------------------------------------------------------- /lib/core/models/data.dart: -------------------------------------------------------------------------------- 1 | import 'package:intl/intl.dart'; 2 | 3 | class CalendarData { 4 | final String name; 5 | 6 | final DateTime date; 7 | final String position; 8 | final String rating; 9 | 10 | String getDate() { 11 | final formatter = DateFormat('kk:mm'); 12 | 13 | return formatter.format(date); 14 | } 15 | 16 | CalendarData({ 17 | required this.name, 18 | required this.date, 19 | required this.position, 20 | required this.rating, 21 | }); 22 | } 23 | 24 | final List calendarData = [ 25 | CalendarData( 26 | name: 'Deniz Çolak', 27 | date: DateTime.now().add(Duration(days: -16, hours: 5)), 28 | position: "Software Architect", 29 | rating: '₽', 30 | ), 31 | CalendarData( 32 | name: 'John Doe', 33 | date: DateTime.now().add(Duration(days: -5, hours: 8)), 34 | position: "Software Engineer", 35 | rating: '₽', 36 | ), 37 | CalendarData( 38 | name: 'Joy Barker', 39 | date: DateTime.now().add(Duration(days: -10, hours: 3)), 40 | position: "Solution Architect", 41 | rating: '\$', 42 | ), 43 | CalendarData( 44 | name: 'Kate Hartley', 45 | date: DateTime.now().add(Duration(days: 6, hours: 6)), 46 | position: "Project Manager", 47 | rating: '\$', 48 | ), 49 | CalendarData( 50 | name: 'Fletcher Robson', 51 | date: DateTime.now().add(Duration(days: -18, hours: 9)), 52 | position: "Line Manager", 53 | rating: '\$', 54 | ), 55 | CalendarData( 56 | name: 'Aldrich Mason', 57 | date: DateTime.now().add(Duration(days: -12, hours: 2)), 58 | position: "UI/UX Designer", 59 | rating: '\$', 60 | ), 61 | CalendarData( 62 | name: 'Phyllis Leonard', 63 | date: DateTime.now().add(Duration(days: -8, hours: 4)), 64 | position: "Business Analyst", 65 | rating: '\$', 66 | ), 67 | CalendarData( 68 | name: 'Ken Rehbein', 69 | date: DateTime.now().add(Duration(days: -3, hours: 6)), 70 | position: "Software Architect", 71 | rating: '₽', 72 | ), 73 | CalendarData( 74 | name: 'Sydney Blake', 75 | date: DateTime.now().add(Duration(days: -2, hours: 6)), 76 | position: "Project Manager", 77 | rating: '₽', 78 | ), 79 | CalendarData( 80 | name: 'Megan Salazar', 81 | date: DateTime.now().add(Duration(days: -2, hours: 7)), 82 | position: "Software Engineer", 83 | rating: '₽', 84 | ), 85 | CalendarData( 86 | name: 'Celeste Pena', 87 | date: DateTime.now().add(Duration(days: -14, hours: 5)), 88 | position: "Solution Architect", 89 | rating: '₽', 90 | ), 91 | ]; 92 | -------------------------------------------------------------------------------- /lib/core/utils/colorful_tag.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | Color getRoleColor(String? role) { 6 | if (role == "Doctor") { 7 | return Colors.green; 8 | } else if (role == "Software Architect") { 9 | return Colors.red; 10 | } else if (role == "Software Engineer") { 11 | return Colors.blueAccent; 12 | } else if (role == "Solution Architect") { 13 | return Colors.amberAccent; 14 | } else if (role == "Project Manager") { 15 | return Colors.cyanAccent; 16 | } else if (role == "Business Analyst") { 17 | return Colors.deepPurpleAccent; 18 | } else if (role == "UI/UX Designer") { 19 | return Colors.indigoAccent; 20 | } 21 | return Colors.black38; 22 | } 23 | -------------------------------------------------------------------------------- /lib/core/widgets/app_button_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | enum ButtonType { PRIMARY, PLAIN } 4 | 5 | class AppButton extends StatelessWidget { 6 | final ButtonType? type; 7 | final VoidCallback? onPressed; 8 | final String? text; 9 | 10 | AppButton({this.type, this.onPressed, this.text}); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return InkWell( 15 | onTap: this.onPressed, 16 | child: Container( 17 | width: double.infinity, 18 | height: 45, 19 | decoration: BoxDecoration( 20 | color: getButtonColor(context, type!), 21 | borderRadius: BorderRadius.circular(4.0), 22 | boxShadow: [ 23 | BoxShadow( 24 | //color: Color.fromRGBO(169, 176, 185, 0.42), 25 | //spreadRadius: 0, 26 | //blurRadius: 3.0, 27 | //offset: Offset(0, 2), 28 | ) 29 | ], 30 | ), 31 | child: Center( 32 | child: Text(this.text!, 33 | style: Theme.of(context) 34 | .textTheme 35 | .subtitle1! 36 | .copyWith(color: getTextColor(context, type!))), 37 | ), 38 | ), 39 | ); 40 | } 41 | } 42 | 43 | Color getButtonColor(context, ButtonType type) { 44 | switch (type) { 45 | case ButtonType.PRIMARY: 46 | return Theme.of(context).buttonColor; 47 | case ButtonType.PLAIN: 48 | return Colors.white; 49 | default: 50 | return Theme.of(context).primaryColor; 51 | } 52 | } 53 | 54 | Color getTextColor(context, ButtonType type) { 55 | switch (type) { 56 | case ButtonType.PLAIN: 57 | return Theme.of(context).primaryColor; 58 | case ButtonType.PRIMARY: 59 | return Colors.white; 60 | default: 61 | return Theme.of(context).buttonColor; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/core/widgets/calendar_item.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/models/data.dart'; 3 | 4 | import 'package:smart_admin_dashboard/core/utils/colorful_tag.dart'; 5 | import 'package:colorize_text_avatar/colorize_text_avatar.dart'; 6 | 7 | import 'package:flutter/material.dart'; 8 | 9 | class CalendarItem extends StatelessWidget { 10 | final CalendarData calendarItemData; 11 | 12 | const CalendarItem({Key? key, required this.calendarItemData}) 13 | : super(key: key); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return Container( 18 | //padding: const EdgeInsets.only(bottom: defaultPadding), 19 | child: Row( 20 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 21 | children: [ 22 | Row( 23 | mainAxisAlignment: MainAxisAlignment.start, 24 | crossAxisAlignment: CrossAxisAlignment.center, 25 | children: [ 26 | TextAvatar( 27 | text: calendarItemData.name, 28 | size: 50, 29 | backgroundColor: Colors.white, 30 | textColor: Colors.white, 31 | fontSize: 14, 32 | upperCase: true, 33 | numberLetters: 1, 34 | shape: Shape.Rectangle, 35 | ), 36 | const SizedBox(width: 8), 37 | Column( 38 | crossAxisAlignment: CrossAxisAlignment.start, 39 | children: [ 40 | Text( 41 | calendarItemData.name, 42 | style: const TextStyle( 43 | fontSize: 14, 44 | ), 45 | ), 46 | const SizedBox(height: 5), 47 | Container( 48 | padding: EdgeInsets.all(4), 49 | decoration: BoxDecoration( 50 | color: getRoleColor(calendarItemData.position) 51 | .withOpacity(.2), 52 | border: Border.all( 53 | color: getRoleColor(calendarItemData.position), 54 | ), 55 | borderRadius: BorderRadius.all( 56 | Radius.circular(4.0), 57 | ), 58 | ), 59 | child: Text( 60 | calendarItemData.position, 61 | style: Theme.of(context) 62 | .textTheme 63 | .subtitle2! 64 | .copyWith(fontSize: 12), 65 | ), 66 | ) 67 | ], 68 | ) 69 | ], 70 | ), 71 | _Date(date: calendarItemData.getDate()) 72 | ], 73 | ), 74 | ); 75 | } 76 | } 77 | 78 | class _Date extends StatelessWidget { 79 | final String date; 80 | 81 | const _Date({Key? key, required this.date}) : super(key: key); 82 | 83 | @override 84 | Widget build(BuildContext context) { 85 | return Container( 86 | padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 8), 87 | decoration: BoxDecoration( 88 | color: secondaryColor, 89 | borderRadius: BorderRadius.circular(4), 90 | border: Border.all( 91 | color: greenColor.withOpacity(0.5), 92 | ), 93 | ), 94 | child: Text( 95 | date, 96 | style: 97 | const TextStyle(color: Colors.white, fontWeight: FontWeight.bold), 98 | ), 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /lib/core/widgets/input_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class InputWidget extends StatelessWidget { 5 | final String? hintText; 6 | final String? errorText; 7 | final Widget? prefixIcon; 8 | final double? height; 9 | final String? topLabel; 10 | final bool? obscureText; 11 | final FormFieldSetter? onSaved; 12 | final ValueChanged? onChanged; 13 | final FormFieldValidator? validator; 14 | final TextInputType? keyboardType; 15 | final Key? kKey; 16 | final TextEditingController? kController; 17 | final String? kInitialValue; 18 | 19 | InputWidget({ 20 | this.hintText, 21 | this.prefixIcon, 22 | this.height = 48.0, 23 | this.topLabel = "", 24 | this.obscureText = false, 25 | required this.onSaved, 26 | this.keyboardType, 27 | this.errorText, 28 | this.onChanged, 29 | this.validator, 30 | this.kKey, 31 | this.kController, 32 | this.kInitialValue, 33 | }); 34 | @override 35 | Widget build(BuildContext context) { 36 | return Column( 37 | crossAxisAlignment: CrossAxisAlignment.start, 38 | children: [ 39 | Text(this.topLabel!), 40 | SizedBox(height: 4.0), 41 | Container( 42 | height: 50, 43 | decoration: BoxDecoration( 44 | color: secondaryColor, 45 | //color: Theme.of(context).buttonColor, 46 | borderRadius: BorderRadius.circular(4.0), 47 | ), 48 | child: TextFormField( 49 | initialValue: this.kInitialValue, 50 | controller: this.kController, 51 | key: this.kKey, 52 | keyboardType: this.keyboardType, 53 | onSaved: this.onSaved, 54 | onChanged: this.onChanged, 55 | validator: this.validator, 56 | obscureText: this.obscureText!, 57 | decoration: InputDecoration( 58 | prefixIcon: this.prefixIcon, 59 | enabledBorder: OutlineInputBorder( 60 | borderSide: BorderSide( 61 | color: Color.fromRGBO(74, 77, 84, 0.2), 62 | ), 63 | ), 64 | focusedBorder: OutlineInputBorder( 65 | //gapPadding: 16, 66 | borderSide: BorderSide( 67 | color: Theme.of(context).primaryColor, 68 | ), 69 | ), 70 | errorStyle: TextStyle(height: 0, color: Colors.transparent), 71 | errorBorder: OutlineInputBorder( 72 | borderSide: BorderSide( 73 | color: Theme.of(context).errorColor, 74 | ), 75 | ), 76 | focusedErrorBorder: OutlineInputBorder( 77 | //gapPaddings: 16, 78 | borderSide: BorderSide( 79 | color: Theme.of(context).errorColor, 80 | ), 81 | ), 82 | hintText: this.hintText, 83 | hintStyle: Theme.of(context) 84 | .textTheme 85 | .bodyText1! 86 | .copyWith(color: Colors.white54), 87 | errorText: this.errorText), 88 | ), 89 | ) 90 | ], 91 | ); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /lib/core/widgets/wrapper.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class Wrapper extends StatelessWidget { 5 | final Widget? title; 6 | final Widget child; 7 | 8 | const Wrapper({Key? key, this.title, required this.child}) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return Container( 13 | padding: const EdgeInsets.all(defaultPadding), 14 | decoration: BoxDecoration( 15 | color: Palette.wrapperBg, 16 | borderRadius: BorderRadius.circular(defaultBorderRadius), 17 | ), 18 | child: Column( 19 | crossAxisAlignment: CrossAxisAlignment.start, 20 | children: [ 21 | if (title != null) 22 | Column( 23 | children: [ 24 | title!, 25 | const SizedBox(height: defaultPadding), 26 | ], 27 | ), 28 | child 29 | ], 30 | ), 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/init/provider_list.dart'; 3 | import 'package:smart_admin_dashboard/screens/login/login_screen.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:google_fonts/google_fonts.dart'; 6 | import 'package:provider/provider.dart'; 7 | 8 | void main() { 9 | runApp(MyApp()); 10 | } 11 | 12 | Widget build(BuildContext context) { 13 | return MultiProvider( 14 | providers: [...ApplicationProvider.instance.dependItems], 15 | child: FutureBuilder( 16 | builder: (context, snapshot) { 17 | return MyApp(); 18 | }, 19 | )); 20 | } 21 | 22 | class MyApp extends StatelessWidget { 23 | // This widget is the root of your application. 24 | @override 25 | Widget build(BuildContext context) { 26 | return MaterialApp( 27 | debugShowCheckedModeBanner: false, 28 | title: 'Smart Dashboard - Admin Panel v0.1 ', 29 | theme: ThemeData.dark().copyWith( 30 | appBarTheme: AppBarTheme(backgroundColor: bgColor, elevation: 0), 31 | scaffoldBackgroundColor: bgColor, 32 | primaryColor: greenColor, 33 | dialogBackgroundColor: secondaryColor, 34 | buttonColor: greenColor, 35 | textTheme: GoogleFonts.openSansTextTheme(Theme.of(context).textTheme) 36 | .apply(bodyColor: Colors.white), 37 | canvasColor: secondaryColor, 38 | ), 39 | home: Login(title: "Wellcome to the Admin & Dashboard Panel"), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/models/daily_info_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:fl_chart/fl_chart.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_icons/flutter_icons.dart'; 5 | 6 | class DailyInfoModel { 7 | IconData? icon; 8 | String? title; 9 | String? totalStorage; 10 | int? volumeData; 11 | int? percentage; 12 | Color? color; 13 | List? colors; 14 | List? spots; 15 | 16 | DailyInfoModel({ 17 | this.icon, 18 | this.title, 19 | this.totalStorage, 20 | this.volumeData, 21 | this.percentage, 22 | this.color, 23 | this.colors, 24 | this.spots, 25 | }); 26 | 27 | DailyInfoModel.fromJson(Map json) { 28 | title = json['title']; 29 | volumeData = json['volumeData']; 30 | icon = json['icon']; 31 | totalStorage = json['totalStorage']; 32 | color = json['color']; 33 | percentage = json['percentage']; 34 | colors = json['colors']; 35 | spots = json['spots']; 36 | } 37 | 38 | Map toJson() { 39 | final Map data = new Map(); 40 | data['title'] = this.title; 41 | data['volumeData'] = this.volumeData; 42 | data['icon'] = this.icon; 43 | data['totalStorage'] = this.totalStorage; 44 | data['color'] = this.color; 45 | data['percentage'] = this.percentage; 46 | data['colors'] = this.colors; 47 | data['spots'] = this.spots; 48 | return data; 49 | } 50 | } 51 | 52 | List dailyDatas = 53 | dailyData.map((item) => DailyInfoModel.fromJson(item)).toList(); 54 | 55 | //List spots = yValues.asMap().entries.map((e) { 56 | // return FlSpot(e.key.toDouble(), e.value); 57 | //}).toList(); 58 | 59 | var dailyData = [ 60 | { 61 | "title": "Employee", 62 | "volumeData": 1328, 63 | "icon": FlutterIcons.user_alt_faw5s, 64 | "totalStorage": "+ %20", 65 | "color": primaryColor, 66 | "percentage": 35, 67 | "colors": [ 68 | Color(0xff23b6e6), 69 | Color(0xff02d39a), 70 | ], 71 | "spots": [ 72 | FlSpot( 73 | 1, 74 | 2, 75 | ), 76 | FlSpot( 77 | 2, 78 | 1.0, 79 | ), 80 | FlSpot( 81 | 3, 82 | 1.8, 83 | ), 84 | FlSpot( 85 | 4, 86 | 1.5, 87 | ), 88 | FlSpot( 89 | 5, 90 | 1.0, 91 | ), 92 | FlSpot( 93 | 6, 94 | 2.2, 95 | ), 96 | FlSpot( 97 | 7, 98 | 1.8, 99 | ), 100 | FlSpot( 101 | 8, 102 | 1.5, 103 | ) 104 | ] 105 | }, 106 | { 107 | "title": "On Leave", 108 | "volumeData": 1328, 109 | "icon": FlutterIcons.message1_ant, 110 | "totalStorage": "+ %5", 111 | "color": Color(0xFFFFA113), 112 | "percentage": 35, 113 | "colors": [Color(0xfff12711), Color(0xfff5af19)], 114 | "spots": [ 115 | FlSpot( 116 | 1, 117 | 1.3, 118 | ), 119 | FlSpot( 120 | 2, 121 | 1.0, 122 | ), 123 | FlSpot( 124 | 3, 125 | 4, 126 | ), 127 | FlSpot( 128 | 4, 129 | 1.5, 130 | ), 131 | FlSpot( 132 | 5, 133 | 1.0, 134 | ), 135 | FlSpot( 136 | 6, 137 | 3, 138 | ), 139 | FlSpot( 140 | 7, 141 | 1.8, 142 | ), 143 | FlSpot( 144 | 8, 145 | 1.5, 146 | ) 147 | ] 148 | }, 149 | { 150 | "title": "Onboarding", 151 | "volumeData": 1328, 152 | "icon": FlutterIcons.comment_alt_faw5s, 153 | "totalStorage": "+ %8", 154 | "color": Color(0xFFA4CDFF), 155 | "percentage": 10, 156 | "colors": [Color(0xff2980B9), Color(0xff6DD5FA)], 157 | "spots": [ 158 | FlSpot( 159 | 1, 160 | 1.3, 161 | ), 162 | FlSpot( 163 | 2, 164 | 5, 165 | ), 166 | FlSpot( 167 | 3, 168 | 1.8, 169 | ), 170 | FlSpot( 171 | 4, 172 | 6, 173 | ), 174 | FlSpot( 175 | 5, 176 | 1.0, 177 | ), 178 | FlSpot( 179 | 6, 180 | 2.2, 181 | ), 182 | FlSpot( 183 | 7, 184 | 1.8, 185 | ), 186 | FlSpot( 187 | 8, 188 | 1, 189 | ) 190 | ] 191 | }, 192 | { 193 | "title": "Open Position", 194 | "volumeData": 1328, 195 | "icon": FlutterIcons.heart_faw5s, 196 | "totalStorage": "+ %8", 197 | "color": Color(0xFFd50000), 198 | "percentage": 10, 199 | "colors": [Color(0xff93291E), Color(0xffED213A)], 200 | "spots": [ 201 | FlSpot( 202 | 1, 203 | 3, 204 | ), 205 | FlSpot( 206 | 2, 207 | 4, 208 | ), 209 | FlSpot( 210 | 3, 211 | 1.8, 212 | ), 213 | FlSpot( 214 | 4, 215 | 1.5, 216 | ), 217 | FlSpot( 218 | 5, 219 | 1.0, 220 | ), 221 | FlSpot( 222 | 6, 223 | 2.2, 224 | ), 225 | FlSpot( 226 | 7, 227 | 1.8, 228 | ), 229 | FlSpot( 230 | 8, 231 | 1.5, 232 | ) 233 | ] 234 | }, 235 | { 236 | "title": "Efficiency", 237 | "volumeData": 5328, 238 | "icon": FlutterIcons.bell_faw5s, 239 | "totalStorage": "- %5", 240 | "color": Color(0xFF00F260), 241 | "percentage": 78, 242 | "colors": [Color(0xff0575E6), Color(0xff00F260)], 243 | "spots": [ 244 | FlSpot( 245 | 1, 246 | 1.3, 247 | ), 248 | FlSpot( 249 | 2, 250 | 1.0, 251 | ), 252 | FlSpot( 253 | 3, 254 | 1.8, 255 | ), 256 | FlSpot( 257 | 4, 258 | 1.5, 259 | ), 260 | FlSpot( 261 | 5, 262 | 1.0, 263 | ), 264 | FlSpot( 265 | 6, 266 | 2.2, 267 | ), 268 | FlSpot( 269 | 7, 270 | 1.8, 271 | ), 272 | FlSpot( 273 | 8, 274 | 1.5, 275 | ) 276 | ] 277 | } 278 | ]; 279 | 280 | //final List yValues = [ 281 | // 2.3, 282 | // 1.8, 283 | // 1.9, 284 | // 1.5, 285 | // 1.0, 286 | // 2.2, 287 | // 1.8, 288 | // 1.5, 289 | //]; 290 | -------------------------------------------------------------------------------- /lib/models/recent_user_model.dart: -------------------------------------------------------------------------------- 1 | class RecentUser { 2 | final String? icon, name, date, posts, role, email; 3 | 4 | RecentUser( 5 | {this.icon, this.name, this.date, this.posts, this.role, this.email}); 6 | } 7 | 8 | List recentUsers = [ 9 | RecentUser( 10 | icon: "assets/icons/xd_file.svg", 11 | name: "Deniz Çolak", 12 | role: "Software Architect", 13 | email: "de***ak@huawei.com", 14 | date: "01-03-2021", 15 | posts: "4", 16 | ), 17 | RecentUser( 18 | icon: "assets/icons/Figma_file.svg", 19 | name: "S*** Ç****", 20 | role: "Software Engineer", 21 | email: "se****k1@google.com", 22 | date: "27-02-2021", 23 | posts: "19", 24 | ), 25 | RecentUser( 26 | icon: "assets/icons/doc_file.svg", 27 | name: "N***** D****", 28 | role: "Solution Architect", 29 | email: "ne****tr@google.com", 30 | date: "23-02-2021", 31 | posts: "32", 32 | ), 33 | RecentUser( 34 | icon: "assets/icons/sound_file.svg", 35 | name: "B***** K****", 36 | role: "Project Manager", 37 | email: "bu****lk@google.com", 38 | date: "21-02-2021", 39 | posts: "3", 40 | ), 41 | RecentUser( 42 | icon: "assets/icons/media_file.svg", 43 | name: "A**** S**** K****", 44 | role: "Line Manager", 45 | email: "ah****az@google.com", 46 | date: "23-02-2021", 47 | posts: "2", 48 | ), 49 | RecentUser( 50 | icon: "assets/icons/pdf_file.svg", 51 | name: "T***** S****", 52 | role: "UI/UX Designer", 53 | email: "te****cu@google.com", 54 | date: "25-02-2021", 55 | posts: "3", 56 | ), 57 | RecentUser( 58 | icon: "assets/icons/excle_file.svg", 59 | name: "K***** D****", 60 | role: "Business Analyst", 61 | email: "ke****an@gmail.com", 62 | date: "25-02-2021", 63 | posts: "34", 64 | ), 65 | ]; 66 | -------------------------------------------------------------------------------- /lib/models/slider_model.dart: -------------------------------------------------------------------------------- 1 | class SliderModel { 2 | String? image; 3 | String? text; 4 | String? altText; 5 | String? bAltText; 6 | String? productImage; 7 | int? kBackgroundColor; 8 | 9 | SliderModel(this.image, this.text, this.altText, this.bAltText, 10 | this.productImage, this.kBackgroundColor); 11 | 12 | SliderModel.fromJson(Map json) { 13 | image = json['image']; 14 | kBackgroundColor = json['kBackgroundColor']; 15 | text = json['text']; 16 | altText = json['altText']; 17 | bAltText = json['bAltText']; 18 | productImage = json['productImage']; 19 | } 20 | 21 | Map toJson() { 22 | final Map data = new Map(); 23 | data['image'] = this.image; 24 | data['kBackgroundColor'] = this.kBackgroundColor; 25 | data['text'] = this.text; 26 | data['altText'] = this.altText; 27 | data['bAltText'] = this.bAltText; 28 | data['productImage'] = this.productImage; 29 | return data; 30 | } 31 | } 32 | 33 | List slides = 34 | slideData.map((item) => SliderModel.fromJson(item)).toList(); 35 | 36 | var slideData = [ 37 | { 38 | "image": "assets/slides/background-1.jpeg", 39 | "kBackgroundColor": 0xFF2c614f, 40 | "text": "Welcome to the Smart Smart Admin Dashboard!", 41 | "altText": "You can access & track your services in real-time.", 42 | "bAltText": "Are you ready for the next generation AI supported Dashboard?", 43 | "productImage": "assets/images/mockup.png" 44 | }, 45 | { 46 | "image": "assets/slides/background-2.jpeg", 47 | "kBackgroundColor": 0xFF8a1a4c, 48 | "text": "¡Bienvenido al tablero Smart Admin Dashboard!", 49 | "altText": "Puede acceder y rastrear sus servicios en tiempo real.", 50 | "bAltText": 51 | "¿Estás listo para el panel de control impulsado por IA de próxima generación?", 52 | "productImage": "assets/images/mockup-2.png" 53 | }, 54 | { 55 | "image": "assets/slides/background-3.jpeg", 56 | "kBackgroundColor": 0xFF0ab3ec, 57 | "text": "Willkommen im Smart Admin Dashboard!", 58 | "altText": 59 | "Sie können in Echtzeit auf Ihre Dienste zugreifen und diese verfolgen.", 60 | "bAltText": 61 | "Sind Sie bereit für das AI-unterstützte Dashboard der nächsten Generation?", 62 | "productImage": "assets/images/mockup-3.png" 63 | } 64 | ]; 65 | -------------------------------------------------------------------------------- /lib/providers/menu_provider.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/responsive.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Responsive extends StatelessWidget { 4 | final Widget mobile; 5 | final Widget tablet; 6 | final Widget desktop; 7 | 8 | const Responsive({ 9 | Key? key, 10 | required this.mobile, 11 | required this.tablet, 12 | required this.desktop, 13 | }) : super(key: key); 14 | 15 | // This size work fine on my design, maybe you need some customization depends on your design 16 | 17 | // This isMobile, isTablet, isDesktop helep us later 18 | static bool isMobile(BuildContext context) => 19 | MediaQuery.of(context).size.width < 850; 20 | 21 | static bool isTablet(BuildContext context) => 22 | MediaQuery.of(context).size.width < 1100 && 23 | MediaQuery.of(context).size.width >= 850; 24 | 25 | static bool isDesktop(BuildContext context) => 26 | MediaQuery.of(context).size.width >= 1100; 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | final Size _size = MediaQuery.of(context).size; 31 | // If our width is more than 1100 then we consider it a desktop 32 | if (_size.width >= 1100) { 33 | return desktop; 34 | } 35 | // If width it less then 1100 and more then 850 we consider it as tablet 36 | else if (_size.width >= 850) { 37 | return tablet; 38 | } 39 | // Or less then that we called it mobile 40 | else { 41 | return mobile; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/calendar_data_section.dart: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/calendar_list_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/models/data.dart'; 2 | import 'package:smart_admin_dashboard/core/widgets/wrapper.dart'; 3 | import 'package:smart_admin_dashboard/screens/dashboard/components/list_calendar_data.dart'; 4 | 5 | import 'package:flutter/material.dart'; 6 | 7 | class CalendartList extends StatelessWidget { 8 | final List datas; 9 | 10 | const CalendartList({Key? key, required this.datas}) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | child: datas.isEmpty ? _Empty() : _List(list: datas), 16 | ); 17 | } 18 | } 19 | 20 | class _Empty extends StatelessWidget { 21 | @override 22 | Widget build(BuildContext context) { 23 | return const Center( 24 | child: Text( 25 | 'There are no interviews.', 26 | style: TextStyle(fontSize: 14), 27 | ), 28 | ); 29 | } 30 | } 31 | 32 | class _List extends StatelessWidget { 33 | final List list; 34 | 35 | const _List({Key? key, required this.list}) : super(key: key); 36 | 37 | @override 38 | Widget build(BuildContext context) { 39 | return Column( 40 | mainAxisAlignment: MainAxisAlignment.start, 41 | crossAxisAlignment: CrossAxisAlignment.start, 42 | children: [ 43 | Text("🔥 Upcoming events"), 44 | SizedBox( 45 | height: 8, 46 | ), 47 | Wrapper( 48 | child: ListCalendarData(calendarData: list), 49 | ), 50 | ], 51 | ); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/calendart_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/models/data.dart'; 3 | import 'package:smart_admin_dashboard/screens/dashboard/components/calendar_list_widget.dart'; 4 | 5 | import 'package:flutter/material.dart'; 6 | 7 | import 'package:intl/intl.dart'; 8 | import 'package:table_calendar/table_calendar.dart'; 9 | 10 | class CalendarWidget extends StatefulWidget { 11 | @override 12 | _CalendarWidgetState createState() => _CalendarWidgetState(); 13 | } 14 | 15 | class _CalendarWidgetState extends State { 16 | List _selectedDate = []; 17 | 18 | DateTime _focusedDay = DateTime.now(); 19 | DateTime _selectedDay = DateTime.now(); 20 | 21 | List _eventLoader(DateTime date) { 22 | return calendarData 23 | .where((element) => isSameDay(date, element.date)) 24 | .toList(); 25 | } 26 | 27 | void _onDaySelected(DateTime selectedDay, DateTime focusedDay) { 28 | if (!isSameDay(_selectedDay, selectedDay)) { 29 | setState(() { 30 | _selectedDay = selectedDay; 31 | _focusedDay = focusedDay; 32 | _selectedDate = calendarData 33 | .where((element) => isSameDay(selectedDay, element.date)) 34 | .toList(); 35 | }); 36 | } 37 | } 38 | 39 | @override 40 | Widget build(BuildContext context) { 41 | return Container( 42 | decoration: BoxDecoration( 43 | color: secondaryColor, borderRadius: BorderRadius.circular(10)), 44 | padding: EdgeInsets.all(10), 45 | child: Column( 46 | children: [ 47 | Row( 48 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 49 | children: [ 50 | Text( 51 | "${DateFormat("MMM, yyyy").format(_focusedDay)}", 52 | style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), 53 | ), 54 | Row( 55 | children: [ 56 | InkWell( 57 | onTap: () { 58 | setState(() { 59 | _focusedDay = 60 | DateTime(_focusedDay.year, _focusedDay.month - 1); 61 | }); 62 | }, 63 | child: Icon( 64 | Icons.chevron_left, 65 | color: greenColor, 66 | ), 67 | ), 68 | InkWell( 69 | onTap: () { 70 | setState(() { 71 | print(_focusedDay); 72 | _focusedDay = 73 | DateTime(_focusedDay.year, _focusedDay.month + 1); 74 | }); 75 | }, 76 | child: Icon( 77 | Icons.chevron_right, 78 | color: greenColor, 79 | ), 80 | ), 81 | ], 82 | ) 83 | ], 84 | ), 85 | SizedBox( 86 | height: 10, 87 | ), 88 | TableCalendar( 89 | selectedDayPredicate: (day) => isSameDay(_focusedDay, day), 90 | focusedDay: _focusedDay, 91 | firstDay: DateTime.utc(2018), 92 | lastDay: DateTime.utc(2025), 93 | headerVisible: false, 94 | onDaySelected: _onDaySelected, 95 | onFormatChanged: (result) {}, 96 | daysOfWeekStyle: DaysOfWeekStyle( 97 | dowTextFormatter: (date, locale) { 98 | return DateFormat("EEE").format(date).toUpperCase(); 99 | }, 100 | weekendStyle: TextStyle(fontWeight: FontWeight.bold), 101 | weekdayStyle: TextStyle(fontWeight: FontWeight.bold), 102 | ), 103 | onPageChanged: (day) { 104 | _focusedDay = day; 105 | setState(() {}); 106 | }, 107 | calendarStyle: CalendarStyle( 108 | todayDecoration: BoxDecoration( 109 | color: greenColor, 110 | shape: BoxShape.circle, 111 | ), 112 | markerDecoration: BoxDecoration( 113 | color: greenColor, 114 | shape: BoxShape.circle, 115 | ), 116 | ), 117 | eventLoader: _eventLoader), 118 | SizedBox( 119 | height: 8, 120 | ), 121 | CalendartList(datas: _selectedDate), 122 | ], 123 | ), 124 | ); 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/charts.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | 3 | import 'package:fl_chart/fl_chart.dart'; 4 | import 'package:flutter/gestures.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class Chart extends StatefulWidget { 8 | const Chart({ 9 | Key? key, 10 | }) : super(key: key); 11 | 12 | @override 13 | _ChartState createState() => _ChartState(); 14 | } 15 | 16 | class _ChartState extends State { 17 | int touchedIndex = -1; 18 | @override 19 | Widget build(BuildContext context) { 20 | return SizedBox( 21 | height: 300, 22 | child: AspectRatio( 23 | aspectRatio: 1.3, 24 | child: Row( 25 | children: [ 26 | const SizedBox( 27 | height: 18, 28 | ), 29 | Expanded( 30 | child: AspectRatio( 31 | aspectRatio: 1, 32 | child: PieChart( 33 | PieChartData( 34 | pieTouchData: 35 | PieTouchData(touchCallback: (pieTouchResponse) { 36 | setState(() { 37 | final desiredTouch = pieTouchResponse.touchInput 38 | is! PointerExitEvent && 39 | pieTouchResponse.touchInput is! PointerUpEvent; 40 | if (desiredTouch && 41 | pieTouchResponse.touchedSection != null) { 42 | touchedIndex = pieTouchResponse 43 | .touchedSection!.touchedSectionIndex; 44 | } else { 45 | touchedIndex = -1; 46 | } 47 | }); 48 | }), 49 | borderData: FlBorderData( 50 | show: false, 51 | ), 52 | sectionsSpace: 0, 53 | centerSpaceRadius: 40, 54 | sections: showingSections()), 55 | ), 56 | ), 57 | ), 58 | const SizedBox( 59 | width: 28, 60 | ), 61 | ], 62 | ), 63 | ), 64 | ); 65 | } 66 | 67 | List showingSections() { 68 | return List.generate(4, (i) { 69 | final isTouched = i == touchedIndex; 70 | final fontSize = isTouched ? 25.0 : 16.0; 71 | final radius = isTouched ? 60.0 : 50.0; 72 | switch (i) { 73 | case 0: 74 | return PieChartSectionData( 75 | color: const Color(0xff0293ee), 76 | value: 40, 77 | title: '28.3%', 78 | radius: radius, 79 | titleStyle: TextStyle( 80 | fontSize: fontSize, 81 | fontWeight: FontWeight.bold, 82 | color: const Color(0xffffffff)), 83 | ); 84 | case 1: 85 | return PieChartSectionData( 86 | color: const Color(0xfff8b250), 87 | value: 30, 88 | title: '16.7%', 89 | radius: radius, 90 | titleStyle: TextStyle( 91 | fontSize: fontSize, 92 | fontWeight: FontWeight.bold, 93 | color: const Color(0xffffffff)), 94 | ); 95 | case 2: 96 | return PieChartSectionData( 97 | color: const Color(0xff845bef), 98 | value: 15, 99 | title: '22.4%', 100 | radius: radius, 101 | titleStyle: TextStyle( 102 | fontSize: fontSize, 103 | fontWeight: FontWeight.bold, 104 | color: const Color(0xffffffff)), 105 | ); 106 | case 3: 107 | return PieChartSectionData( 108 | color: const Color(0xff13d38e), 109 | value: 15, 110 | title: '2.3%', 111 | radius: radius, 112 | titleStyle: TextStyle( 113 | fontSize: fontSize, 114 | fontWeight: FontWeight.bold, 115 | color: const Color(0xffffffff)), 116 | ); 117 | default: 118 | throw Error(); 119 | } 120 | }); 121 | } 122 | } 123 | 124 | List paiChartSelectionDatas = [ 125 | PieChartSectionData( 126 | color: primaryColor, 127 | value: 25, 128 | showTitle: false, 129 | radius: 25, 130 | ), 131 | PieChartSectionData( 132 | color: Color(0xFF26E5FF), 133 | value: 20, 134 | showTitle: false, 135 | radius: 22, 136 | ), 137 | PieChartSectionData( 138 | color: Color(0xFFFFCF26), 139 | value: 10, 140 | showTitle: false, 141 | radius: 19, 142 | ), 143 | PieChartSectionData( 144 | color: Color(0xFFEE2727), 145 | value: 15, 146 | showTitle: false, 147 | radius: 16, 148 | ), 149 | PieChartSectionData( 150 | color: primaryColor.withOpacity(0.1), 151 | value: 25, 152 | showTitle: false, 153 | radius: 13, 154 | ), 155 | ]; 156 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/header.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/responsive.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_svg/flutter_svg.dart'; 5 | 6 | class Header extends StatelessWidget { 7 | const Header({ 8 | Key? key, 9 | }) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Row( 14 | children: [ 15 | if (!Responsive.isDesktop(context)) 16 | IconButton( 17 | icon: Icon(Icons.menu), 18 | onPressed: () {}, 19 | ), 20 | if (!Responsive.isMobile(context)) 21 | Column( 22 | mainAxisAlignment: MainAxisAlignment.start, 23 | crossAxisAlignment: CrossAxisAlignment.start, 24 | children: [ 25 | Text( 26 | "Hello, Deniz 👋", 27 | style: Theme.of(context).textTheme.headline6, 28 | ), 29 | SizedBox( 30 | height: 8, 31 | ), 32 | Text( 33 | "Wellcome to your dashboard", 34 | style: Theme.of(context).textTheme.subtitle2, 35 | ), 36 | ], 37 | ), 38 | if (!Responsive.isMobile(context)) 39 | Spacer(flex: Responsive.isDesktop(context) ? 2 : 1), 40 | Expanded(child: SearchField()), 41 | ProfileCard() 42 | ], 43 | ); 44 | } 45 | } 46 | 47 | class ProfileCard extends StatelessWidget { 48 | const ProfileCard({ 49 | Key? key, 50 | }) : super(key: key); 51 | 52 | @override 53 | Widget build(BuildContext context) { 54 | return Container( 55 | margin: EdgeInsets.only(left: defaultPadding), 56 | padding: EdgeInsets.symmetric( 57 | horizontal: defaultPadding, 58 | vertical: defaultPadding / 2, 59 | ), 60 | decoration: BoxDecoration( 61 | color: secondaryColor, 62 | borderRadius: const BorderRadius.all(Radius.circular(10)), 63 | border: Border.all(color: Colors.white10), 64 | ), 65 | child: Row( 66 | children: [ 67 | CircleAvatar( 68 | backgroundImage: AssetImage("assets/images/profile_pic.png"), 69 | ), 70 | if (!Responsive.isMobile(context)) 71 | Padding( 72 | padding: 73 | const EdgeInsets.symmetric(horizontal: defaultPadding / 2), 74 | child: Text("Deniz Çolak"), 75 | ), 76 | Icon(Icons.keyboard_arrow_down), 77 | ], 78 | ), 79 | ); 80 | } 81 | } 82 | 83 | class SearchField extends StatelessWidget { 84 | const SearchField({ 85 | Key? key, 86 | }) : super(key: key); 87 | 88 | @override 89 | Widget build(BuildContext context) { 90 | return TextField( 91 | decoration: InputDecoration( 92 | hintText: "Search", 93 | fillColor: secondaryColor, 94 | filled: true, 95 | border: OutlineInputBorder( 96 | borderSide: BorderSide.none, 97 | borderRadius: const BorderRadius.all(Radius.circular(10)), 98 | ), 99 | suffixIcon: InkWell( 100 | onTap: () {}, 101 | child: Container( 102 | padding: EdgeInsets.all(defaultPadding * 0.75), 103 | margin: EdgeInsets.symmetric(horizontal: defaultPadding / 2), 104 | decoration: BoxDecoration( 105 | color: greenColor, 106 | borderRadius: const BorderRadius.all(Radius.circular(10)), 107 | ), 108 | child: SvgPicture.asset( 109 | "assets/icons/Search.svg", 110 | ), 111 | ), 112 | ), 113 | ), 114 | ); 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/list_calendar_data.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/models/data.dart'; 3 | import 'package:smart_admin_dashboard/core/widgets/calendar_item.dart'; 4 | 5 | import 'package:flutter/material.dart'; 6 | 7 | class ListCalendarData extends StatelessWidget { 8 | final List calendarData; 9 | 10 | const ListCalendarData({Key? key, required this.calendarData}) 11 | : super(key: key); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return ListView( 16 | physics: const NeverScrollableScrollPhysics(), 17 | shrinkWrap: true, 18 | children: calendarData 19 | .asMap() 20 | .entries 21 | .map( 22 | (data) => Padding( 23 | padding: EdgeInsets.only( 24 | bottom: 25 | data.key != calendarData.length - 1 ? defaultPadding : 0), 26 | child: CalendarItem( 27 | calendarItemData: data.value, 28 | ), 29 | ), 30 | ) 31 | .toList(), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/mini_information_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/models/daily_info_model.dart'; 3 | 4 | import 'package:smart_admin_dashboard/responsive.dart'; 5 | import 'package:smart_admin_dashboard/screens/dashboard/components/mini_information_widget.dart'; 6 | import 'package:smart_admin_dashboard/screens/forms/input_form.dart'; 7 | import 'package:flutter/material.dart'; 8 | 9 | class MiniInformation extends StatelessWidget { 10 | const MiniInformation({ 11 | Key? key, 12 | }) : super(key: key); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | final Size _size = MediaQuery.of(context).size; 17 | return Column( 18 | children: [ 19 | Row( 20 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 21 | children: [ 22 | SizedBox( 23 | width: 10, 24 | ), 25 | ElevatedButton.icon( 26 | style: TextButton.styleFrom( 27 | backgroundColor: Colors.green, 28 | padding: EdgeInsets.symmetric( 29 | horizontal: defaultPadding * 1.5, 30 | vertical: 31 | defaultPadding / (Responsive.isMobile(context) ? 2 : 1), 32 | ), 33 | ), 34 | onPressed: () { 35 | Navigator.of(context).push(new MaterialPageRoute( 36 | builder: (BuildContext context) { 37 | return new FormMaterial(); 38 | }, 39 | fullscreenDialog: true)); 40 | }, 41 | icon: Icon(Icons.add), 42 | label: Text( 43 | "Add New", 44 | ), 45 | ), 46 | ], 47 | ), 48 | SizedBox(height: defaultPadding), 49 | Responsive( 50 | mobile: InformationCard( 51 | crossAxisCount: _size.width < 650 ? 2 : 4, 52 | childAspectRatio: _size.width < 650 ? 1.2 : 1, 53 | ), 54 | tablet: InformationCard(), 55 | desktop: InformationCard( 56 | childAspectRatio: _size.width < 1400 ? 1.2 : 1.4, 57 | ), 58 | ), 59 | ], 60 | ); 61 | } 62 | } 63 | 64 | class InformationCard extends StatelessWidget { 65 | const InformationCard({ 66 | Key? key, 67 | this.crossAxisCount = 5, 68 | this.childAspectRatio = 1, 69 | }) : super(key: key); 70 | 71 | final int crossAxisCount; 72 | final double childAspectRatio; 73 | 74 | @override 75 | Widget build(BuildContext context) { 76 | return GridView.builder( 77 | physics: NeverScrollableScrollPhysics(), 78 | shrinkWrap: true, 79 | itemCount: dailyDatas.length, 80 | gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( 81 | crossAxisCount: crossAxisCount, 82 | crossAxisSpacing: defaultPadding, 83 | mainAxisSpacing: defaultPadding, 84 | childAspectRatio: childAspectRatio, 85 | ), 86 | itemBuilder: (context, index) => 87 | MiniInformationWidget(dailyData: dailyDatas[index]), 88 | ); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/mini_information_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/models/daily_info_model.dart'; 3 | 4 | import 'package:fl_chart/fl_chart.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class MiniInformationWidget extends StatefulWidget { 8 | const MiniInformationWidget({ 9 | Key? key, 10 | required this.dailyData, 11 | }) : super(key: key); 12 | final DailyInfoModel dailyData; 13 | 14 | @override 15 | _MiniInformationWidgetState createState() => _MiniInformationWidgetState(); 16 | } 17 | 18 | int _value = 1; 19 | 20 | class _MiniInformationWidgetState extends State { 21 | @override 22 | Widget build(BuildContext context) { 23 | return Container( 24 | padding: EdgeInsets.all(defaultPadding), 25 | decoration: BoxDecoration( 26 | color: secondaryColor, 27 | borderRadius: const BorderRadius.all(Radius.circular(10)), 28 | ), 29 | child: Column( 30 | crossAxisAlignment: CrossAxisAlignment.start, 31 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 32 | children: [ 33 | Row( 34 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 35 | children: [ 36 | Container( 37 | padding: EdgeInsets.all(defaultPadding * 0.75), 38 | height: 40, 39 | width: 40, 40 | decoration: BoxDecoration( 41 | color: widget.dailyData.color!.withOpacity(0.1), 42 | borderRadius: const BorderRadius.all(Radius.circular(10)), 43 | ), 44 | child: Icon( 45 | widget.dailyData.icon, 46 | color: widget.dailyData.color, 47 | size: 18, 48 | ), 49 | ), 50 | Padding( 51 | padding: EdgeInsets.only(right: 12.0), 52 | child: DropdownButton( 53 | icon: Icon(Icons.more_vert, size: 18), 54 | underline: SizedBox(), 55 | style: Theme.of(context).textTheme.button, 56 | value: _value, 57 | items: [ 58 | DropdownMenuItem( 59 | child: Text("Daily"), 60 | value: 1, 61 | ), 62 | DropdownMenuItem( 63 | child: Text("Weekly"), 64 | value: 2, 65 | ), 66 | DropdownMenuItem( 67 | child: Text("Monthly"), 68 | value: 3, 69 | ), 70 | ], 71 | onChanged: (int? value) { 72 | setState(() { 73 | _value = value!; 74 | }); 75 | }, 76 | ), 77 | ), 78 | ], 79 | ), 80 | Row( 81 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 82 | children: [ 83 | Text( 84 | widget.dailyData.title!, 85 | maxLines: 1, 86 | overflow: TextOverflow.ellipsis, 87 | ), 88 | SizedBox( 89 | height: 8, 90 | ), 91 | Container( 92 | child: LineChartWidget( 93 | colors: widget.dailyData.colors, 94 | spotsData: widget.dailyData.spots, 95 | ), 96 | ) 97 | ], 98 | ), 99 | SizedBox( 100 | height: 8, 101 | ), 102 | ProgressLine( 103 | color: widget.dailyData.color!, 104 | percentage: widget.dailyData.percentage!, 105 | ), 106 | Row( 107 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 108 | children: [ 109 | Text( 110 | "${widget.dailyData.volumeData}", 111 | style: Theme.of(context) 112 | .textTheme 113 | .caption! 114 | .copyWith(color: Colors.white70), 115 | ), 116 | Text( 117 | widget.dailyData.totalStorage!, 118 | style: Theme.of(context) 119 | .textTheme 120 | .caption! 121 | .copyWith(color: Colors.white), 122 | ), 123 | ], 124 | ) 125 | ], 126 | ), 127 | ); 128 | } 129 | } 130 | 131 | class LineChartWidget extends StatelessWidget { 132 | const LineChartWidget({ 133 | Key? key, 134 | required this.colors, 135 | required this.spotsData, 136 | }) : super(key: key); 137 | final List? colors; 138 | final List? spotsData; 139 | 140 | @override 141 | Widget build(BuildContext context) { 142 | return Stack( 143 | children: [ 144 | Container( 145 | width: 80, 146 | height: 30, 147 | child: LineChart( 148 | LineChartData( 149 | lineBarsData: [ 150 | LineChartBarData( 151 | spots: spotsData, 152 | belowBarData: BarAreaData(show: false), 153 | aboveBarData: BarAreaData(show: false), 154 | isCurved: true, 155 | dotData: FlDotData(show: false), 156 | colors: colors, 157 | barWidth: 3), 158 | ], 159 | lineTouchData: LineTouchData(enabled: false), 160 | titlesData: FlTitlesData(show: false), 161 | axisTitleData: FlAxisTitleData(show: false), 162 | gridData: FlGridData(show: false), 163 | borderData: FlBorderData(show: false)), 164 | ), 165 | ), 166 | ], 167 | ); 168 | } 169 | } 170 | 171 | class ProgressLine extends StatelessWidget { 172 | const ProgressLine({ 173 | Key? key, 174 | this.color = primaryColor, 175 | required this.percentage, 176 | }) : super(key: key); 177 | 178 | final Color color; 179 | final int percentage; 180 | 181 | @override 182 | Widget build(BuildContext context) { 183 | return Stack( 184 | children: [ 185 | Container( 186 | width: double.infinity, 187 | height: 5, 188 | decoration: BoxDecoration( 189 | color: color.withOpacity(0.1), 190 | borderRadius: BorderRadius.all(Radius.circular(10)), 191 | ), 192 | ), 193 | LayoutBuilder( 194 | builder: (context, constraints) => Container( 195 | width: constraints.maxWidth * (percentage / 100), 196 | height: 5, 197 | decoration: BoxDecoration( 198 | color: color, 199 | borderRadius: BorderRadius.all(Radius.circular(10)), 200 | ), 201 | ), 202 | ), 203 | ], 204 | ); 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/recent_forums.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/utils/colorful_tag.dart'; 3 | import 'package:smart_admin_dashboard/models/recent_user_model.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | class RecentDiscussions extends StatelessWidget { 7 | const RecentDiscussions({ 8 | Key? key, 9 | }) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | padding: EdgeInsets.all(defaultPadding), 15 | decoration: BoxDecoration( 16 | color: secondaryColor, 17 | borderRadius: const BorderRadius.all(Radius.circular(10)), 18 | ), 19 | child: Column( 20 | crossAxisAlignment: CrossAxisAlignment.start, 21 | children: [ 22 | Text( 23 | "Recent Open Positions", 24 | style: Theme.of(context).textTheme.subtitle1, 25 | ), 26 | SizedBox( 27 | width: double.infinity, 28 | child: DataTable( 29 | horizontalMargin: 0, 30 | columnSpacing: defaultPadding, 31 | columns: [ 32 | DataColumn( 33 | label: Text("Position Name"), 34 | ), 35 | DataColumn( 36 | label: Text("Create Date"), 37 | ), 38 | DataColumn( 39 | label: Text("Total Application"), 40 | ), 41 | ], 42 | rows: List.generate( 43 | recentUsers.length, 44 | (index) => recentUserDataRow(recentUsers[index]), 45 | ), 46 | ), 47 | ), 48 | ], 49 | ), 50 | ); 51 | } 52 | } 53 | 54 | DataRow recentUserDataRow(RecentUser userInfo) { 55 | return DataRow( 56 | cells: [ 57 | DataCell(Container( 58 | padding: EdgeInsets.all(5), 59 | decoration: BoxDecoration( 60 | color: getRoleColor(userInfo.role).withOpacity(.2), 61 | border: Border.all(color: getRoleColor(userInfo.role)), 62 | borderRadius: BorderRadius.all(Radius.circular(5.0) // 63 | ), 64 | ), 65 | child: Text(userInfo.role!))), 66 | DataCell(Text(userInfo.date!)), 67 | DataCell(Text(userInfo.posts!)), 68 | ], 69 | ); 70 | } 71 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/recent_users copy.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | 3 | import 'package:smart_admin_dashboard/core/utils/colorful_tag.dart'; 4 | import 'package:smart_admin_dashboard/models/recent_user_model.dart'; 5 | import 'package:colorize_text_avatar/colorize_text_avatar.dart'; 6 | import 'package:flutter/material.dart'; 7 | 8 | class RecentUsers extends StatelessWidget { 9 | const RecentUsers({ 10 | Key? key, 11 | }) : super(key: key); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Container( 16 | padding: EdgeInsets.all(defaultPadding), 17 | decoration: BoxDecoration( 18 | color: secondaryColor, 19 | borderRadius: const BorderRadius.all(Radius.circular(10)), 20 | ), 21 | child: Column( 22 | crossAxisAlignment: CrossAxisAlignment.start, 23 | children: [ 24 | Text( 25 | "Recent Users", 26 | style: Theme.of(context).textTheme.subtitle1, 27 | ), 28 | SingleChildScrollView( 29 | //scrollDirection: Axis.horizontal, 30 | child: SizedBox( 31 | width: double.infinity, 32 | child: DataTable( 33 | horizontalMargin: 0, 34 | columnSpacing: defaultPadding, 35 | columns: [ 36 | DataColumn( 37 | label: Text("Name Surname"), 38 | ), 39 | DataColumn( 40 | label: Text("Role"), 41 | ), 42 | DataColumn( 43 | label: Text("E-mail"), 44 | ), 45 | DataColumn( 46 | label: Text("Registration Date"), 47 | ), 48 | DataColumn( 49 | label: Text("Likes"), 50 | ), 51 | DataColumn( 52 | label: Text("Operation"), 53 | ), 54 | ], 55 | rows: List.generate( 56 | recentUsers.length, 57 | (index) => recentUserDataRow(recentUsers[index], context), 58 | ), 59 | ), 60 | ), 61 | ), 62 | ], 63 | ), 64 | ); 65 | } 66 | } 67 | 68 | DataRow recentUserDataRow(RecentUser userInfo, BuildContext context) { 69 | return DataRow( 70 | cells: [ 71 | DataCell( 72 | Row( 73 | children: [ 74 | TextAvatar( 75 | size: 35, 76 | backgroundColor: Colors.white, 77 | textColor: Colors.white, 78 | fontSize: 14, 79 | upperCase: true, 80 | numberLetters: 1, 81 | shape: Shape.Rectangle, 82 | text: userInfo.name!, 83 | ), 84 | Padding( 85 | padding: const EdgeInsets.symmetric(horizontal: defaultPadding), 86 | child: Text( 87 | userInfo.name!, 88 | maxLines: 1, 89 | overflow: TextOverflow.ellipsis, 90 | ), 91 | ), 92 | ], 93 | ), 94 | ), 95 | DataCell(Container( 96 | padding: EdgeInsets.all(5), 97 | decoration: BoxDecoration( 98 | color: getRoleColor(userInfo.role).withOpacity(.2), 99 | border: Border.all(color: getRoleColor(userInfo.role)), 100 | borderRadius: BorderRadius.all(Radius.circular(5.0) // 101 | ), 102 | ), 103 | child: Text(userInfo.role!))), 104 | DataCell(Text(userInfo.email!)), 105 | DataCell(Text(userInfo.date!)), 106 | DataCell(Text(userInfo.posts!)), 107 | DataCell( 108 | Row( 109 | children: [ 110 | ElevatedButton.icon( 111 | style: ElevatedButton.styleFrom( 112 | primary: Colors.blue.withOpacity(0.5), 113 | ), 114 | icon: Icon( 115 | Icons.edit, 116 | size: 14, 117 | ), 118 | onPressed: () {}, 119 | // Edit 120 | label: Text("Edit"), 121 | ), 122 | SizedBox( 123 | width: 6, 124 | ), 125 | ElevatedButton.icon( 126 | style: ElevatedButton.styleFrom( 127 | primary: Colors.green.withOpacity(0.5), 128 | ), 129 | icon: Icon( 130 | Icons.visibility, 131 | size: 14, 132 | ), 133 | onPressed: () {}, 134 | //View 135 | label: Text("View"), 136 | ), 137 | SizedBox( 138 | width: 6, 139 | ), 140 | ElevatedButton.icon( 141 | style: ElevatedButton.styleFrom( 142 | primary: Colors.red.withOpacity(0.5), 143 | ), 144 | icon: Icon(Icons.delete), 145 | onPressed: () { 146 | showDialog( 147 | context: context, 148 | builder: (_) { 149 | return AlertDialog( 150 | title: Center( 151 | child: Text("Confirm Deletion"), 152 | ), 153 | content: Container( 154 | color: secondaryColor, 155 | height: 70, 156 | child: Column( 157 | children: [ 158 | Text( 159 | "Are you sure want to delete '${userInfo.name}'?"), 160 | SizedBox( 161 | height: 16, 162 | ), 163 | Row( 164 | mainAxisAlignment: MainAxisAlignment.center, 165 | children: [ 166 | ElevatedButton.icon( 167 | icon: Icon( 168 | Icons.close, 169 | size: 14, 170 | ), 171 | style: ElevatedButton.styleFrom( 172 | primary: Colors.grey), 173 | onPressed: () { 174 | Navigator.of(context).pop(); 175 | }, 176 | label: Text("Cancel")), 177 | SizedBox( 178 | width: 20, 179 | ), 180 | ElevatedButton.icon( 181 | icon: Icon( 182 | Icons.delete, 183 | size: 14, 184 | ), 185 | style: ElevatedButton.styleFrom( 186 | primary: Colors.red), 187 | onPressed: () {}, 188 | label: Text("Delete")) 189 | ], 190 | ) 191 | ], 192 | ), 193 | )); 194 | }); 195 | }, 196 | // Delete 197 | label: Text("Delete"), 198 | ), 199 | ], 200 | ), 201 | ), 202 | ], 203 | ); 204 | } 205 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/recent_users.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/utils/colorful_tag.dart'; 3 | import 'package:smart_admin_dashboard/models/recent_user_model.dart'; 4 | import 'package:colorize_text_avatar/colorize_text_avatar.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class RecentUsers extends StatelessWidget { 8 | const RecentUsers({ 9 | Key? key, 10 | }) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | padding: EdgeInsets.all(defaultPadding), 16 | decoration: BoxDecoration( 17 | color: secondaryColor, 18 | borderRadius: const BorderRadius.all(Radius.circular(10)), 19 | ), 20 | child: Column( 21 | crossAxisAlignment: CrossAxisAlignment.start, 22 | children: [ 23 | Text( 24 | "Recent Candidates", 25 | style: Theme.of(context).textTheme.subtitle1, 26 | ), 27 | SingleChildScrollView( 28 | //scrollDirection: Axis.horizontal, 29 | child: SizedBox( 30 | width: double.infinity, 31 | child: DataTable( 32 | horizontalMargin: 0, 33 | columnSpacing: defaultPadding, 34 | columns: [ 35 | DataColumn( 36 | label: Text("Name Surname"), 37 | ), 38 | DataColumn( 39 | label: Text("Applied Position"), 40 | ), 41 | DataColumn( 42 | label: Text("E-mail"), 43 | ), 44 | DataColumn( 45 | label: Text("Registration Date"), 46 | ), 47 | DataColumn( 48 | label: Text("Status"), 49 | ), 50 | DataColumn( 51 | label: Text("Operation"), 52 | ), 53 | ], 54 | rows: List.generate( 55 | recentUsers.length, 56 | (index) => recentUserDataRow(recentUsers[index], context), 57 | ), 58 | ), 59 | ), 60 | ), 61 | ], 62 | ), 63 | ); 64 | } 65 | } 66 | 67 | DataRow recentUserDataRow(RecentUser userInfo, BuildContext context) { 68 | return DataRow( 69 | cells: [ 70 | DataCell( 71 | Row( 72 | children: [ 73 | TextAvatar( 74 | size: 35, 75 | backgroundColor: Colors.white, 76 | textColor: Colors.white, 77 | fontSize: 14, 78 | upperCase: true, 79 | numberLetters: 1, 80 | shape: Shape.Rectangle, 81 | text: userInfo.name!, 82 | ), 83 | Padding( 84 | padding: const EdgeInsets.symmetric(horizontal: defaultPadding), 85 | child: Text( 86 | userInfo.name!, 87 | maxLines: 1, 88 | overflow: TextOverflow.ellipsis, 89 | ), 90 | ), 91 | ], 92 | ), 93 | ), 94 | DataCell(Container( 95 | padding: EdgeInsets.all(5), 96 | decoration: BoxDecoration( 97 | color: getRoleColor(userInfo.role).withOpacity(.2), 98 | border: Border.all(color: getRoleColor(userInfo.role)), 99 | borderRadius: BorderRadius.all(Radius.circular(5.0) // 100 | ), 101 | ), 102 | child: Text(userInfo.role!))), 103 | DataCell(Text(userInfo.email!)), 104 | DataCell(Text(userInfo.date!)), 105 | DataCell(Text(userInfo.posts!)), 106 | DataCell( 107 | Row( 108 | children: [ 109 | TextButton( 110 | child: Text('View', style: TextStyle(color: greenColor)), 111 | onPressed: () {}, 112 | ), 113 | SizedBox( 114 | width: 6, 115 | ), 116 | TextButton( 117 | child: Text("Delete", style: TextStyle(color: Colors.redAccent)), 118 | onPressed: () { 119 | showDialog( 120 | context: context, 121 | builder: (_) { 122 | return AlertDialog( 123 | title: Center( 124 | child: Column( 125 | children: [ 126 | Icon(Icons.warning_outlined, 127 | size: 36, color: Colors.red), 128 | SizedBox(height: 20), 129 | Text("Confirm Deletion"), 130 | ], 131 | ), 132 | ), 133 | content: Container( 134 | color: secondaryColor, 135 | height: 70, 136 | child: Column( 137 | children: [ 138 | Text( 139 | "Are you sure want to delete '${userInfo.name}'?"), 140 | SizedBox( 141 | height: 16, 142 | ), 143 | Row( 144 | mainAxisAlignment: MainAxisAlignment.center, 145 | children: [ 146 | ElevatedButton.icon( 147 | icon: Icon( 148 | Icons.close, 149 | size: 14, 150 | ), 151 | style: ElevatedButton.styleFrom( 152 | primary: Colors.grey), 153 | onPressed: () { 154 | Navigator.of(context).pop(); 155 | }, 156 | label: Text("Cancel")), 157 | SizedBox( 158 | width: 20, 159 | ), 160 | ElevatedButton.icon( 161 | icon: Icon( 162 | Icons.delete, 163 | size: 14, 164 | ), 165 | style: ElevatedButton.styleFrom( 166 | primary: Colors.red), 167 | onPressed: () {}, 168 | label: Text("Delete")) 169 | ], 170 | ) 171 | ], 172 | ), 173 | )); 174 | }); 175 | }, 176 | // Delete 177 | ), 178 | ], 179 | ), 180 | ), 181 | ], 182 | ); 183 | } 184 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/user_details_mini_card.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class UserDetailsMiniCard extends StatelessWidget { 5 | const UserDetailsMiniCard({ 6 | Key? key, 7 | required this.title, 8 | required this.color, 9 | required this.amountOfFiles, 10 | required this.numberOfIncrease, 11 | }) : super(key: key); 12 | 13 | final Color color; 14 | final String title, amountOfFiles; 15 | final int numberOfIncrease; 16 | 17 | @override 18 | Widget build(BuildContext context) { 19 | return Container( 20 | margin: EdgeInsets.only(top: defaultPadding), 21 | padding: EdgeInsets.all(defaultPadding), 22 | decoration: BoxDecoration( 23 | border: Border.all(width: 2, color: primaryColor.withOpacity(0.15)), 24 | borderRadius: const BorderRadius.all( 25 | Radius.circular(defaultPadding), 26 | ), 27 | ), 28 | child: Row( 29 | children: [ 30 | SizedBox( 31 | height: 20, 32 | width: 20, 33 | child: Container( 34 | color: color, 35 | )), 36 | Expanded( 37 | child: Padding( 38 | padding: const EdgeInsets.symmetric(horizontal: defaultPadding), 39 | child: Column( 40 | crossAxisAlignment: CrossAxisAlignment.start, 41 | children: [ 42 | Text( 43 | title, 44 | maxLines: 1, 45 | overflow: TextOverflow.ellipsis, 46 | ), 47 | Text( 48 | "$numberOfIncrease", 49 | style: Theme.of(context) 50 | .textTheme 51 | .caption! 52 | .copyWith(color: Colors.white70), 53 | ), 54 | ], 55 | ), 56 | ), 57 | ), 58 | Text(amountOfFiles) 59 | ], 60 | ), 61 | ); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /lib/screens/dashboard/components/user_details_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/screens/dashboard/components/calendart_widget.dart'; 3 | import 'package:smart_admin_dashboard/screens/dashboard/components/charts.dart'; 4 | import 'package:smart_admin_dashboard/screens/dashboard/components/user_details_mini_card.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class UserDetailsWidget extends StatelessWidget { 8 | const UserDetailsWidget({ 9 | Key? key, 10 | }) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return Container( 15 | padding: EdgeInsets.all(defaultPadding), 16 | decoration: BoxDecoration( 17 | color: secondaryColor, 18 | borderRadius: const BorderRadius.all(Radius.circular(10)), 19 | ), 20 | child: Column( 21 | crossAxisAlignment: CrossAxisAlignment.start, 22 | children: [ 23 | CalendarWidget(), 24 | Text( 25 | "Employment Details", 26 | style: TextStyle( 27 | fontSize: 18, 28 | fontWeight: FontWeight.w500, 29 | ), 30 | ), 31 | SizedBox(height: defaultPadding), 32 | Chart(), 33 | UserDetailsMiniCard( 34 | color: Color(0xff0293ee), 35 | title: "Technical Interview", 36 | amountOfFiles: "%28.3", 37 | numberOfIncrease: 1328, 38 | ), 39 | UserDetailsMiniCard( 40 | color: Color(0xfff8b250), 41 | title: "HR Interview", 42 | amountOfFiles: "%16.7", 43 | numberOfIncrease: 1328, 44 | ), 45 | UserDetailsMiniCard( 46 | color: Color(0xff845bef), 47 | title: "Final Interview", 48 | amountOfFiles: "%22.4", 49 | numberOfIncrease: 1328, 50 | ), 51 | UserDetailsMiniCard( 52 | color: Color(0xff13d38e), 53 | title: "Rejected", 54 | amountOfFiles: "%2.3", 55 | numberOfIncrease: 140, 56 | ), 57 | ], 58 | ), 59 | ); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/screens/dashboard/dashboard_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/responsive.dart'; 3 | 4 | import 'package:smart_admin_dashboard/screens/dashboard/components/mini_information_card.dart'; 5 | 6 | import 'package:smart_admin_dashboard/screens/dashboard/components/recent_forums.dart'; 7 | import 'package:smart_admin_dashboard/screens/dashboard/components/recent_users.dart'; 8 | import 'package:smart_admin_dashboard/screens/dashboard/components/user_details_widget.dart'; 9 | import 'package:flutter/material.dart'; 10 | 11 | import 'components/header.dart'; 12 | 13 | class DashboardScreen extends StatelessWidget { 14 | @override 15 | Widget build(BuildContext context) { 16 | return SafeArea( 17 | child: SingleChildScrollView( 18 | //padding: EdgeInsets.all(defaultPadding), 19 | child: Container( 20 | padding: EdgeInsets.all(defaultPadding), 21 | child: Column( 22 | children: [ 23 | Header(), 24 | SizedBox(height: defaultPadding), 25 | MiniInformation(), 26 | SizedBox(height: defaultPadding), 27 | Row( 28 | crossAxisAlignment: CrossAxisAlignment.start, 29 | children: [ 30 | Expanded( 31 | flex: 5, 32 | child: Column( 33 | children: [ 34 | //MyFiels(), 35 | //SizedBox(height: defaultPadding), 36 | RecentUsers(), 37 | SizedBox(height: defaultPadding), 38 | RecentDiscussions(), 39 | if (Responsive.isMobile(context)) 40 | SizedBox(height: defaultPadding), 41 | if (Responsive.isMobile(context)) UserDetailsWidget(), 42 | ], 43 | ), 44 | ), 45 | if (!Responsive.isMobile(context)) 46 | SizedBox(width: defaultPadding), 47 | // On Mobile means if the screen is less than 850 we dont want to show it 48 | if (!Responsive.isMobile(context)) 49 | Expanded( 50 | flex: 2, 51 | child: UserDetailsWidget(), 52 | ), 53 | ], 54 | ) 55 | ], 56 | ), 57 | ), 58 | ), 59 | ); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /lib/screens/forms/components/add_new_widget.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/widgets/app_button_widget.dart'; 3 | import 'package:smart_admin_dashboard/models/daily_info_model.dart'; 4 | import 'package:smart_admin_dashboard/responsive.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | class SelectionSection extends StatelessWidget { 8 | @override 9 | Widget build(BuildContext context) { 10 | final Size _size = MediaQuery.of(context).size; 11 | return Column( 12 | children: [ 13 | Row( 14 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 15 | children: [], 16 | ), 17 | SizedBox(height: defaultPadding), 18 | Responsive( 19 | mobile: InformationCard( 20 | crossAxisCount: _size.width < 650 ? 2 : 4, 21 | childAspectRatio: _size.width < 650 ? 1.2 : 1, 22 | ), 23 | tablet: InformationCard(), 24 | desktop: InformationCard( 25 | childAspectRatio: _size.width < 1400 ? 1.1 : 1.3, 26 | ), 27 | ), 28 | ], 29 | ); 30 | } 31 | } 32 | 33 | class InformationCard extends StatelessWidget { 34 | const InformationCard({ 35 | Key? key, 36 | this.crossAxisCount = 5, 37 | this.childAspectRatio = 1, 38 | }) : super(key: key); 39 | 40 | final int crossAxisCount; 41 | final double childAspectRatio; 42 | 43 | @override 44 | Widget build(BuildContext context) { 45 | return GridView.builder( 46 | physics: NeverScrollableScrollPhysics(), 47 | shrinkWrap: true, 48 | itemCount: dailyDatas.length, 49 | gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( 50 | crossAxisCount: crossAxisCount, 51 | crossAxisSpacing: defaultPadding, 52 | mainAxisSpacing: defaultPadding, 53 | childAspectRatio: childAspectRatio, 54 | ), 55 | itemBuilder: (context, index) => 56 | MiniInformationWidget(dailyData: dailyDatas[index]), 57 | ); 58 | } 59 | } 60 | 61 | class MiniInformationWidget extends StatefulWidget { 62 | const MiniInformationWidget({ 63 | Key? key, 64 | required this.dailyData, 65 | }) : super(key: key); 66 | final DailyInfoModel dailyData; 67 | 68 | @override 69 | _MiniInformationWidgetState createState() => _MiniInformationWidgetState(); 70 | } 71 | 72 | class _MiniInformationWidgetState extends State { 73 | bool _visible = false; 74 | 75 | TextEditingController _controller = TextEditingController(); 76 | 77 | void _toggle() { 78 | setState(() { 79 | _visible = !_visible; 80 | }); 81 | } 82 | 83 | int charLength = 0; 84 | 85 | bool status = false; 86 | bool _closeIcon = true; 87 | 88 | _onChanged(String value) { 89 | setState(() { 90 | charLength = value.length; 91 | }); 92 | 93 | if (charLength >= 6) { 94 | setState(() { 95 | _closeIcon = _closeIcon; 96 | status = true; 97 | }); 98 | } else { 99 | setState(() { 100 | _closeIcon = !_closeIcon; 101 | status = false; 102 | }); 103 | } 104 | } 105 | 106 | @override 107 | Widget build(BuildContext context) { 108 | return Container( 109 | padding: EdgeInsets.all(defaultPadding), 110 | decoration: BoxDecoration( 111 | color: secondaryColor, 112 | borderRadius: const BorderRadius.all(Radius.circular(10)), 113 | ), 114 | child: Column( 115 | crossAxisAlignment: CrossAxisAlignment.start, 116 | mainAxisAlignment: MainAxisAlignment.center, 117 | children: [ 118 | Row( 119 | mainAxisAlignment: MainAxisAlignment.center, 120 | children: [ 121 | Container( 122 | padding: EdgeInsets.all(defaultPadding * 0.75), 123 | height: 40, 124 | width: 40, 125 | decoration: BoxDecoration( 126 | color: widget.dailyData.color!.withOpacity(0.1), 127 | borderRadius: const BorderRadius.all(Radius.circular(10)), 128 | ), 129 | child: Icon( 130 | widget.dailyData.icon, 131 | color: widget.dailyData.color, 132 | size: 18, 133 | ), 134 | ), 135 | ], 136 | ), 137 | SizedBox(height: 8), 138 | GestureDetector( 139 | child: Container( 140 | alignment: Alignment.center, 141 | child: Column( 142 | mainAxisAlignment: MainAxisAlignment.center, 143 | crossAxisAlignment: CrossAxisAlignment.center, 144 | children: [ 145 | Text( 146 | "New ${widget.dailyData.title!}", 147 | maxLines: 1, 148 | overflow: TextOverflow.ellipsis, 149 | ), 150 | SizedBox( 151 | height: 8, 152 | ), 153 | Visibility( 154 | visible: !_visible, 155 | child: Icon(Icons.create, size: 18), 156 | ) 157 | ], 158 | ), 159 | ), 160 | onTap: () { 161 | _toggle(); 162 | }), 163 | SizedBox( 164 | height: 8, 165 | ), 166 | Visibility( 167 | visible: _visible, 168 | child: new Container( 169 | child: new Container( 170 | padding: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 10.0), 171 | child: new Material( 172 | elevation: 10.0, 173 | borderRadius: BorderRadius.circular(8.0), 174 | child: new ListTile( 175 | title: new TextField( 176 | controller: _controller, 177 | decoration: new InputDecoration( 178 | hintText: 'Enter Name', 179 | border: InputBorder.none, 180 | ), 181 | onChanged: _onChanged, 182 | ), 183 | trailing: new IconButton( 184 | icon: new Icon(Icons.cancel), 185 | onPressed: () { 186 | _controller.clear(); 187 | _toggle(); 188 | status = false; 189 | }, 190 | ), 191 | ), 192 | ), 193 | ), 194 | ), 195 | ), 196 | Visibility( 197 | maintainSize: true, 198 | maintainAnimation: true, 199 | maintainState: true, 200 | visible: status, 201 | child: Container( 202 | padding: EdgeInsets.fromLTRB(15.0, 0.0, 15.0, 0), 203 | margin: EdgeInsets.only(top: 15), 204 | child: Center( 205 | child: AppButton( 206 | type: ButtonType.PRIMARY, 207 | text: "Start", 208 | onPressed: () { 209 | print('Button clicked..'); 210 | _showDialog(context); 211 | _toggle(); 212 | status = false; 213 | }, 214 | ), 215 | ), 216 | ), 217 | ), 218 | ], 219 | ), 220 | ); 221 | } 222 | 223 | _showDialog(BuildContext context) { 224 | ScaffoldMessenger.of(context).showSnackBar(SnackBar( 225 | content: Container( 226 | child: Row( 227 | children: [ 228 | Icon( 229 | Icons.verified, 230 | color: bgColor, 231 | ), 232 | SizedBox( 233 | width: 25, 234 | ), 235 | Text('Please wait. Generating form to continue..'), 236 | ], 237 | )))); 238 | } 239 | } 240 | -------------------------------------------------------------------------------- /lib/screens/forms/input_form.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/screens/forms/components/add_new_widget.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | class FormMaterial extends StatefulWidget { 6 | @override 7 | _FormMaterialState createState() => _FormMaterialState(); 8 | } 9 | 10 | class _FormMaterialState extends State { 11 | @override 12 | Widget build(BuildContext context) { 13 | return Scaffold( 14 | appBar: new AppBar(), 15 | body: SingleChildScrollView( 16 | child: Card( 17 | color: bgColor, 18 | elevation: 5, 19 | margin: EdgeInsets.fromLTRB(32, 32, 64, 32), 20 | child: Padding( 21 | padding: const EdgeInsets.all(32.0), 22 | child: Container( 23 | padding: const EdgeInsets.symmetric( 24 | vertical: 16.0, horizontal: 16.0), 25 | child: Column( 26 | children: [ 27 | Center( 28 | child: Text("What you want to add? Select from below?"), 29 | ), 30 | SelectionSection(), 31 | ], 32 | )), 33 | ), 34 | ), 35 | ), 36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /lib/screens/forms/input_form_bak.dart: -------------------------------------------------------------------------------- 1 | // import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | // import 'package:flutter/material.dart'; 3 | 4 | // import 'models/user.dart'; 5 | 6 | // class FormMaterialBackup extends StatefulWidget { 7 | // @override 8 | // _FormMaterialBackupState createState() => _FormMaterialBackupState(); 9 | // } 10 | 11 | // class _FormMaterialBackupState extends State { 12 | // final _formKey = GlobalKey(); 13 | // final _user = User(); 14 | 15 | // @override 16 | // Widget build(BuildContext context) { 17 | // return Scaffold( 18 | // appBar: new AppBar(), 19 | // body: SingleChildScrollView( 20 | // child: Card( 21 | // color: bgColor, 22 | // elevation: 5, 23 | // margin: EdgeInsets.fromLTRB(64, 64, 64, 64), 24 | // child: Padding( 25 | // padding: const EdgeInsets.all(32.0), 26 | // child: Container( 27 | // padding: const EdgeInsets.symmetric( 28 | // vertical: 16.0, horizontal: 16.0), 29 | // child: Builder( 30 | // builder: (context) => Form( 31 | // key: _formKey, 32 | // child: Column( 33 | // crossAxisAlignment: CrossAxisAlignment.stretch, 34 | // children: [ 35 | // TextFormField( 36 | // style: TextStyle( 37 | // fontFamily: 'HelveticaNeue', 38 | // ), 39 | // decoration: InputDecoration( 40 | // labelText: 'First name', 41 | // labelStyle: TextStyle( 42 | // fontSize: 18, 43 | // color: Colors.white, 44 | // fontWeight: FontWeight.bold, 45 | // fontFamily: 'HelveticaNeue', 46 | // ), 47 | // ), 48 | // validator: (value) { 49 | // if (value!.isEmpty) { 50 | // return 'Please enter your first name'; 51 | // } 52 | // }, 53 | // onSaved: (val) => 54 | // setState(() => _user.firstName = val!), 55 | // ), 56 | // TextFormField( 57 | // decoration: InputDecoration( 58 | // labelText: 'Last name', 59 | // labelStyle: TextStyle( 60 | // fontSize: 18, 61 | // color: Colors.white, 62 | // fontWeight: FontWeight.bold, 63 | // fontFamily: 'HelveticaNeue', 64 | // ), 65 | // ), 66 | // validator: (value) { 67 | // if (value!.isEmpty) { 68 | // return 'Please enter your last name.'; 69 | // } 70 | // }, 71 | // onSaved: (val) => 72 | // setState(() => _user.lastName = val!)), 73 | // Container( 74 | // padding: 75 | // const EdgeInsets.fromLTRB(0, 50, 0, 20), 76 | // child: Text( 77 | // 'Subscribe', 78 | // style: TextStyle( 79 | // fontSize: 24, 80 | // color: Colors.white, 81 | // fontWeight: FontWeight.bold, 82 | // fontFamily: 'HelveticaNeue', 83 | // ), 84 | // ), 85 | // ), 86 | // SwitchListTile( 87 | // title: const Text( 88 | // 'To our Monthly Subscription', 89 | // style: TextStyle( 90 | // fontSize: 18, 91 | // color: Colors.white, 92 | // fontFamily: 'HelveticaNeue', 93 | // ), 94 | // ), 95 | // value: _user.monthlyNewsletter, 96 | // onChanged: (bool val) => setState( 97 | // () => _user.monthlyNewsletter = val)), 98 | // SwitchListTile( 99 | // title: const Text( 100 | // 'To our Yearly Subscription', 101 | // style: TextStyle( 102 | // fontSize: 18, 103 | // color: Colors.white, 104 | // fontFamily: 'HelveticaNeue', 105 | // ), 106 | // ), 107 | // value: _user.yearlyNewsletter, 108 | // onChanged: (bool val) => setState( 109 | // () => _user.yearlyNewsletter = val)), 110 | // SwitchListTile( 111 | // title: const Text( 112 | // 'To our Weekly Subscription', 113 | // style: TextStyle( 114 | // fontSize: 18, 115 | // color: Colors.white, 116 | // fontFamily: 'HelveticaNeue', 117 | // ), 118 | // ), 119 | // value: _user.weeklyNewsletter, 120 | // onChanged: (bool val) => setState( 121 | // () => _user.weeklyNewsletter = val)), 122 | // Container( 123 | // padding: 124 | // const EdgeInsets.fromLTRB(0, 50, 0, 20), 125 | // child: Text( 126 | // 'Interests', 127 | // style: TextStyle( 128 | // fontSize: 24, 129 | // color: Colors.white, 130 | // fontWeight: FontWeight.bold, 131 | // fontFamily: 'HelveticaNeue', 132 | // ), 133 | // ), 134 | // ), 135 | // CheckboxListTile( 136 | // title: const Text( 137 | // 'Writing', 138 | // style: TextStyle( 139 | // fontSize: 18, 140 | // color: Colors.white, 141 | // fontFamily: 'HelveticaNeue', 142 | // ), 143 | // ), 144 | // value: _user.passions[User.PassionWriting], 145 | // onChanged: (val) { 146 | // setState(() => _user 147 | // .passions[User.PassionWriting] = val); 148 | // }), 149 | // CheckboxListTile( 150 | // title: const Text( 151 | // 'Singing', 152 | // style: TextStyle( 153 | // fontSize: 18, 154 | // color: Colors.white, 155 | // fontFamily: 'HelveticaNeue', 156 | // ), 157 | // ), 158 | // value: _user.passions[User.PassionSinging], 159 | // onChanged: (val) { 160 | // setState(() => _user 161 | // .passions[User.PassionSinging] = val); 162 | // }), 163 | // CheckboxListTile( 164 | // title: const Text( 165 | // 'Travelling', 166 | // style: TextStyle( 167 | // fontSize: 18, 168 | // color: Colors.white, 169 | // fontFamily: 'HelveticaNeue', 170 | // ), 171 | // ), 172 | // value: _user.passions[User.PassionTraveling], 173 | // onChanged: (val) { 174 | // setState(() => _user 175 | // .passions[User.PassionTraveling] = val); 176 | // }), 177 | // CheckboxListTile( 178 | // title: const Text( 179 | // 'Cooking', 180 | // style: TextStyle( 181 | // fontSize: 18, 182 | // color: Colors.white, 183 | // fontFamily: 'HelveticaNeue', 184 | // ), 185 | // ), 186 | // value: _user.passions[User.PassionCooking], 187 | // onChanged: (val) { 188 | // setState(() => _user 189 | // .passions[User.PassionCooking] = val); 190 | // }), 191 | // Container( 192 | // height: 80, 193 | // // margin: EdgeInsets.only(left: 200, right: 200), 194 | // padding: const EdgeInsets.symmetric( 195 | // vertical: 16.0, horizontal: 16.0), 196 | // child: ElevatedButton( 197 | // onPressed: () { 198 | // if (_formKey.currentState!.validate()) { 199 | // _formKey.currentState!.save(); 200 | // _user.save(); 201 | // _showDialog(context); 202 | // print(_user); 203 | // print(_user.firstName); 204 | // } 205 | // }, 206 | // child: Text( 207 | // 'Save', 208 | // style: TextStyle( 209 | // fontSize: 16, 210 | // color: Colors.white, 211 | // fontWeight: FontWeight.bold, 212 | // fontFamily: 'HelveticaNeue', 213 | // ), 214 | // ))), 215 | // ])))), 216 | // ), 217 | // ), 218 | // ), 219 | // ); 220 | // } 221 | 222 | // _showDialog(BuildContext context) { 223 | // Scaffold.of(context).showSnackBar(SnackBar( 224 | // content: Container( 225 | // child: Row( 226 | // children: [ 227 | // Icon( 228 | // Icons.verified, 229 | // color: bgColor, 230 | // ), 231 | // SizedBox( 232 | // width: 25, 233 | // ), 234 | // Text('Submitting form'), 235 | // ], 236 | // )))); 237 | // } 238 | // } 239 | -------------------------------------------------------------------------------- /lib/screens/home/components/side_menu.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_svg/flutter_svg.dart'; 4 | 5 | class SideMenu extends StatelessWidget { 6 | const SideMenu({ 7 | Key? key, 8 | }) : super(key: key); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return Drawer( 13 | child: SingleChildScrollView( 14 | // it enables scrolling 15 | child: Column( 16 | children: [ 17 | DrawerHeader( 18 | child: Column( 19 | mainAxisAlignment: MainAxisAlignment.center, 20 | children: [ 21 | SizedBox( 22 | height: defaultPadding * 3, 23 | ), 24 | Image.asset( 25 | "assets/logo/logo_icon.png", 26 | scale: 5, 27 | ), 28 | SizedBox( 29 | height: defaultPadding, 30 | ), 31 | Text("Smart HR - Application") 32 | ], 33 | )), 34 | DrawerListTile( 35 | title: "Dashboard", 36 | svgSrc: "assets/icons/menu_dashbord.svg", 37 | press: () {}, 38 | ), 39 | DrawerListTile( 40 | title: "Posts", 41 | svgSrc: "assets/icons/menu_tran.svg", 42 | press: () {}, 43 | ), 44 | DrawerListTile( 45 | title: "Pages", 46 | svgSrc: "assets/icons/menu_task.svg", 47 | press: () {}, 48 | ), 49 | DrawerListTile( 50 | title: "Categories", 51 | svgSrc: "assets/icons/menu_doc.svg", 52 | press: () {}, 53 | ), 54 | DrawerListTile( 55 | title: "Appearance", 56 | svgSrc: "assets/icons/menu_store.svg", 57 | press: () {}, 58 | ), 59 | DrawerListTile( 60 | title: "Users", 61 | svgSrc: "assets/icons/menu_notification.svg", 62 | press: () {}, 63 | ), 64 | DrawerListTile( 65 | title: "Tools", 66 | svgSrc: "assets/icons/menu_profile.svg", 67 | press: () {}, 68 | ), 69 | DrawerListTile( 70 | title: "Settings", 71 | svgSrc: "assets/icons/menu_setting.svg", 72 | press: () {}, 73 | ), 74 | ], 75 | ), 76 | ), 77 | ); 78 | } 79 | } 80 | 81 | class DrawerListTile extends StatelessWidget { 82 | const DrawerListTile({ 83 | Key? key, 84 | // For selecting those three line once press "Command+D" 85 | required this.title, 86 | required this.svgSrc, 87 | required this.press, 88 | }) : super(key: key); 89 | 90 | final String title, svgSrc; 91 | final VoidCallback press; 92 | 93 | @override 94 | Widget build(BuildContext context) { 95 | return ListTile( 96 | onTap: press, 97 | horizontalTitleGap: 0.0, 98 | leading: SvgPicture.asset( 99 | svgSrc, 100 | color: Colors.white54, 101 | height: 16, 102 | ), 103 | title: Text( 104 | title, 105 | style: TextStyle(color: Colors.white54), 106 | ), 107 | ); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /lib/screens/home/home_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/responsive.dart'; 2 | import 'package:smart_admin_dashboard/screens/dashboard/dashboard_screen.dart'; 3 | import 'package:flutter/material.dart'; 4 | 5 | import 'components/side_menu.dart'; 6 | 7 | class HomeScreen extends StatelessWidget { 8 | @override 9 | Widget build(BuildContext context) { 10 | return Scaffold( 11 | //key: context.read().scaffoldKey, 12 | drawer: SideMenu(), 13 | body: SafeArea( 14 | child: Row( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | // We want this side menu only for large screen 18 | if (Responsive.isDesktop(context)) 19 | Expanded( 20 | // default flex = 1 21 | // and it takes 1/6 part of the screen 22 | child: SideMenu(), 23 | ), 24 | Expanded( 25 | // It takes 5/6 part of the screen 26 | flex: 5, 27 | child: DashboardScreen(), 28 | ), 29 | ], 30 | ), 31 | ), 32 | ); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/screens/login/components/slider_widget.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:smart_admin_dashboard/models/slider_model.dart'; 4 | import 'package:flutter/material.dart'; 5 | import 'package:smooth_page_indicator/smooth_page_indicator.dart'; 6 | 7 | class SliderWidget extends StatefulWidget { 8 | const SliderWidget({ 9 | Key? key, 10 | }) : super(key: key); 11 | 12 | @override 13 | _SliderWidgetState createState() => _SliderWidgetState(); 14 | } 15 | 16 | class _SliderWidgetState extends State { 17 | double? screenWidth; 18 | Timer? timer; 19 | int currentIndex = 0; 20 | int? totalIndex; 21 | final controller = PageController(); 22 | final ScrollController scrollController = ScrollController(); 23 | @override 24 | void initState() { 25 | super.initState(); 26 | 27 | WidgetsBinding.instance!.addPostFrameCallback((timeStamp) { 28 | timer = Timer.periodic(Duration(seconds: 5), (time) { 29 | if (currentIndex < totalIndex!) { 30 | controller.animateTo(currentIndex * (screenWidth!), 31 | duration: Duration(milliseconds: 1000), curve: Curves.ease); 32 | currentIndex++; 33 | } else { 34 | currentIndex = 0; 35 | } 36 | }); 37 | }); 38 | } 39 | 40 | @override 41 | void dispose() { 42 | timer?.cancel(); 43 | scrollController.dispose(); 44 | super.dispose(); 45 | } 46 | 47 | @override 48 | Widget build(BuildContext context) { 49 | screenWidth = MediaQuery.of(context).size.width / 2; 50 | totalIndex = slides.length; 51 | return Container( 52 | child: PageView( 53 | scrollDirection: Axis.horizontal, 54 | physics: BouncingScrollPhysics(), 55 | //controller: _pageController, 56 | controller: controller, 57 | 58 | children: List.generate( 59 | slides.length, 60 | (int index) => GestureDetector( 61 | onTap: () {}, 62 | child: Container( 63 | padding: EdgeInsets.only(left: 0), 64 | width: MediaQuery.of(context).size.width, 65 | decoration: BoxDecoration( 66 | boxShadow: [], color: Color(slides[index].kBackgroundColor!)), 67 | child: Stack( 68 | children: [ 69 | Column( 70 | mainAxisAlignment: MainAxisAlignment.start, 71 | crossAxisAlignment: CrossAxisAlignment.start, 72 | children: [ 73 | Container( 74 | height: MediaQuery.of(context).size.height / 2 - 50, 75 | width: MediaQuery.of(context).size.width / 2, 76 | decoration: BoxDecoration( 77 | image: DecorationImage( 78 | fit: BoxFit.fitWidth, 79 | image: AssetImage(slides[index].image!), 80 | ), 81 | borderRadius: BorderRadius.all( 82 | Radius.circular(8.0), 83 | ), 84 | boxShadow: [], 85 | color: Color(0xFF96A724)), 86 | ), 87 | ], 88 | ), 89 | Positioned( 90 | //top: MediaQuery.of(context).size.height / 1.4, 91 | 92 | child: Column( 93 | children: [ 94 | SizedBox( 95 | height: 12, 96 | ), 97 | Image.asset(slides[index].productImage!), 98 | Container( 99 | alignment: Alignment.center, 100 | child: Text(slides[index].text!, 101 | textAlign: TextAlign.center, 102 | style: Theme.of(context).textTheme.headline5), 103 | ), 104 | Container( 105 | alignment: Alignment.center, 106 | child: Text(slides[index].altText!, 107 | style: Theme.of(context).textTheme.headline5), 108 | ), 109 | SizedBox(height: 12), 110 | Container( 111 | alignment: Alignment.center, 112 | child: Text(slides[index].bAltText!, 113 | style: Theme.of(context).textTheme.bodyText1), 114 | ), 115 | ], 116 | ), 117 | ), 118 | Positioned( 119 | child: Padding( 120 | padding: const EdgeInsets.only(bottom: 24.0), 121 | child: Container( 122 | alignment: Alignment.bottomCenter, 123 | child: SmoothPageIndicator( 124 | controller: controller, 125 | count: slides.length, 126 | effect: ExpandingDotsEffect( 127 | activeDotColor: Colors.white, 128 | dotColor: Colors.white.withOpacity(0.2), 129 | dotHeight: 4.8, 130 | dotWidth: 6, 131 | spacing: 4.8), 132 | ), 133 | ), 134 | )), 135 | ], 136 | ), 137 | ), 138 | ), 139 | ), 140 | ), 141 | ); 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /lib/screens/login/login_screen.dart: -------------------------------------------------------------------------------- 1 | import 'package:smart_admin_dashboard/core/constants/color_constants.dart'; 2 | import 'package:smart_admin_dashboard/core/widgets/app_button_widget.dart'; 3 | import 'package:smart_admin_dashboard/core/widgets/input_widget.dart'; 4 | import 'package:smart_admin_dashboard/screens/home/home_screen.dart'; 5 | import 'package:smart_admin_dashboard/screens/login/components/slider_widget.dart'; 6 | 7 | import 'package:flutter/material.dart'; 8 | 9 | class Login extends StatefulWidget { 10 | Login({required this.title}); 11 | final String title; 12 | @override 13 | _LoginState createState() => _LoginState(); 14 | } 15 | 16 | class _LoginState extends State with SingleTickerProviderStateMixin { 17 | var tweenLeft = Tween(begin: Offset(2, 0), end: Offset(0, 0)) 18 | .chain(CurveTween(curve: Curves.ease)); 19 | var tweenRight = Tween(begin: Offset(0, 0), end: Offset(2, 0)) 20 | .chain(CurveTween(curve: Curves.ease)); 21 | 22 | AnimationController? _animationController; 23 | 24 | var _isMoved = false; 25 | 26 | bool isChecked = false; 27 | @override 28 | void initState() { 29 | super.initState(); 30 | 31 | _animationController = AnimationController( 32 | vsync: this, 33 | duration: const Duration(milliseconds: 750), 34 | ); 35 | } 36 | 37 | @override 38 | void dispose() { 39 | _animationController?.dispose(); 40 | super.dispose(); 41 | } 42 | 43 | @override 44 | Widget build(BuildContext context) { 45 | return Scaffold( 46 | backgroundColor: Colors.white, 47 | body: Stack( 48 | fit: StackFit.loose, 49 | children: [ 50 | Row( 51 | children: [ 52 | Container( 53 | height: MediaQuery.of(context).size.height, 54 | width: MediaQuery.of(context).size.width / 2, 55 | color: Colors.white, 56 | child: SliderWidget(), 57 | ), 58 | Container( 59 | height: MediaQuery.of(context).size.height, 60 | width: MediaQuery.of(context).size.width / 2, 61 | color: bgColor, 62 | child: Center( 63 | child: Card( 64 | //elevation: 5, 65 | color: bgColor, 66 | child: Container( 67 | padding: EdgeInsets.all(42), 68 | width: MediaQuery.of(context).size.width / 3.6, 69 | height: MediaQuery.of(context).size.height / 1.2, 70 | child: Column( 71 | children: [ 72 | SizedBox( 73 | height: 60, 74 | ), 75 | Image.asset("assets/logo/logo_icon.png", scale: 3), 76 | SizedBox(height: 24.0), 77 | //Flexible( 78 | // child: _loginScreen(context), 79 | //), 80 | Flexible( 81 | child: Stack( 82 | children: [ 83 | SlideTransition( 84 | position: 85 | _animationController!.drive(tweenRight), 86 | child: Stack( 87 | fit: StackFit.loose, 88 | clipBehavior: Clip.none, 89 | children: [ 90 | _loginScreen(context), 91 | ]), 92 | ), 93 | SlideTransition( 94 | position: 95 | _animationController!.drive(tweenLeft), 96 | child: Stack( 97 | fit: StackFit.loose, 98 | clipBehavior: Clip.none, 99 | children: [ 100 | _registerScreen(context), 101 | ]), 102 | ), 103 | ], 104 | ), 105 | ), 106 | 107 | //Flexible( 108 | // child: SlideTransition( 109 | // position: _animationController!.drive(tweenLeft), 110 | // child: Stack( 111 | // fit: StackFit.loose, 112 | // clipBehavior: Clip.none, 113 | // children: [ 114 | // _registerScreen(context), 115 | // ]), 116 | // ), 117 | //), 118 | ], 119 | ), 120 | ), 121 | ), 122 | ), 123 | ) 124 | ], 125 | ), 126 | ], 127 | ), 128 | ); 129 | } 130 | 131 | Container _registerScreen(BuildContext context) { 132 | return Container( 133 | width: double.infinity, 134 | constraints: BoxConstraints( 135 | minHeight: MediaQuery.of(context).size.height - 0.0, 136 | ), 137 | child: Form( 138 | child: Column( 139 | crossAxisAlignment: CrossAxisAlignment.stretch, 140 | children: [ 141 | InputWidget( 142 | keyboardType: TextInputType.emailAddress, 143 | onSaved: (String? value) { 144 | // This optional block of code can be used to run 145 | // code when the user saves the form. 146 | }, 147 | onChanged: (String? value) { 148 | // This optional block of code can be used to run 149 | // code when the user saves the form. 150 | }, 151 | validator: (String? value) { 152 | return (value != null && value.contains('@')) 153 | ? 'Do not use the @ char.' 154 | : null; 155 | }, 156 | 157 | topLabel: "Name", 158 | 159 | hintText: "Enter Name", 160 | // prefixIcon: FlutterIcons.chevron_left_fea, 161 | ), 162 | SizedBox(height: 8.0), 163 | InputWidget( 164 | keyboardType: TextInputType.emailAddress, 165 | onSaved: (String? value) { 166 | // This optional block of code can be used to run 167 | // code when the user saves the form. 168 | }, 169 | onChanged: (String? value) { 170 | // This optional block of code can be used to run 171 | // code when the user saves the form. 172 | }, 173 | validator: (String? value) { 174 | return (value != null && value.contains('@')) 175 | ? 'Do not use the @ char.' 176 | : null; 177 | }, 178 | 179 | topLabel: "Email", 180 | 181 | hintText: "Enter E-mail", 182 | // prefixIcon: FlutterIcons.chevron_left_fea, 183 | ), 184 | SizedBox(height: 8.0), 185 | InputWidget( 186 | topLabel: "Password", 187 | obscureText: true, 188 | hintText: "Enter Password", 189 | onSaved: (String? uPassword) {}, 190 | onChanged: (String? value) {}, 191 | validator: (String? value) {}, 192 | ), 193 | SizedBox(height: 24.0), 194 | AppButton( 195 | type: ButtonType.PRIMARY, 196 | text: "Sign Up", 197 | onPressed: () { 198 | Navigator.push( 199 | context, 200 | MaterialPageRoute(builder: (context) => HomeScreen()), 201 | ); 202 | }, 203 | ), 204 | SizedBox(height: 24.0), 205 | Row( 206 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 207 | children: [ 208 | Row( 209 | children: [ 210 | Checkbox( 211 | value: isChecked, 212 | onChanged: (bool? value) { 213 | setState(() { 214 | isChecked = value!; 215 | }); 216 | }, 217 | ), 218 | Text("Remember Me") 219 | ], 220 | ), 221 | ], 222 | ), 223 | SizedBox(height: 24.0), 224 | Center( 225 | child: Wrap( 226 | runAlignment: WrapAlignment.center, 227 | crossAxisAlignment: WrapCrossAlignment.center, 228 | children: [ 229 | Text( 230 | "Already have an account?", 231 | style: Theme.of(context) 232 | .textTheme 233 | .bodyText1! 234 | .copyWith(fontWeight: FontWeight.w300), 235 | ), 236 | SizedBox( 237 | width: 8, 238 | ), 239 | TextButton( 240 | onPressed: () { 241 | if (_isMoved) { 242 | _animationController!.reverse(); 243 | } else { 244 | _animationController!.forward(); 245 | } 246 | _isMoved = !_isMoved; 247 | }, 248 | child: Text("Sign In", 249 | style: Theme.of(context).textTheme.bodyText1!.copyWith( 250 | fontWeight: FontWeight.w400, color: greenColor)), 251 | ) 252 | ], 253 | ), 254 | ), 255 | ], 256 | ), 257 | ), 258 | ); 259 | } 260 | 261 | Container _loginScreen(BuildContext context) { 262 | return Container( 263 | width: double.infinity, 264 | constraints: BoxConstraints( 265 | minHeight: MediaQuery.of(context).size.height - 0.0, 266 | ), 267 | child: Form( 268 | child: Column( 269 | crossAxisAlignment: CrossAxisAlignment.stretch, 270 | children: [ 271 | InputWidget( 272 | keyboardType: TextInputType.emailAddress, 273 | onSaved: (String? value) { 274 | // This optional block of code can be used to run 275 | // code when the user saves the form. 276 | }, 277 | onChanged: (String? value) { 278 | // This optional block of code can be used to run 279 | // code when the user saves the form. 280 | }, 281 | validator: (String? value) { 282 | return (value != null && value.contains('@')) 283 | ? 'Do not use the @ char.' 284 | : null; 285 | }, 286 | 287 | topLabel: "Email", 288 | 289 | hintText: "Enter E-mail", 290 | // prefixIcon: FlutterIcons.chevron_left_fea, 291 | ), 292 | SizedBox(height: 8.0), 293 | InputWidget( 294 | topLabel: "Password", 295 | obscureText: true, 296 | hintText: "Enter Password", 297 | onSaved: (String? uPassword) {}, 298 | onChanged: (String? value) {}, 299 | validator: (String? value) {}, 300 | ), 301 | SizedBox(height: 24.0), 302 | AppButton( 303 | type: ButtonType.PRIMARY, 304 | text: "Sign In", 305 | onPressed: () { 306 | Navigator.push( 307 | context, 308 | MaterialPageRoute(builder: (context) => HomeScreen()), 309 | ); 310 | }, 311 | ), 312 | SizedBox(height: 24.0), 313 | Row( 314 | mainAxisAlignment: MainAxisAlignment.spaceBetween, 315 | children: [ 316 | Row( 317 | children: [ 318 | Checkbox( 319 | value: isChecked, 320 | onChanged: (bool? value) { 321 | setState(() { 322 | isChecked = value!; 323 | }); 324 | }, 325 | ), 326 | Text("Remember Me") 327 | ], 328 | ), 329 | GestureDetector( 330 | onTap: () {}, 331 | child: Text( 332 | "Forget Password?", 333 | textAlign: TextAlign.right, 334 | style: Theme.of(context) 335 | .textTheme 336 | .bodyText2! 337 | .copyWith(color: greenColor), 338 | ), 339 | ), 340 | ], 341 | ), 342 | SizedBox(height: 24.0), 343 | Center( 344 | child: Wrap( 345 | runAlignment: WrapAlignment.center, 346 | crossAxisAlignment: WrapCrossAlignment.center, 347 | children: [ 348 | Text( 349 | "Don't have an account yet?", 350 | style: Theme.of(context) 351 | .textTheme 352 | .bodyText1! 353 | .copyWith(fontWeight: FontWeight.w300), 354 | ), 355 | SizedBox( 356 | width: 8, 357 | ), 358 | TextButton( 359 | onPressed: () { 360 | if (_isMoved) { 361 | _animationController!.reverse(); 362 | } else { 363 | _animationController!.forward(); 364 | } 365 | _isMoved = !_isMoved; 366 | }, 367 | child: Text("Sign up", 368 | style: Theme.of(context).textTheme.bodyText1!.copyWith( 369 | fontWeight: FontWeight.w400, color: greenColor)), 370 | ) 371 | ], 372 | ), 373 | ), 374 | ], 375 | ), 376 | ), 377 | ); 378 | } 379 | } 380 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _fe_analyzer_shared: 5 | dependency: transitive 6 | description: 7 | name: _fe_analyzer_shared 8 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "21.0.0" 11 | analyzer: 12 | dependency: transitive 13 | description: 14 | name: analyzer 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.5.0" 18 | args: 19 | dependency: transitive 20 | description: 21 | name: args 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "2.1.0" 25 | async: 26 | dependency: transitive 27 | description: 28 | name: async 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "2.5.0" 32 | boolean_selector: 33 | dependency: transitive 34 | description: 35 | name: boolean_selector 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "2.1.0" 39 | build: 40 | dependency: transitive 41 | description: 42 | name: build 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "2.0.1" 46 | build_config: 47 | dependency: transitive 48 | description: 49 | name: build_config 50 | url: "https://pub.dartlang.org" 51 | source: hosted 52 | version: "1.0.0" 53 | build_daemon: 54 | dependency: transitive 55 | description: 56 | name: build_daemon 57 | url: "https://pub.dartlang.org" 58 | source: hosted 59 | version: "3.0.0" 60 | build_resolvers: 61 | dependency: transitive 62 | description: 63 | name: build_resolvers 64 | url: "https://pub.dartlang.org" 65 | source: hosted 66 | version: "2.0.2" 67 | build_runner: 68 | dependency: "direct main" 69 | description: 70 | name: build_runner 71 | url: "https://pub.dartlang.org" 72 | source: hosted 73 | version: "2.0.3" 74 | build_runner_core: 75 | dependency: transitive 76 | description: 77 | name: build_runner_core 78 | url: "https://pub.dartlang.org" 79 | source: hosted 80 | version: "7.0.0" 81 | built_collection: 82 | dependency: transitive 83 | description: 84 | name: built_collection 85 | url: "https://pub.dartlang.org" 86 | source: hosted 87 | version: "5.0.0" 88 | built_value: 89 | dependency: transitive 90 | description: 91 | name: built_value 92 | url: "https://pub.dartlang.org" 93 | source: hosted 94 | version: "8.0.6" 95 | characters: 96 | dependency: transitive 97 | description: 98 | name: characters 99 | url: "https://pub.dartlang.org" 100 | source: hosted 101 | version: "1.1.0" 102 | charcode: 103 | dependency: transitive 104 | description: 105 | name: charcode 106 | url: "https://pub.dartlang.org" 107 | source: hosted 108 | version: "1.2.0" 109 | checked_yaml: 110 | dependency: transitive 111 | description: 112 | name: checked_yaml 113 | url: "https://pub.dartlang.org" 114 | source: hosted 115 | version: "2.0.1" 116 | cli_util: 117 | dependency: transitive 118 | description: 119 | name: cli_util 120 | url: "https://pub.dartlang.org" 121 | source: hosted 122 | version: "0.3.0" 123 | clock: 124 | dependency: transitive 125 | description: 126 | name: clock 127 | url: "https://pub.dartlang.org" 128 | source: hosted 129 | version: "1.1.0" 130 | code_builder: 131 | dependency: transitive 132 | description: 133 | name: code_builder 134 | url: "https://pub.dartlang.org" 135 | source: hosted 136 | version: "4.0.0" 137 | collection: 138 | dependency: transitive 139 | description: 140 | name: collection 141 | url: "https://pub.dartlang.org" 142 | source: hosted 143 | version: "1.15.0" 144 | colorize_text_avatar: 145 | dependency: "direct main" 146 | description: 147 | name: colorize_text_avatar 148 | url: "https://pub.dartlang.org" 149 | source: hosted 150 | version: "1.0.2" 151 | convert: 152 | dependency: transitive 153 | description: 154 | name: convert 155 | url: "https://pub.dartlang.org" 156 | source: hosted 157 | version: "3.0.0" 158 | crypto: 159 | dependency: transitive 160 | description: 161 | name: crypto 162 | url: "https://pub.dartlang.org" 163 | source: hosted 164 | version: "3.0.1" 165 | cupertino_icons: 166 | dependency: "direct main" 167 | description: 168 | name: cupertino_icons 169 | url: "https://pub.dartlang.org" 170 | source: hosted 171 | version: "1.0.3" 172 | dart_style: 173 | dependency: transitive 174 | description: 175 | name: dart_style 176 | url: "https://pub.dartlang.org" 177 | source: hosted 178 | version: "2.0.1" 179 | equatable: 180 | dependency: transitive 181 | description: 182 | name: equatable 183 | url: "https://pub.dartlang.org" 184 | source: hosted 185 | version: "2.0.2" 186 | fake_async: 187 | dependency: transitive 188 | description: 189 | name: fake_async 190 | url: "https://pub.dartlang.org" 191 | source: hosted 192 | version: "1.2.0" 193 | ffi: 194 | dependency: transitive 195 | description: 196 | name: ffi 197 | url: "https://pub.dartlang.org" 198 | source: hosted 199 | version: "1.0.0" 200 | file: 201 | dependency: transitive 202 | description: 203 | name: file 204 | url: "https://pub.dartlang.org" 205 | source: hosted 206 | version: "6.1.1" 207 | fixnum: 208 | dependency: transitive 209 | description: 210 | name: fixnum 211 | url: "https://pub.dartlang.org" 212 | source: hosted 213 | version: "1.0.0" 214 | fl_chart: 215 | dependency: "direct main" 216 | description: 217 | name: fl_chart 218 | url: "https://pub.dartlang.org" 219 | source: hosted 220 | version: "0.36.1" 221 | flutter: 222 | dependency: "direct main" 223 | description: flutter 224 | source: sdk 225 | version: "0.0.0" 226 | flutter_icons: 227 | dependency: "direct main" 228 | description: 229 | path: "." 230 | ref: HEAD 231 | resolved-ref: "0831af6f0f239d20fb9578612d7a893e2a53d044" 232 | url: "https://github.com/adarsh-technocrat/flutter-icons.git" 233 | source: git 234 | version: "1.1.1-nullsafety.0" 235 | flutter_screenutil: 236 | dependency: "direct main" 237 | description: 238 | name: flutter_screenutil 239 | url: "https://pub.dartlang.org" 240 | source: hosted 241 | version: "5.0.0+2" 242 | flutter_svg: 243 | dependency: "direct main" 244 | description: 245 | name: flutter_svg 246 | url: "https://pub.dartlang.org" 247 | source: hosted 248 | version: "0.22.0" 249 | flutter_test: 250 | dependency: "direct dev" 251 | description: flutter 252 | source: sdk 253 | version: "0.0.0" 254 | frontend_server_client: 255 | dependency: transitive 256 | description: 257 | name: frontend_server_client 258 | url: "https://pub.dartlang.org" 259 | source: hosted 260 | version: "2.1.0" 261 | glob: 262 | dependency: transitive 263 | description: 264 | name: glob 265 | url: "https://pub.dartlang.org" 266 | source: hosted 267 | version: "2.0.1" 268 | google_fonts: 269 | dependency: "direct main" 270 | description: 271 | name: google_fonts 272 | url: "https://pub.dartlang.org" 273 | source: hosted 274 | version: "2.1.0" 275 | graphs: 276 | dependency: transitive 277 | description: 278 | name: graphs 279 | url: "https://pub.dartlang.org" 280 | source: hosted 281 | version: "2.0.0" 282 | http: 283 | dependency: transitive 284 | description: 285 | name: http 286 | url: "https://pub.dartlang.org" 287 | source: hosted 288 | version: "0.13.3" 289 | http_multi_server: 290 | dependency: transitive 291 | description: 292 | name: http_multi_server 293 | url: "https://pub.dartlang.org" 294 | source: hosted 295 | version: "3.0.1" 296 | http_parser: 297 | dependency: transitive 298 | description: 299 | name: http_parser 300 | url: "https://pub.dartlang.org" 301 | source: hosted 302 | version: "4.0.0" 303 | intl: 304 | dependency: "direct main" 305 | description: 306 | name: intl 307 | url: "https://pub.dartlang.org" 308 | source: hosted 309 | version: "0.17.0" 310 | io: 311 | dependency: transitive 312 | description: 313 | name: io 314 | url: "https://pub.dartlang.org" 315 | source: hosted 316 | version: "1.0.0" 317 | js: 318 | dependency: transitive 319 | description: 320 | name: js 321 | url: "https://pub.dartlang.org" 322 | source: hosted 323 | version: "0.6.3" 324 | json_annotation: 325 | dependency: "direct main" 326 | description: 327 | name: json_annotation 328 | url: "https://pub.dartlang.org" 329 | source: hosted 330 | version: "4.0.1" 331 | json_serializable: 332 | dependency: "direct main" 333 | description: 334 | name: json_serializable 335 | url: "https://pub.dartlang.org" 336 | source: hosted 337 | version: "4.1.2" 338 | logging: 339 | dependency: transitive 340 | description: 341 | name: logging 342 | url: "https://pub.dartlang.org" 343 | source: hosted 344 | version: "1.0.1" 345 | matcher: 346 | dependency: transitive 347 | description: 348 | name: matcher 349 | url: "https://pub.dartlang.org" 350 | source: hosted 351 | version: "0.12.10" 352 | meta: 353 | dependency: transitive 354 | description: 355 | name: meta 356 | url: "https://pub.dartlang.org" 357 | source: hosted 358 | version: "1.3.0" 359 | mime: 360 | dependency: transitive 361 | description: 362 | name: mime 363 | url: "https://pub.dartlang.org" 364 | source: hosted 365 | version: "1.0.0" 366 | nested: 367 | dependency: transitive 368 | description: 369 | name: nested 370 | url: "https://pub.dartlang.org" 371 | source: hosted 372 | version: "1.0.0" 373 | package_config: 374 | dependency: transitive 375 | description: 376 | name: package_config 377 | url: "https://pub.dartlang.org" 378 | source: hosted 379 | version: "2.0.0" 380 | path: 381 | dependency: transitive 382 | description: 383 | name: path 384 | url: "https://pub.dartlang.org" 385 | source: hosted 386 | version: "1.8.0" 387 | path_drawing: 388 | dependency: transitive 389 | description: 390 | name: path_drawing 391 | url: "https://pub.dartlang.org" 392 | source: hosted 393 | version: "0.5.1" 394 | path_parsing: 395 | dependency: transitive 396 | description: 397 | name: path_parsing 398 | url: "https://pub.dartlang.org" 399 | source: hosted 400 | version: "0.2.1" 401 | path_provider: 402 | dependency: transitive 403 | description: 404 | name: path_provider 405 | url: "https://pub.dartlang.org" 406 | source: hosted 407 | version: "2.0.1" 408 | path_provider_linux: 409 | dependency: transitive 410 | description: 411 | name: path_provider_linux 412 | url: "https://pub.dartlang.org" 413 | source: hosted 414 | version: "2.0.0" 415 | path_provider_macos: 416 | dependency: transitive 417 | description: 418 | name: path_provider_macos 419 | url: "https://pub.dartlang.org" 420 | source: hosted 421 | version: "2.0.0" 422 | path_provider_platform_interface: 423 | dependency: transitive 424 | description: 425 | name: path_provider_platform_interface 426 | url: "https://pub.dartlang.org" 427 | source: hosted 428 | version: "2.0.1" 429 | path_provider_windows: 430 | dependency: transitive 431 | description: 432 | name: path_provider_windows 433 | url: "https://pub.dartlang.org" 434 | source: hosted 435 | version: "2.0.1" 436 | pedantic: 437 | dependency: transitive 438 | description: 439 | name: pedantic 440 | url: "https://pub.dartlang.org" 441 | source: hosted 442 | version: "1.11.0" 443 | petitparser: 444 | dependency: transitive 445 | description: 446 | name: petitparser 447 | url: "https://pub.dartlang.org" 448 | source: hosted 449 | version: "4.1.0" 450 | platform: 451 | dependency: transitive 452 | description: 453 | name: platform 454 | url: "https://pub.dartlang.org" 455 | source: hosted 456 | version: "3.0.0" 457 | plugin_platform_interface: 458 | dependency: transitive 459 | description: 460 | name: plugin_platform_interface 461 | url: "https://pub.dartlang.org" 462 | source: hosted 463 | version: "2.0.0" 464 | pool: 465 | dependency: transitive 466 | description: 467 | name: pool 468 | url: "https://pub.dartlang.org" 469 | source: hosted 470 | version: "1.5.0" 471 | process: 472 | dependency: transitive 473 | description: 474 | name: process 475 | url: "https://pub.dartlang.org" 476 | source: hosted 477 | version: "4.2.1" 478 | provider: 479 | dependency: "direct main" 480 | description: 481 | name: provider 482 | url: "https://pub.dartlang.org" 483 | source: hosted 484 | version: "5.0.0" 485 | pub_semver: 486 | dependency: transitive 487 | description: 488 | name: pub_semver 489 | url: "https://pub.dartlang.org" 490 | source: hosted 491 | version: "2.0.0" 492 | pubspec_parse: 493 | dependency: transitive 494 | description: 495 | name: pubspec_parse 496 | url: "https://pub.dartlang.org" 497 | source: hosted 498 | version: "1.0.0" 499 | shelf: 500 | dependency: transitive 501 | description: 502 | name: shelf 503 | url: "https://pub.dartlang.org" 504 | source: hosted 505 | version: "1.1.4" 506 | shelf_web_socket: 507 | dependency: transitive 508 | description: 509 | name: shelf_web_socket 510 | url: "https://pub.dartlang.org" 511 | source: hosted 512 | version: "1.0.1" 513 | simple_gesture_detector: 514 | dependency: transitive 515 | description: 516 | name: simple_gesture_detector 517 | url: "https://pub.dartlang.org" 518 | source: hosted 519 | version: "0.2.0" 520 | sky_engine: 521 | dependency: transitive 522 | description: flutter 523 | source: sdk 524 | version: "0.0.99" 525 | smooth_page_indicator: 526 | dependency: "direct main" 527 | description: 528 | name: smooth_page_indicator 529 | url: "https://pub.dartlang.org" 530 | source: hosted 531 | version: "0.3.0-nullsafety.0" 532 | source_gen: 533 | dependency: transitive 534 | description: 535 | name: source_gen 536 | url: "https://pub.dartlang.org" 537 | source: hosted 538 | version: "1.0.0" 539 | source_span: 540 | dependency: transitive 541 | description: 542 | name: source_span 543 | url: "https://pub.dartlang.org" 544 | source: hosted 545 | version: "1.8.0" 546 | stack_trace: 547 | dependency: transitive 548 | description: 549 | name: stack_trace 550 | url: "https://pub.dartlang.org" 551 | source: hosted 552 | version: "1.10.0" 553 | stream_channel: 554 | dependency: transitive 555 | description: 556 | name: stream_channel 557 | url: "https://pub.dartlang.org" 558 | source: hosted 559 | version: "2.1.0" 560 | stream_transform: 561 | dependency: transitive 562 | description: 563 | name: stream_transform 564 | url: "https://pub.dartlang.org" 565 | source: hosted 566 | version: "2.0.0" 567 | string_scanner: 568 | dependency: transitive 569 | description: 570 | name: string_scanner 571 | url: "https://pub.dartlang.org" 572 | source: hosted 573 | version: "1.1.0" 574 | table_calendar: 575 | dependency: "direct main" 576 | description: 577 | name: table_calendar 578 | url: "https://pub.dartlang.org" 579 | source: hosted 580 | version: "3.0.0" 581 | term_glyph: 582 | dependency: transitive 583 | description: 584 | name: term_glyph 585 | url: "https://pub.dartlang.org" 586 | source: hosted 587 | version: "1.2.0" 588 | test_api: 589 | dependency: transitive 590 | description: 591 | name: test_api 592 | url: "https://pub.dartlang.org" 593 | source: hosted 594 | version: "0.2.19" 595 | timing: 596 | dependency: transitive 597 | description: 598 | name: timing 599 | url: "https://pub.dartlang.org" 600 | source: hosted 601 | version: "1.0.0" 602 | typed_data: 603 | dependency: transitive 604 | description: 605 | name: typed_data 606 | url: "https://pub.dartlang.org" 607 | source: hosted 608 | version: "1.3.0" 609 | vector_math: 610 | dependency: transitive 611 | description: 612 | name: vector_math 613 | url: "https://pub.dartlang.org" 614 | source: hosted 615 | version: "2.1.0" 616 | watcher: 617 | dependency: transitive 618 | description: 619 | name: watcher 620 | url: "https://pub.dartlang.org" 621 | source: hosted 622 | version: "1.0.0" 623 | web_socket_channel: 624 | dependency: transitive 625 | description: 626 | name: web_socket_channel 627 | url: "https://pub.dartlang.org" 628 | source: hosted 629 | version: "2.1.0" 630 | win32: 631 | dependency: transitive 632 | description: 633 | name: win32 634 | url: "https://pub.dartlang.org" 635 | source: hosted 636 | version: "2.0.5" 637 | xdg_directories: 638 | dependency: transitive 639 | description: 640 | name: xdg_directories 641 | url: "https://pub.dartlang.org" 642 | source: hosted 643 | version: "0.2.0" 644 | xml: 645 | dependency: transitive 646 | description: 647 | name: xml 648 | url: "https://pub.dartlang.org" 649 | source: hosted 650 | version: "5.1.1" 651 | yaml: 652 | dependency: transitive 653 | description: 654 | name: yaml 655 | url: "https://pub.dartlang.org" 656 | source: hosted 657 | version: "3.1.0" 658 | sdks: 659 | dart: ">=2.12.0 <3.0.0" 660 | flutter: ">=1.24.0-7.0" 661 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: smart_admin_dashboard 2 | description: A new Flutter project. 3 | 4 | # The following line prevents the package from being accidentally published to 5 | # pub.dev using `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.12.0 <3.0.0" 22 | 23 | dependencies: 24 | flutter: 25 | sdk: flutter 26 | 27 | # The following adds the Cupertino Icons font to your application. 28 | # Use with the CupertinoIcons class for iOS style icons. 29 | cupertino_icons: ^1.0.2 30 | flutter_svg: ^0.22.0 31 | 32 | provider: ^5.0.0 33 | fl_chart: ^0.36.1 34 | google_fonts: ^2.1.0 35 | flutter_icons: 36 | git: 37 | url: https://github.com/adarsh-technocrat/flutter-icons.git 38 | branch: null-safety-migration 39 | json_annotation: ^4.0.1 40 | json_serializable: ^4.1.2 41 | build_runner: ^2.0.3 42 | intl: ^0.17.0 43 | table_calendar: ^3.0.0 44 | flutter_screenutil: ^5.0.0+2 45 | smooth_page_indicator: ^0.3.0-nullsafety.0 46 | colorize_text_avatar: ^1.0.2 47 | 48 | dev_dependencies: 49 | flutter_test: 50 | sdk: flutter 51 | 52 | # For information on the generic Dart part of this file, see the 53 | # following page: https://dart.dev/tools/pub/pubspec 54 | # The following section is specific to Flutter. 55 | flutter: 56 | 57 | # The following line ensures that the Material Icons font is 58 | # included with your application, so that you can use the icons in 59 | # the material Icons class. 60 | uses-material-design: true 61 | # To add assets to your application, add an assets section, like this: 62 | assets: 63 | - assets/images/ 64 | - assets/icons/ 65 | - assets/slides/ 66 | - assets/logo/ 67 | - assets/jsons/ 68 | # assets: 69 | # - images/a_dot_burr.jpeg 70 | # - images/a_dot_ham.jpeg 71 | # An image asset can refer to one or more resolution-specific "variants", see 72 | # https://flutter.dev/assets-and-images/#resolution-aware. 73 | # For details regarding adding assets from package dependencies, see 74 | # https://flutter.dev/assets-and-images/#from-packages 75 | # To add custom fonts to your application, add a fonts section here, 76 | # in this "flutter" section. Each entry in this list should have a 77 | # "family" key with the font family name, and a "fonts" key with a 78 | # list giving the asset and other descriptors for the font. For 79 | # example: 80 | # fonts: 81 | # - family: Schyler 82 | # fonts: 83 | # - asset: fonts/Schyler-Regular.ttf 84 | # - asset: fonts/Schyler-Italic.ttf 85 | # style: italic 86 | # - family: Trajan Pro 87 | # fonts: 88 | # - asset: fonts/TrajanPro.ttf 89 | # - asset: fonts/TrajanPro_Bold.ttf 90 | # weight: 700 91 | # 92 | # For details regarding fonts from package dependencies, 93 | # see https://flutter.dev/custom-fonts/#from-packages 94 | 95 | -------------------------------------------------------------------------------- /routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:smart_admin_dashboard/screens/login/login_screen.dart'; 3 | import 'package:smart_admin_dashboard/screens/home/home_screen.dart'; 4 | 5 | class Routes { 6 | Routes._(); 7 | 8 | //static variables 9 | static const String login = '/login'; 10 | static const String home = '/home'; 11 | 12 | static final routes = { 13 | // splash: (BuildContext context) => SplashScreen(), 14 | login: (BuildContext context) => Login( 15 | title: '', 16 | ), 17 | home: (BuildContext context) => HomeScreen(), 18 | }; 19 | } 20 | 21 | Route onGenerateRoute(RouteSettings settings) { 22 | switch (settings.name) { 23 | case "/": 24 | return MaterialPageRoute(builder: (BuildContext context) { 25 | return HomeScreen(); 26 | }); 27 | default: 28 | return MaterialPageRoute(builder: (BuildContext context) { 29 | return Login(title: "Hollo"); 30 | }); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /screenshots/deniz-codes-sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/screenshots/deniz-codes-sc.png -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:smart_admin_dashboard/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(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 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deniscolak/smart-admin-dashboard/73afb2ab39be61853ec8fae63c980dbbb9ef5de6/web/icons/Icon-512.png -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | smart_admin_dashboard 30 | 31 | 32 | 33 | 36 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /web/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "smart_admin_dashboard", 3 | "short_name": "smart_admin_dashboard", 4 | "start_url": ".", 5 | "display": "standalone", 6 | "background_color": "#0175C2", 7 | "theme_color": "#0175C2", 8 | "description": "A new Flutter project.", 9 | "orientation": "portrait-primary", 10 | "prefer_related_applications": false, 11 | "icons": [ 12 | { 13 | "src": "icons/Icon-192.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }, 17 | { 18 | "src": "icons/Icon-512.png", 19 | "sizes": "512x512", 20 | "type": "image/png" 21 | } 22 | ] 23 | } 24 | --------------------------------------------------------------------------------