├── 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 | [](https://blockchain.com/btc/address/33FY83UU8o5q8qogNzFY2CegPn6PzRCsJA)
12 |
13 |
14 | ### Smart Admin Panel & Dashboard
15 |
16 |
17 | 
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 |
7 |
--------------------------------------------------------------------------------
/assets/icons/Search.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/assets/icons/drop_box.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/icons/folder.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/media.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_dashbord.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_doc.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_notification.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_profile.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_setting.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_store.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_task.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/menu_tran.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icons/unknown.svg:
--------------------------------------------------------------------------------
1 |
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 |
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 |
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 |
--------------------------------------------------------------------------------