diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea78..00000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md
deleted file mode 100644
index 48d5f81f..00000000
--- a/.github/ISSUE_TEMPLATE/custom.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-name: Custom issue template
-about: Describe this issue template's purpose here.
-title: ''
-labels: ''
-assignees: ''
-
----
-
-
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7d..00000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..739ce965
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,24 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "daily"
+
+ - package-ecosystem: "pub"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ ignore:
+ - dependency-name: "*"
+ update-types: ["version-update:semver-minor", "version-update:semver-patch"]
+
+ - package-ecosystem: "gradle"
+ directory: "android"
+ schedule:
+ interval: "daily"
diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml
deleted file mode 100644
index 6dfa1c94..00000000
--- a/.github/workflows/dart.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: Dart CI
-
-on: push
-# push:
-# branches: [ master ]
-# pull_request:
-# branches: [ master ]
-
-env:
- flutter_channel: 'stable' # or: 'dev' or 'beta'
- flutter_version: '1.17.0'
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v2
-
- - uses: subosito/flutter-action@v1
- with:
- channel: ${{ env.flutter_channel }}
- flutter-version: ${{ env.flutter_version }}
-
- - uses: actions/setup-java@v1
- with:
- java-version: '12.x'
-
- - run: flutter pub get
- working-directory: best_flutter_ui_templates
- # - run: flutter test
-
- - name: build APK
- run: flutter build apk
- working-directory: best_flutter_ui_templates
-
- - name: upload APK
- uses: actions/upload-artifact@v1
- with:
- name: apk
- path: best_flutter_ui_templates/build/app/outputs/apk/release/app-release.apk
\ No newline at end of file
diff --git a/.github/workflows/flutter_build.yml b/.github/workflows/flutter_build.yml
new file mode 100644
index 00000000..83a57997
--- /dev/null
+++ b/.github/workflows/flutter_build.yml
@@ -0,0 +1,54 @@
+name: Flutter build
+
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ build_android:
+ name: Build for Android
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Flutter build appbundle
+ run: flutter build appbundle --release
+
+ build_ios:
+ name: Build for iOS
+ runs-on: macos-latest
+ timeout-minutes: 10
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Pod install
+ run: |
+ cd ios
+ pod install
+ - name: Flutter build iOS
+ run: flutter build ios --release --no-codesign
diff --git a/.github/workflows/flutter_checks.yml b/.github/workflows/flutter_checks.yml
new file mode 100644
index 00000000..3a39c406
--- /dev/null
+++ b/.github/workflows/flutter_checks.yml
@@ -0,0 +1,97 @@
+name: Flutter checks
+
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches:
+ - main
+
+jobs:
+ check_pub_dependencies:
+ name: Check dependencies
+ timeout-minutes: 10
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+
+ pod_install:
+ name: Pod install
+ runs-on: macos-latest
+ timeout-minutes: 10
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Pod install
+ run: |
+ cd ios
+ pod install
+
+ check_formatting:
+ name: Check formatting
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Check Dart formatting
+ run: dart format --line-length 80 --set-exit-if-changed .
+
+ analyze:
+ name: Dart analyze
+ timeout-minutes: 10
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Run Dart analyze
+ uses: invertase/github-action-dart-analyzer@v3.0.0
+
+ test:
+ name: Flutter test
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ github.head_ref }}
+ - name: Install Flutter
+ uses: subosito/flutter-action@v2
+ - name: Disable analytics
+ run: flutter config --no-analytics
+ - name: Flutter pub get
+ run: flutter pub get
+ - name: Flutter test
+ run: flutter test
diff --git a/.gitignore b/.gitignore
index 353fc521..ac57938d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,65 @@
-photos
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Web related
+lib/generated_plugin_registrant.dart
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
+
+# Exceptions to above rules.
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
+
+# Fastlane related
+ios/fastlane/.env
+ios/fastlane/report.xml
+android/fastlane/report.xml
+
+# Release related
+ios/Runner.ipa
+ios/Runner.app.dSYM.zip
+android/app/release/app-release.aab
+
+# Other
+ios/Flutter/flutter_export_environment.sh
+local.properties
+**/dgph
+**/dgph~
diff --git a/.metadata b/.metadata
new file mode 100644
index 00000000..8d5d37ee
--- /dev/null
+++ b/.metadata
@@ -0,0 +1,30 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "a14f74ff3a1cbd521163c5f03d68113d50af93d3"
+ channel: "stable"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+ base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+ - platform: android
+ create_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+ base_revision: a14f74ff3a1cbd521163c5f03d68113d50af93d3
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/README.md b/README.md
index ead3843b..f7515fec 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,7 @@
-# Best-Flutter-UI-Templates
-completely free for everyone. Its build-in Flutter Dart.
+# Flutter Templates
+Completely free for everyone.
+Built with Flutter.
-
-
-
-
-
-### Some Screenshots
-
-

+
+
+
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 00000000..24662462
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,5 @@
+include: package:flutter_lints/flutter.yaml
+
+analyzer:
+ errors:
+ todo: info
diff --git a/android/.gitignore b/android/.gitignore
new file mode 100644
index 00000000..6f568019
--- /dev/null
+++ b/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/android/app/build.gradle b/android/app/build.gradle
new file mode 100644
index 00000000..e82b239f
--- /dev/null
+++ b/android/app/build.gradle
@@ -0,0 +1,58 @@
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file("local.properties")
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader("UTF-8") { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
+if (flutterVersionCode == null) {
+ flutterVersionCode = "1"
+}
+
+def flutterVersionName = localProperties.getProperty("flutter.versionName")
+if (flutterVersionName == null) {
+ flutterVersionName = "1.0"
+}
+
+android {
+ namespace = "com.example.templates"
+ compileSdk = flutter.compileSdkVersion
+ ndkVersion = flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_17
+ targetCompatibility = JavaVersion.VERSION_17
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId = "com.example.templates"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
+ minSdk = flutter.minSdkVersion
+ targetSdk = flutter.targetSdkVersion
+ versionCode = flutterVersionCode.toInteger()
+ versionName = flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig = signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source = "../.."
+}
diff --git a/best_flutter_ui_templates/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
similarity index 57%
rename from best_flutter_ui_templates/android/app/src/debug/AndroidManifest.xml
rename to android/app/src/debug/AndroidManifest.xml
index 35caba39..399f6981 100644
--- a/best_flutter_ui_templates/android/app/src/debug/AndroidManifest.xml
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -1,6 +1,6 @@
-
-
diff --git a/best_flutter_ui_templates/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
similarity index 67%
rename from best_flutter_ui_templates/android/app/src/main/AndroidManifest.xml
rename to android/app/src/main/AndroidManifest.xml
index c2f47da9..08d2455d 100644
--- a/best_flutter_ui_templates/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -1,17 +1,24 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/kotlin/com/example/templates/MainActivity.kt b/android/app/src/main/kotlin/com/example/templates/MainActivity.kt
new file mode 100644
index 00000000..475e6d81
--- /dev/null
+++ b/android/app/src/main/kotlin/com/example/templates/MainActivity.kt
@@ -0,0 +1,5 @@
+package com.example.templates
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity()
diff --git a/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..ee0d04c7
Binary files /dev/null and b/android/app/src/main/res/drawable-hdpi/ic_launcher_foreground.png differ
diff --git a/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..8351e14b
Binary files /dev/null and b/android/app/src/main/res/drawable-mdpi/ic_launcher_foreground.png differ
diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 00000000..f74085f3
--- /dev/null
+++ b/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..d43f9b57
Binary files /dev/null and b/android/app/src/main/res/drawable-xhdpi/ic_launcher_foreground.png differ
diff --git a/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..7691fb6c
Binary files /dev/null and b/android/app/src/main/res/drawable-xxhdpi/ic_launcher_foreground.png differ
diff --git a/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..9a5198e9
Binary files /dev/null and b/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml
similarity index 100%
rename from best_flutter_ui_templates/android/app/src/main/res/drawable/launch_background.xml
rename to android/app/src/main/res/drawable/launch_background.xml
diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..5f349f7f
--- /dev/null
+++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..04c453d4
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..cfc979ed
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..8f0b2c3f
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..18854319
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..9c5ebfc7
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values-night/styles.xml
similarity index 80%
rename from best_flutter_ui_templates/android/app/src/main/res/values/styles.xml
rename to android/app/src/main/res/values-night/styles.xml
index 1f83a33f..06952be7 100644
--- a/best_flutter_ui_templates/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values-night/styles.xml
@@ -1,18 +1,18 @@
-
+
diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..ab983282
--- /dev/null
+++ b/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,4 @@
+
+
+ #ffffff
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..cb1ef880
--- /dev/null
+++ b/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/best_flutter_ui_templates/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml
similarity index 57%
rename from best_flutter_ui_templates/android/app/src/profile/AndroidManifest.xml
rename to android/app/src/profile/AndroidManifest.xml
index 35caba39..399f6981 100644
--- a/best_flutter_ui_templates/android/app/src/profile/AndroidManifest.xml
+++ b/android/app/src/profile/AndroidManifest.xml
@@ -1,6 +1,6 @@
-
-
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 00000000..d2ffbffa
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,18 @@
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = "../build"
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(":app")
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/android/gradle.properties b/android/gradle.properties
new file mode 100644
index 00000000..3b5b324f
--- /dev/null
+++ b/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/best_flutter_ui_templates/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
similarity index 79%
rename from best_flutter_ui_templates/android/gradle/wrapper/gradle-wrapper.properties
rename to android/gradle/wrapper/gradle-wrapper.properties
index 296b146b..6e968fad 100644
--- a/best_flutter_ui_templates/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
diff --git a/android/settings.gradle b/android/settings.gradle
new file mode 100644
index 00000000..969bf33f
--- /dev/null
+++ b/android/settings.gradle
@@ -0,0 +1,25 @@
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }()
+
+ includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "8.1.4" apply false
+ id "org.jetbrains.kotlin.android" version "2.0.0" apply false
+}
+
+include ":app"
diff --git a/assets/design_course/design_course.png b/assets/design_course/design_course.png
new file mode 100644
index 00000000..da3ace57
Binary files /dev/null and b/assets/design_course/design_course.png differ
diff --git a/assets/design_course/interFace1.png b/assets/design_course/interFace1.png
new file mode 100644
index 00000000..d2a43264
Binary files /dev/null and b/assets/design_course/interFace1.png differ
diff --git a/assets/design_course/interFace2.png b/assets/design_course/interFace2.png
new file mode 100644
index 00000000..c3589bda
Binary files /dev/null and b/assets/design_course/interFace2.png differ
diff --git a/assets/design_course/interFace3.png b/assets/design_course/interFace3.png
new file mode 100644
index 00000000..a563eaf2
Binary files /dev/null and b/assets/design_course/interFace3.png differ
diff --git a/assets/design_course/interFace4.png b/assets/design_course/interFace4.png
new file mode 100644
index 00000000..b7c288ec
Binary files /dev/null and b/assets/design_course/interFace4.png differ
diff --git a/assets/design_course/userImage.png b/assets/design_course/userImage.png
new file mode 100644
index 00000000..ef8abfee
Binary files /dev/null and b/assets/design_course/userImage.png differ
diff --git a/assets/design_course/webInterFace.png b/assets/design_course/webInterFace.png
new file mode 100644
index 00000000..a867bb05
Binary files /dev/null and b/assets/design_course/webInterFace.png differ
diff --git a/assets/fitness_app/area1.png b/assets/fitness_app/area1.png
new file mode 100644
index 00000000..6e31898d
Binary files /dev/null and b/assets/fitness_app/area1.png differ
diff --git a/assets/fitness_app/area2.png b/assets/fitness_app/area2.png
new file mode 100644
index 00000000..64166e3c
Binary files /dev/null and b/assets/fitness_app/area2.png differ
diff --git a/assets/fitness_app/area3.png b/assets/fitness_app/area3.png
new file mode 100644
index 00000000..8e4c2141
Binary files /dev/null and b/assets/fitness_app/area3.png differ
diff --git a/assets/fitness_app/back.png b/assets/fitness_app/back.png
new file mode 100644
index 00000000..355373af
Binary files /dev/null and b/assets/fitness_app/back.png differ
diff --git a/assets/fitness_app/bell.png b/assets/fitness_app/bell.png
new file mode 100644
index 00000000..71d14419
Binary files /dev/null and b/assets/fitness_app/bell.png differ
diff --git a/assets/fitness_app/bottle.png b/assets/fitness_app/bottle.png
new file mode 100644
index 00000000..e693dff5
Binary files /dev/null and b/assets/fitness_app/bottle.png differ
diff --git a/assets/fitness_app/breakfast.png b/assets/fitness_app/breakfast.png
new file mode 100644
index 00000000..9d98c8d7
Binary files /dev/null and b/assets/fitness_app/breakfast.png differ
diff --git a/assets/fitness_app/burned.png b/assets/fitness_app/burned.png
new file mode 100644
index 00000000..3a6e9649
Binary files /dev/null and b/assets/fitness_app/burned.png differ
diff --git a/assets/fitness_app/dinner.png b/assets/fitness_app/dinner.png
new file mode 100644
index 00000000..5ff489a5
Binary files /dev/null and b/assets/fitness_app/dinner.png differ
diff --git a/assets/fitness_app/eaten.png b/assets/fitness_app/eaten.png
new file mode 100644
index 00000000..b9061939
Binary files /dev/null and b/assets/fitness_app/eaten.png differ
diff --git a/assets/fitness_app/fitness_app.png b/assets/fitness_app/fitness_app.png
new file mode 100644
index 00000000..e57e6075
Binary files /dev/null and b/assets/fitness_app/fitness_app.png differ
diff --git a/assets/fitness_app/glass.png b/assets/fitness_app/glass.png
new file mode 100644
index 00000000..8ca885c9
Binary files /dev/null and b/assets/fitness_app/glass.png differ
diff --git a/assets/fitness_app/lunch.png b/assets/fitness_app/lunch.png
new file mode 100644
index 00000000..a4165431
Binary files /dev/null and b/assets/fitness_app/lunch.png differ
diff --git a/assets/fitness_app/runner.png b/assets/fitness_app/runner.png
new file mode 100644
index 00000000..788dd4cb
Binary files /dev/null and b/assets/fitness_app/runner.png differ
diff --git a/assets/fitness_app/snack.png b/assets/fitness_app/snack.png
new file mode 100644
index 00000000..3320949a
Binary files /dev/null and b/assets/fitness_app/snack.png differ
diff --git a/assets/fitness_app/tab_1.png b/assets/fitness_app/tab_1.png
new file mode 100644
index 00000000..315d0a22
Binary files /dev/null and b/assets/fitness_app/tab_1.png differ
diff --git a/assets/fitness_app/tab_1s.png b/assets/fitness_app/tab_1s.png
new file mode 100644
index 00000000..1f7036af
Binary files /dev/null and b/assets/fitness_app/tab_1s.png differ
diff --git a/assets/fitness_app/tab_2.png b/assets/fitness_app/tab_2.png
new file mode 100644
index 00000000..8b8fd78b
Binary files /dev/null and b/assets/fitness_app/tab_2.png differ
diff --git a/assets/fitness_app/tab_2s.png b/assets/fitness_app/tab_2s.png
new file mode 100644
index 00000000..9b98c84c
Binary files /dev/null and b/assets/fitness_app/tab_2s.png differ
diff --git a/assets/fitness_app/tab_3.png b/assets/fitness_app/tab_3.png
new file mode 100644
index 00000000..c20c96cd
Binary files /dev/null and b/assets/fitness_app/tab_3.png differ
diff --git a/assets/fitness_app/tab_3s.png b/assets/fitness_app/tab_3s.png
new file mode 100644
index 00000000..6afcdafe
Binary files /dev/null and b/assets/fitness_app/tab_3s.png differ
diff --git a/assets/fitness_app/tab_4.png b/assets/fitness_app/tab_4.png
new file mode 100644
index 00000000..a38617b8
Binary files /dev/null and b/assets/fitness_app/tab_4.png differ
diff --git a/assets/fitness_app/tab_4s.png b/assets/fitness_app/tab_4s.png
new file mode 100644
index 00000000..e3c04f84
Binary files /dev/null and b/assets/fitness_app/tab_4s.png differ
diff --git a/best_flutter_ui_templates/assets/fonts/Roboto-Bold.ttf b/assets/fonts/Roboto-Bold.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/Roboto-Bold.ttf
rename to assets/fonts/Roboto-Bold.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/Roboto-Medium.ttf b/assets/fonts/Roboto-Medium.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/Roboto-Medium.ttf
rename to assets/fonts/Roboto-Medium.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/Roboto-Regular.ttf b/assets/fonts/Roboto-Regular.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/Roboto-Regular.ttf
rename to assets/fonts/Roboto-Regular.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/WorkSans-Bold.ttf b/assets/fonts/WorkSans-Bold.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/WorkSans-Bold.ttf
rename to assets/fonts/WorkSans-Bold.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/WorkSans-Medium.ttf b/assets/fonts/WorkSans-Medium.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/WorkSans-Medium.ttf
rename to assets/fonts/WorkSans-Medium.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/WorkSans-Regular.ttf b/assets/fonts/WorkSans-Regular.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/WorkSans-Regular.ttf
rename to assets/fonts/WorkSans-Regular.ttf
diff --git a/best_flutter_ui_templates/assets/fonts/WorkSans-SemiBold.ttf b/assets/fonts/WorkSans-SemiBold.ttf
similarity index 100%
rename from best_flutter_ui_templates/assets/fonts/WorkSans-SemiBold.ttf
rename to assets/fonts/WorkSans-SemiBold.ttf
diff --git a/assets/hotel/hotel_1.png b/assets/hotel/hotel_1.png
new file mode 100644
index 00000000..c824c6cf
Binary files /dev/null and b/assets/hotel/hotel_1.png differ
diff --git a/assets/hotel/hotel_2.png b/assets/hotel/hotel_2.png
new file mode 100644
index 00000000..778fcb5a
Binary files /dev/null and b/assets/hotel/hotel_2.png differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_3.png b/assets/hotel/hotel_3.png
similarity index 99%
rename from best_flutter_ui_templates/assets/hotel/hotel_3.png
rename to assets/hotel/hotel_3.png
index d7a34aff..6609f870 100644
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_3.png and b/assets/hotel/hotel_3.png differ
diff --git a/assets/hotel/hotel_4.png b/assets/hotel/hotel_4.png
new file mode 100644
index 00000000..5a76a750
Binary files /dev/null and b/assets/hotel/hotel_4.png differ
diff --git a/assets/hotel/hotel_5.png b/assets/hotel/hotel_5.png
new file mode 100644
index 00000000..6beb1268
Binary files /dev/null and b/assets/hotel/hotel_5.png differ
diff --git a/assets/hotel/hotel_booking.png b/assets/hotel/hotel_booking.png
new file mode 100644
index 00000000..5fcddc2a
Binary files /dev/null and b/assets/hotel/hotel_booking.png differ
diff --git a/assets/images/feedbackImage.png b/assets/images/feedbackImage.png
new file mode 100644
index 00000000..5b2c1a13
Binary files /dev/null and b/assets/images/feedbackImage.png differ
diff --git a/assets/images/helpImage.png b/assets/images/helpImage.png
new file mode 100644
index 00000000..12916bd2
Binary files /dev/null and b/assets/images/helpImage.png differ
diff --git a/assets/images/inviteImage.png b/assets/images/inviteImage.png
new file mode 100644
index 00000000..40b198b0
Binary files /dev/null and b/assets/images/inviteImage.png differ
diff --git a/assets/images/supportIcon.png b/assets/images/supportIcon.png
new file mode 100644
index 00000000..baaaf85a
Binary files /dev/null and b/assets/images/supportIcon.png differ
diff --git a/assets/images/userImage.png b/assets/images/userImage.png
new file mode 100644
index 00000000..7b2d31d4
Binary files /dev/null and b/assets/images/userImage.png differ
diff --git a/best_flutter_ui_templates/.gitignore b/best_flutter_ui_templates/.gitignore
deleted file mode 100644
index 1ba9c339..00000000
--- a/best_flutter_ui_templates/.gitignore
+++ /dev/null
@@ -1,43 +0,0 @@
-# Miscellaneous
-*.class
-*.log
-*.pyc
-*.swp
-.DS_Store
-.atom/
-.buildlog/
-.history
-.svn/
-
-# IntelliJ related
-*.iml
-*.ipr
-*.iws
-.idea/
-
-# The .vscode folder contains launch configuration and tasks you configure in
-# VS Code which you may wish to be included in version control, so this line
-# is commented out by default.
-#.vscode/
-
-# Flutter/Dart/Pub related
-**/doc/api/
-.dart_tool/
-.flutter-plugins
-.flutter-plugins-dependencies
-.packages
-.pub-cache/
-.pub/
-/build/
-
-# Web related
-lib/generated_plugin_registrant.dart
-
-# Symbolication related
-app.*.symbols
-
-# Obfuscation related
-app.*.map.json
-
-# Exceptions to above rules.
-!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/best_flutter_ui_templates/.metadata b/best_flutter_ui_templates/.metadata
deleted file mode 100644
index 0c50e4f8..00000000
--- a/best_flutter_ui_templates/.metadata
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file tracks properties of this Flutter project.
-# Used by Flutter tool to assess capabilities and perform upgrades etc.
-#
-# This file should be version controlled and should not be manually edited.
-
-version:
- revision: e6b34c2b5c96bb95325269a29a84e83ed8909b5f
- channel: stable
-
-project_type: app
diff --git a/best_flutter_ui_templates/README.md b/best_flutter_ui_templates/README.md
deleted file mode 100644
index 02e26490..00000000
--- a/best_flutter_ui_templates/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# best_flutter_ui_templates
-
-A new Flutter project.
-
-## Getting Started
-
-This project is a starting point for a Flutter application.
-
-A few resources to get you started if this is your first Flutter project:
-
-- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
-- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
-
-For help getting started with Flutter, view our
-[online documentation](https://flutter.dev/docs), which offers tutorials,
-samples, guidance on mobile development, and a full API reference.
diff --git a/best_flutter_ui_templates/android/.gitignore b/best_flutter_ui_templates/android/.gitignore
deleted file mode 100644
index bc2100d8..00000000
--- a/best_flutter_ui_templates/android/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-gradle-wrapper.jar
-/.gradle
-/captures/
-/gradlew
-/gradlew.bat
-/local.properties
-GeneratedPluginRegistrant.java
diff --git a/best_flutter_ui_templates/android/app/build.gradle b/best_flutter_ui_templates/android/app/build.gradle
deleted file mode 100644
index c917fead..00000000
--- a/best_flutter_ui_templates/android/app/build.gradle
+++ /dev/null
@@ -1,63 +0,0 @@
-def localProperties = new Properties()
-def localPropertiesFile = rootProject.file('local.properties')
-if (localPropertiesFile.exists()) {
- localPropertiesFile.withReader('UTF-8') { reader ->
- localProperties.load(reader)
- }
-}
-
-def flutterRoot = localProperties.getProperty('flutter.sdk')
-if (flutterRoot == null) {
- throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
-}
-
-def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
-if (flutterVersionCode == null) {
- flutterVersionCode = '1'
-}
-
-def flutterVersionName = localProperties.getProperty('flutter.versionName')
-if (flutterVersionName == null) {
- flutterVersionName = '1.0'
-}
-
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
-
-android {
- compileSdkVersion 28
-
- sourceSets {
- main.java.srcDirs += 'src/main/kotlin'
- }
-
- lintOptions {
- disable 'InvalidPackage'
- }
-
- defaultConfig {
- // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId "com.example.best_flutter_ui_templates"
- minSdkVersion 16
- targetSdkVersion 28
- versionCode flutterVersionCode.toInteger()
- versionName flutterVersionName
- }
-
- buildTypes {
- release {
- // TODO: Add your own signing config for the release build.
- // Signing with the debug keys for now, so `flutter run --release` works.
- signingConfig signingConfigs.debug
- }
- }
-}
-
-flutter {
- source '../..'
-}
-
-dependencies {
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
-}
diff --git a/best_flutter_ui_templates/android/app/src/main/kotlin/com/example/best_flutter_ui_templates/MainActivity.kt b/best_flutter_ui_templates/android/app/src/main/kotlin/com/example/best_flutter_ui_templates/MainActivity.kt
deleted file mode 100644
index 663c7b3c..00000000
--- a/best_flutter_ui_templates/android/app/src/main/kotlin/com/example/best_flutter_ui_templates/MainActivity.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.example.best_flutter_ui_templates
-
-import io.flutter.embedding.android.FlutterActivity
-
-class MainActivity: FlutterActivity() {
-}
diff --git a/best_flutter_ui_templates/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/best_flutter_ui_templates/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index db77bb4b..00000000
Binary files a/best_flutter_ui_templates/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/best_flutter_ui_templates/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 17987b79..00000000
Binary files a/best_flutter_ui_templates/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/best_flutter_ui_templates/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 09d43914..00000000
Binary files a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index d5f1c8d3..00000000
Binary files a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 4d6372ee..00000000
Binary files a/best_flutter_ui_templates/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/best_flutter_ui_templates/android/build.gradle b/best_flutter_ui_templates/android/build.gradle
deleted file mode 100644
index 3100ad2d..00000000
--- a/best_flutter_ui_templates/android/build.gradle
+++ /dev/null
@@ -1,31 +0,0 @@
-buildscript {
- ext.kotlin_version = '1.3.50'
- repositories {
- google()
- jcenter()
- }
-
- dependencies {
- classpath 'com.android.tools.build:gradle:3.5.0'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
-}
-
-allprojects {
- repositories {
- google()
- jcenter()
- }
-}
-
-rootProject.buildDir = '../build'
-subprojects {
- project.buildDir = "${rootProject.buildDir}/${project.name}"
-}
-subprojects {
- project.evaluationDependsOn(':app')
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/best_flutter_ui_templates/android/gradle.properties b/best_flutter_ui_templates/android/gradle.properties
deleted file mode 100644
index 38c8d454..00000000
--- a/best_flutter_ui_templates/android/gradle.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-org.gradle.jvmargs=-Xmx1536M
-android.enableR8=true
-android.useAndroidX=true
-android.enableJetifier=true
diff --git a/best_flutter_ui_templates/android/settings.gradle b/best_flutter_ui_templates/android/settings.gradle
deleted file mode 100644
index 5a2f14fb..00000000
--- a/best_flutter_ui_templates/android/settings.gradle
+++ /dev/null
@@ -1,15 +0,0 @@
-include ':app'
-
-def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
-
-def plugins = new Properties()
-def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
-if (pluginsFile.exists()) {
- pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
-}
-
-plugins.each { name, path ->
- def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
- include ":$name"
- project(":$name").projectDir = pluginDirectory
-}
diff --git a/best_flutter_ui_templates/assets/design_course/design_course.png b/best_flutter_ui_templates/assets/design_course/design_course.png
deleted file mode 100644
index 9bccb388..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/design_course.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/interFace1.png b/best_flutter_ui_templates/assets/design_course/interFace1.png
deleted file mode 100644
index 72ef917d..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/interFace1.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/interFace2.png b/best_flutter_ui_templates/assets/design_course/interFace2.png
deleted file mode 100644
index 4c1d4dca..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/interFace2.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/interFace3.png b/best_flutter_ui_templates/assets/design_course/interFace3.png
deleted file mode 100644
index 81158462..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/interFace3.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/interFace4.png b/best_flutter_ui_templates/assets/design_course/interFace4.png
deleted file mode 100644
index f22a7f4d..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/interFace4.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/userImage.png b/best_flutter_ui_templates/assets/design_course/userImage.png
deleted file mode 100644
index 42b8c77a..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/userImage.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/design_course/webInterFace.png b/best_flutter_ui_templates/assets/design_course/webInterFace.png
deleted file mode 100644
index 0e337c62..00000000
Binary files a/best_flutter_ui_templates/assets/design_course/webInterFace.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/area1.png b/best_flutter_ui_templates/assets/fitness_app/area1.png
deleted file mode 100644
index 3d89330c..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/area1.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/area2.png b/best_flutter_ui_templates/assets/fitness_app/area2.png
deleted file mode 100644
index 2be8b589..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/area2.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/area3.png b/best_flutter_ui_templates/assets/fitness_app/area3.png
deleted file mode 100644
index 01c4ed02..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/area3.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/back.png b/best_flutter_ui_templates/assets/fitness_app/back.png
deleted file mode 100644
index bbbde1ee..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/back.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/bell.png b/best_flutter_ui_templates/assets/fitness_app/bell.png
deleted file mode 100644
index f18a1de1..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/bell.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/bottle.png b/best_flutter_ui_templates/assets/fitness_app/bottle.png
deleted file mode 100644
index 5f09d99c..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/bottle.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/breakfast.png b/best_flutter_ui_templates/assets/fitness_app/breakfast.png
deleted file mode 100644
index 1eb55e72..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/breakfast.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/burned.png b/best_flutter_ui_templates/assets/fitness_app/burned.png
deleted file mode 100644
index 544e340a..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/burned.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/dinner.png b/best_flutter_ui_templates/assets/fitness_app/dinner.png
deleted file mode 100644
index a56514c9..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/dinner.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/eaten.png b/best_flutter_ui_templates/assets/fitness_app/eaten.png
deleted file mode 100644
index c007474d..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/eaten.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/fitness_app.png b/best_flutter_ui_templates/assets/fitness_app/fitness_app.png
deleted file mode 100644
index a6028aaa..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/fitness_app.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/glass.png b/best_flutter_ui_templates/assets/fitness_app/glass.png
deleted file mode 100644
index a7532317..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/glass.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/lunch.png b/best_flutter_ui_templates/assets/fitness_app/lunch.png
deleted file mode 100644
index 425d41ce..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/lunch.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/runner.png b/best_flutter_ui_templates/assets/fitness_app/runner.png
deleted file mode 100644
index 97d8c2a4..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/runner.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/snack.png b/best_flutter_ui_templates/assets/fitness_app/snack.png
deleted file mode 100644
index c631a799..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/snack.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_1.png b/best_flutter_ui_templates/assets/fitness_app/tab_1.png
deleted file mode 100644
index 326e74dc..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_1.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_1s.png b/best_flutter_ui_templates/assets/fitness_app/tab_1s.png
deleted file mode 100644
index 379c825b..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_1s.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_2.png b/best_flutter_ui_templates/assets/fitness_app/tab_2.png
deleted file mode 100644
index 512af6f4..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_2.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_2s.png b/best_flutter_ui_templates/assets/fitness_app/tab_2s.png
deleted file mode 100644
index c83dfcf2..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_2s.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_3.png b/best_flutter_ui_templates/assets/fitness_app/tab_3.png
deleted file mode 100644
index 189b573c..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_3.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_3s.png b/best_flutter_ui_templates/assets/fitness_app/tab_3s.png
deleted file mode 100644
index fbe5731a..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_3s.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_4.png b/best_flutter_ui_templates/assets/fitness_app/tab_4.png
deleted file mode 100644
index a483d7ce..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_4.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/fitness_app/tab_4s.png b/best_flutter_ui_templates/assets/fitness_app/tab_4s.png
deleted file mode 100644
index abe020f5..00000000
Binary files a/best_flutter_ui_templates/assets/fitness_app/tab_4s.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_1.png b/best_flutter_ui_templates/assets/hotel/hotel_1.png
deleted file mode 100644
index 4f2e2f65..00000000
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_1.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_2.png b/best_flutter_ui_templates/assets/hotel/hotel_2.png
deleted file mode 100644
index 1dd62f5f..00000000
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_2.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_4.png b/best_flutter_ui_templates/assets/hotel/hotel_4.png
deleted file mode 100644
index 15eb0d80..00000000
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_4.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_5.png b/best_flutter_ui_templates/assets/hotel/hotel_5.png
deleted file mode 100644
index 163c6703..00000000
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_5.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/hotel/hotel_booking.png b/best_flutter_ui_templates/assets/hotel/hotel_booking.png
deleted file mode 100644
index fdc76616..00000000
Binary files a/best_flutter_ui_templates/assets/hotel/hotel_booking.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/images/feedbackImage.png b/best_flutter_ui_templates/assets/images/feedbackImage.png
deleted file mode 100644
index 6e06f851..00000000
Binary files a/best_flutter_ui_templates/assets/images/feedbackImage.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/images/helpImage.png b/best_flutter_ui_templates/assets/images/helpImage.png
deleted file mode 100644
index 4e0ec4ce..00000000
Binary files a/best_flutter_ui_templates/assets/images/helpImage.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/images/inviteImage.png b/best_flutter_ui_templates/assets/images/inviteImage.png
deleted file mode 100644
index 5ab808a7..00000000
Binary files a/best_flutter_ui_templates/assets/images/inviteImage.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/images/supportIcon.png b/best_flutter_ui_templates/assets/images/supportIcon.png
deleted file mode 100644
index 5da2d66a..00000000
Binary files a/best_flutter_ui_templates/assets/images/supportIcon.png and /dev/null differ
diff --git a/best_flutter_ui_templates/assets/images/userImage.png b/best_flutter_ui_templates/assets/images/userImage.png
deleted file mode 100644
index 858def73..00000000
Binary files a/best_flutter_ui_templates/assets/images/userImage.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Flutter/Debug.xcconfig b/best_flutter_ui_templates/ios/Flutter/Debug.xcconfig
deleted file mode 100644
index 592ceee8..00000000
--- a/best_flutter_ui_templates/ios/Flutter/Debug.xcconfig
+++ /dev/null
@@ -1 +0,0 @@
-#include "Generated.xcconfig"
diff --git a/best_flutter_ui_templates/ios/Flutter/Release.xcconfig b/best_flutter_ui_templates/ios/Flutter/Release.xcconfig
deleted file mode 100644
index 592ceee8..00000000
--- a/best_flutter_ui_templates/ios/Flutter/Release.xcconfig
+++ /dev/null
@@ -1 +0,0 @@
-#include "Generated.xcconfig"
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
deleted file mode 100644
index dc9ada47..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
deleted file mode 100644
index 28c6bf03..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
deleted file mode 100644
index 2ccbfd96..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
deleted file mode 100644
index f091b6b0..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
deleted file mode 100644
index 4cde1211..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
deleted file mode 100644
index d0ef06e7..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
deleted file mode 100644
index dcdc2306..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
deleted file mode 100644
index 2ccbfd96..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
deleted file mode 100644
index c8f9ed8f..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
deleted file mode 100644
index a6d6b860..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
deleted file mode 100644
index a6d6b860..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
deleted file mode 100644
index 75b2d164..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
deleted file mode 100644
index c4df70d3..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
deleted file mode 100644
index 6a84f41e..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
deleted file mode 100644
index d0e1f585..00000000
Binary files a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and /dev/null differ
diff --git a/best_flutter_ui_templates/lib/design_course/category_list_view.dart b/best_flutter_ui_templates/lib/design_course/category_list_view.dart
deleted file mode 100644
index 76e753b8..00000000
--- a/best_flutter_ui_templates/lib/design_course/category_list_view.dart
+++ /dev/null
@@ -1,284 +0,0 @@
-import 'package:best_flutter_ui_templates/design_course/design_course_app_theme.dart';
-import 'package:best_flutter_ui_templates/design_course/models/category.dart';
-import 'package:best_flutter_ui_templates/main.dart';
-import 'package:flutter/material.dart';
-
-class CategoryListView extends StatefulWidget {
- const CategoryListView({Key key, this.callBack}) : super(key: key);
-
- final Function callBack;
- @override
- _CategoryListViewState createState() => _CategoryListViewState();
-}
-
-class _CategoryListViewState extends State
- with TickerProviderStateMixin {
- AnimationController animationController;
-
- @override
- void initState() {
- animationController = AnimationController(
- duration: const Duration(milliseconds: 2000), vsync: this);
- super.initState();
- }
-
- Future getData() async {
- await Future.delayed(const Duration(milliseconds: 50));
- return true;
- }
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.only(top: 16, bottom: 16),
- child: Container(
- height: 134,
- width: double.infinity,
- child: FutureBuilder(
- future: getData(),
- builder: (BuildContext context, AsyncSnapshot snapshot) {
- if (!snapshot.hasData) {
- return const SizedBox();
- } else {
- return ListView.builder(
- padding: const EdgeInsets.only(
- top: 0, bottom: 0, right: 16, left: 16),
- itemCount: Category.categoryList.length,
- scrollDirection: Axis.horizontal,
- itemBuilder: (BuildContext context, int index) {
- final int count = Category.categoryList.length > 10
- ? 10
- : Category.categoryList.length;
- final Animation animation =
- Tween(begin: 0.0, end: 1.0).animate(
- CurvedAnimation(
- parent: animationController,
- curve: Interval((1 / count) * index, 1.0,
- curve: Curves.fastOutSlowIn)));
- animationController.forward();
-
- return CategoryView(
- category: Category.categoryList[index],
- animation: animation,
- animationController: animationController,
- callback: () {
- widget.callBack();
- },
- );
- },
- );
- }
- },
- ),
- ),
- );
- }
-}
-
-class CategoryView extends StatelessWidget {
- const CategoryView(
- {Key key,
- this.category,
- this.animationController,
- this.animation,
- this.callback})
- : super(key: key);
-
- final VoidCallback callback;
- final Category category;
- final AnimationController animationController;
- final Animation animation;
-
- @override
- Widget build(BuildContext context) {
- return AnimatedBuilder(
- animation: animationController,
- builder: (BuildContext context, Widget child) {
- return FadeTransition(
- opacity: animation,
- child: Transform(
- transform: Matrix4.translationValues(
- 100 * (1.0 - animation.value), 0.0, 0.0),
- child: InkWell(
- splashColor: Colors.transparent,
- onTap: () {
- callback();
- },
- child: SizedBox(
- width: 280,
- child: Stack(
- children: [
- Container(
- child: Row(
- children: [
- const SizedBox(
- width: 48,
- ),
- Expanded(
- child: Container(
- decoration: BoxDecoration(
- color: HexColor('#F8FAFB'),
- borderRadius: const BorderRadius.all(
- Radius.circular(16.0)),
- ),
- child: Row(
- children: [
- const SizedBox(
- width: 48 + 24.0,
- ),
- Expanded(
- child: Container(
- child: Column(
- children: [
- Padding(
- padding:
- const EdgeInsets.only(top: 16),
- child: Text(
- category.title,
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 16,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme
- .darkerText,
- ),
- ),
- ),
- const Expanded(
- child: SizedBox(),
- ),
- Padding(
- padding: const EdgeInsets.only(
- right: 16, bottom: 8),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment
- .spaceBetween,
- crossAxisAlignment:
- CrossAxisAlignment.center,
- children: [
- Text(
- '${category.lessonCount} lesson',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 12,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme
- .grey,
- ),
- ),
- Container(
- child: Row(
- children: [
- Text(
- '${category.rating}',
- textAlign:
- TextAlign.left,
- style: TextStyle(
- fontWeight:
- FontWeight.w200,
- fontSize: 18,
- letterSpacing: 0.27,
- color:
- DesignCourseAppTheme
- .grey,
- ),
- ),
- Icon(
- Icons.star,
- color:
- DesignCourseAppTheme
- .nearlyBlue,
- size: 20,
- ),
- ],
- ),
- )
- ],
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(
- bottom: 16, right: 16),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment
- .spaceBetween,
- crossAxisAlignment:
- CrossAxisAlignment.start,
- children: [
- Text(
- '\$${category.money}',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 18,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme
- .nearlyBlue,
- ),
- ),
- Container(
- decoration: BoxDecoration(
- color: DesignCourseAppTheme
- .nearlyBlue,
- borderRadius:
- const BorderRadius.all(
- Radius.circular(
- 8.0)),
- ),
- child: Padding(
- padding:
- const EdgeInsets.all(
- 4.0),
- child: Icon(
- Icons.add,
- color:
- DesignCourseAppTheme
- .nearlyWhite,
- ),
- ),
- )
- ],
- ),
- ),
- ],
- ),
- ),
- ),
- ],
- ),
- ),
- )
- ],
- ),
- ),
- Container(
- child: Padding(
- padding: const EdgeInsets.only(
- top: 24, bottom: 24, left: 16),
- child: Row(
- children: [
- ClipRRect(
- borderRadius:
- const BorderRadius.all(Radius.circular(16.0)),
- child: AspectRatio(
- aspectRatio: 1.0,
- child: Image.asset(category.imagePath)),
- )
- ],
- ),
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- );
- },
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/design_course/course_info_screen.dart b/best_flutter_ui_templates/lib/design_course/course_info_screen.dart
deleted file mode 100644
index 25f702ac..00000000
--- a/best_flutter_ui_templates/lib/design_course/course_info_screen.dart
+++ /dev/null
@@ -1,364 +0,0 @@
-import 'package:flutter/material.dart';
-import 'design_course_app_theme.dart';
-
-class CourseInfoScreen extends StatefulWidget {
- @override
- _CourseInfoScreenState createState() => _CourseInfoScreenState();
-}
-
-class _CourseInfoScreenState extends State
- with TickerProviderStateMixin {
- final double infoHeight = 364.0;
- AnimationController animationController;
- Animation animation;
- double opacity1 = 0.0;
- double opacity2 = 0.0;
- double opacity3 = 0.0;
- @override
- void initState() {
- animationController = AnimationController(
- duration: const Duration(milliseconds: 1000), vsync: this);
- animation = Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
- parent: animationController,
- curve: Interval(0, 1.0, curve: Curves.fastOutSlowIn)));
- setData();
- super.initState();
- }
-
- Future setData() async {
- animationController.forward();
- await Future.delayed(const Duration(milliseconds: 200));
- setState(() {
- opacity1 = 1.0;
- });
- await Future.delayed(const Duration(milliseconds: 200));
- setState(() {
- opacity2 = 1.0;
- });
- await Future.delayed(const Duration(milliseconds: 200));
- setState(() {
- opacity3 = 1.0;
- });
- }
-
- @override
- Widget build(BuildContext context) {
- final double tempHeight = MediaQuery.of(context).size.height -
- (MediaQuery.of(context).size.width / 1.2) +
- 24.0;
- return Container(
- color: DesignCourseAppTheme.nearlyWhite,
- child: Scaffold(
- backgroundColor: Colors.transparent,
- body: Stack(
- children: [
- Column(
- children: [
- AspectRatio(
- aspectRatio: 1.2,
- child: Image.asset('assets/design_course/webInterFace.png'),
- ),
- ],
- ),
- Positioned(
- top: (MediaQuery.of(context).size.width / 1.2) - 24.0,
- bottom: 0,
- left: 0,
- right: 0,
- child: Container(
- decoration: BoxDecoration(
- color: DesignCourseAppTheme.nearlyWhite,
- borderRadius: const BorderRadius.only(
- topLeft: Radius.circular(32.0),
- topRight: Radius.circular(32.0)),
- boxShadow: [
- BoxShadow(
- color: DesignCourseAppTheme.grey.withOpacity(0.2),
- offset: const Offset(1.1, 1.1),
- blurRadius: 10.0),
- ],
- ),
- child: Padding(
- padding: const EdgeInsets.only(left: 8, right: 8),
- child: SingleChildScrollView(
- child: Container(
- constraints: BoxConstraints(
- minHeight: infoHeight,
- maxHeight: tempHeight > infoHeight
- ? tempHeight
- : infoHeight),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- top: 32.0, left: 18, right: 16),
- child: Text(
- 'Web Design\nCourse',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 22,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.darkerText,
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(
- left: 16, right: 16, bottom: 8, top: 16),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Text(
- '\$28.99',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 22,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.nearlyBlue,
- ),
- ),
- Container(
- child: Row(
- children: [
- Text(
- '4.3',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 22,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.grey,
- ),
- ),
- Icon(
- Icons.star,
- color: DesignCourseAppTheme.nearlyBlue,
- size: 24,
- ),
- ],
- ),
- )
- ],
- ),
- ),
- AnimatedOpacity(
- duration: const Duration(milliseconds: 500),
- opacity: opacity1,
- child: Padding(
- padding: const EdgeInsets.all(8),
- child: Row(
- children: [
- getTimeBoxUI('24', 'Classe'),
- getTimeBoxUI('2hours', 'Time'),
- getTimeBoxUI('24', 'Seat'),
- ],
- ),
- ),
- ),
- Expanded(
- child: AnimatedOpacity(
- duration: const Duration(milliseconds: 500),
- opacity: opacity2,
- child: Padding(
- padding: const EdgeInsets.only(
- left: 16, right: 16, top: 8, bottom: 8),
- child: Text(
- 'Lorem ipsum is simply dummy text of printing & typesetting industry, Lorem ipsum is simply dummy text of printing & typesetting industry.',
- textAlign: TextAlign.justify,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 14,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.grey,
- ),
- maxLines: 3,
- overflow: TextOverflow.ellipsis,
- ),
- ),
- ),
- ),
- AnimatedOpacity(
- duration: const Duration(milliseconds: 500),
- opacity: opacity3,
- child: Padding(
- padding: const EdgeInsets.only(
- left: 16, bottom: 16, right: 16),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Container(
- width: 48,
- height: 48,
- child: Container(
- decoration: BoxDecoration(
- color: DesignCourseAppTheme.nearlyWhite,
- borderRadius: const BorderRadius.all(
- Radius.circular(16.0),
- ),
- border: Border.all(
- color: DesignCourseAppTheme.grey
- .withOpacity(0.2)),
- ),
- child: Icon(
- Icons.add,
- color: DesignCourseAppTheme.nearlyBlue,
- size: 28,
- ),
- ),
- ),
- const SizedBox(
- width: 16,
- ),
- Expanded(
- child: Container(
- height: 48,
- decoration: BoxDecoration(
- color: DesignCourseAppTheme.nearlyBlue,
- borderRadius: const BorderRadius.all(
- Radius.circular(16.0),
- ),
- boxShadow: [
- BoxShadow(
- color: DesignCourseAppTheme
- .nearlyBlue
- .withOpacity(0.5),
- offset: const Offset(1.1, 1.1),
- blurRadius: 10.0),
- ],
- ),
- child: Center(
- child: Text(
- 'Join Course',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 18,
- letterSpacing: 0.0,
- color: DesignCourseAppTheme
- .nearlyWhite,
- ),
- ),
- ),
- ),
- )
- ],
- ),
- ),
- ),
- SizedBox(
- height: MediaQuery.of(context).padding.bottom,
- )
- ],
- ),
- ),
- ),
- ),
- ),
- ),
- Positioned(
- top: (MediaQuery.of(context).size.width / 1.2) - 24.0 - 35,
- right: 35,
- child: ScaleTransition(
- alignment: Alignment.center,
- scale: CurvedAnimation(
- parent: animationController, curve: Curves.fastOutSlowIn),
- child: Card(
- color: DesignCourseAppTheme.nearlyBlue,
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(50.0)),
- elevation: 10.0,
- child: Container(
- width: 60,
- height: 60,
- child: Center(
- child: Icon(
- Icons.favorite,
- color: DesignCourseAppTheme.nearlyWhite,
- size: 30,
- ),
- ),
- ),
- ),
- ),
- ),
- Padding(
- padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
- child: SizedBox(
- width: AppBar().preferredSize.height,
- height: AppBar().preferredSize.height,
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius:
- BorderRadius.circular(AppBar().preferredSize.height),
- child: Icon(
- Icons.arrow_back_ios,
- color: DesignCourseAppTheme.nearlyBlack,
- ),
- onTap: () {
- Navigator.pop(context);
- },
- ),
- ),
- ),
- )
- ],
- ),
- ),
- );
- }
-
- Widget getTimeBoxUI(String text1, String txt2) {
- return Padding(
- padding: const EdgeInsets.all(8.0),
- child: Container(
- decoration: BoxDecoration(
- color: DesignCourseAppTheme.nearlyWhite,
- borderRadius: const BorderRadius.all(Radius.circular(16.0)),
- boxShadow: [
- BoxShadow(
- color: DesignCourseAppTheme.grey.withOpacity(0.2),
- offset: const Offset(1.1, 1.1),
- blurRadius: 8.0),
- ],
- ),
- child: Padding(
- padding: const EdgeInsets.only(
- left: 18.0, right: 18.0, top: 12.0, bottom: 12.0),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Text(
- text1,
- textAlign: TextAlign.center,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 14,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.nearlyBlue,
- ),
- ),
- Text(
- txt2,
- textAlign: TextAlign.center,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 14,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme.grey,
- ),
- ),
- ],
- ),
- ),
- ),
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/design_course/popular_course_list_view.dart b/best_flutter_ui_templates/lib/design_course/popular_course_list_view.dart
deleted file mode 100644
index 8c8ecb53..00000000
--- a/best_flutter_ui_templates/lib/design_course/popular_course_list_view.dart
+++ /dev/null
@@ -1,253 +0,0 @@
-import 'package:best_flutter_ui_templates/design_course/design_course_app_theme.dart';
-import 'package:best_flutter_ui_templates/design_course/models/category.dart';
-import 'package:best_flutter_ui_templates/main.dart';
-import 'package:flutter/material.dart';
-
-class PopularCourseListView extends StatefulWidget {
- const PopularCourseListView({Key key, this.callBack}) : super(key: key);
-
- final Function callBack;
- @override
- _PopularCourseListViewState createState() => _PopularCourseListViewState();
-}
-
-class _PopularCourseListViewState extends State
- with TickerProviderStateMixin {
- AnimationController animationController;
- @override
- void initState() {
- animationController = AnimationController(
- duration: const Duration(milliseconds: 2000), vsync: this);
- super.initState();
- }
-
- Future getData() async {
- await Future.delayed(const Duration(milliseconds: 200));
- return true;
- }
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.only(top: 8),
- child: FutureBuilder(
- future: getData(),
- builder: (BuildContext context, AsyncSnapshot snapshot) {
- if (!snapshot.hasData) {
- return const SizedBox();
- } else {
- return GridView(
- padding: const EdgeInsets.all(8),
- physics: const BouncingScrollPhysics(),
- scrollDirection: Axis.vertical,
- children: List.generate(
- Category.popularCourseList.length,
- (int index) {
- final int count = Category.popularCourseList.length;
- final Animation animation =
- Tween(begin: 0.0, end: 1.0).animate(
- CurvedAnimation(
- parent: animationController,
- curve: Interval((1 / count) * index, 1.0,
- curve: Curves.fastOutSlowIn),
- ),
- );
- animationController.forward();
- return CategoryView(
- callback: () {
- widget.callBack();
- },
- category: Category.popularCourseList[index],
- animation: animation,
- animationController: animationController,
- );
- },
- ),
- gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
- crossAxisCount: 2,
- mainAxisSpacing: 32.0,
- crossAxisSpacing: 32.0,
- childAspectRatio: 0.8,
- ),
- );
- }
- },
- ),
- );
- }
-}
-
-class CategoryView extends StatelessWidget {
- const CategoryView(
- {Key key,
- this.category,
- this.animationController,
- this.animation,
- this.callback})
- : super(key: key);
-
- final VoidCallback callback;
- final Category category;
- final AnimationController animationController;
- final Animation animation;
-
- @override
- Widget build(BuildContext context) {
- return AnimatedBuilder(
- animation: animationController,
- builder: (BuildContext context, Widget child) {
- return FadeTransition(
- opacity: animation,
- child: Transform(
- transform: Matrix4.translationValues(
- 0.0, 50 * (1.0 - animation.value), 0.0),
- child: InkWell(
- splashColor: Colors.transparent,
- onTap: () {
- callback();
- },
- child: SizedBox(
- height: 280,
- child: Stack(
- alignment: AlignmentDirectional.bottomCenter,
- children: [
- Container(
- child: Column(
- children: [
- Expanded(
- child: Container(
- decoration: BoxDecoration(
- color: HexColor('#F8FAFB'),
- borderRadius: const BorderRadius.all(
- Radius.circular(16.0)),
- // border: new Border.all(
- // color: DesignCourseAppTheme.notWhite),
- ),
- child: Column(
- children: [
- Expanded(
- child: Container(
- child: Column(
- children: [
- Padding(
- padding: const EdgeInsets.only(
- top: 16, left: 16, right: 16),
- child: Text(
- category.title,
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w600,
- fontSize: 16,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme
- .darkerText,
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(
- top: 8,
- left: 16,
- right: 16,
- bottom: 8),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment
- .spaceBetween,
- crossAxisAlignment:
- CrossAxisAlignment.center,
- children: [
- Text(
- '${category.lessonCount} lesson',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w200,
- fontSize: 12,
- letterSpacing: 0.27,
- color: DesignCourseAppTheme
- .grey,
- ),
- ),
- Container(
- child: Row(
- children: [
- Text(
- '${category.rating}',
- textAlign:
- TextAlign.left,
- style: TextStyle(
- fontWeight:
- FontWeight.w200,
- fontSize: 18,
- letterSpacing: 0.27,
- color:
- DesignCourseAppTheme
- .grey,
- ),
- ),
- Icon(
- Icons.star,
- color:
- DesignCourseAppTheme
- .nearlyBlue,
- size: 20,
- ),
- ],
- ),
- )
- ],
- ),
- ),
- ],
- ),
- ),
- ),
- const SizedBox(
- width: 48,
- ),
- ],
- ),
- ),
- ),
- const SizedBox(
- height: 48,
- ),
- ],
- ),
- ),
- Container(
- child: Padding(
- padding:
- const EdgeInsets.only(top: 24, right: 16, left: 16),
- child: Container(
- decoration: BoxDecoration(
- borderRadius:
- const BorderRadius.all(Radius.circular(16.0)),
- boxShadow: [
- BoxShadow(
- color: DesignCourseAppTheme.grey
- .withOpacity(0.2),
- offset: const Offset(0.0, 0.0),
- blurRadius: 6.0),
- ],
- ),
- child: ClipRRect(
- borderRadius:
- const BorderRadius.all(Radius.circular(16.0)),
- child: AspectRatio(
- aspectRatio: 1.28,
- child: Image.asset(category.imagePath)),
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- );
- },
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/feedback_screen.dart b/best_flutter_ui_templates/lib/feedback_screen.dart
deleted file mode 100644
index 5c310def..00000000
--- a/best_flutter_ui_templates/lib/feedback_screen.dart
+++ /dev/null
@@ -1,147 +0,0 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:flutter/material.dart';
-
-class FeedbackScreen extends StatefulWidget {
- @override
- _FeedbackScreenState createState() => _FeedbackScreenState();
-}
-
-class _FeedbackScreenState extends State {
- @override
- void initState() {
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: AppTheme.nearlyWhite,
- child: SafeArea(
- top: false,
- child: Scaffold(
- backgroundColor: AppTheme.nearlyWhite,
- body: SingleChildScrollView(
- child: SizedBox(
- height: MediaQuery.of(context).size.height,
- child: Column(
- children: [
- Container(
- padding: EdgeInsets.only(
- top: MediaQuery.of(context).padding.top,
- left: 16,
- right: 16),
- child: Image.asset('assets/images/feedbackImage.png'),
- ),
- Container(
- padding: const EdgeInsets.only(top: 8),
- child: Text(
- 'Your FeedBack',
- style: TextStyle(
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- Container(
- padding: const EdgeInsets.only(top: 16),
- child: const Text(
- 'Give your best time for this moment.',
- textAlign: TextAlign.center,
- style: TextStyle(
- fontSize: 16,
- ),
- ),
- ),
- _buildComposer(),
- Padding(
- padding: const EdgeInsets.only(top: 16),
- child: Center(
- child: Container(
- width: 120,
- height: 40,
- decoration: BoxDecoration(
- color: Colors.blue,
- borderRadius:
- const BorderRadius.all(Radius.circular(4.0)),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.6),
- offset: const Offset(4, 4),
- blurRadius: 8.0),
- ],
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- onTap: () {
- FocusScope.of(context).requestFocus(FocusNode());
- },
- child: Center(
- child: Padding(
- padding: const EdgeInsets.all(4.0),
- child: Text(
- 'Send',
- style: TextStyle(
- fontWeight: FontWeight.w500,
- color: Colors.white,
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- )
- ],
- ),
- ),
- ),
- ),
- ),
- );
- }
-
- Widget _buildComposer() {
- return Padding(
- padding: const EdgeInsets.only(top: 16, left: 32, right: 32),
- child: Container(
- decoration: BoxDecoration(
- color: AppTheme.white,
- borderRadius: BorderRadius.circular(8),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.8),
- offset: const Offset(4, 4),
- blurRadius: 8),
- ],
- ),
- child: ClipRRect(
- borderRadius: BorderRadius.circular(25),
- child: Container(
- padding: const EdgeInsets.all(4.0),
- constraints: const BoxConstraints(minHeight: 80, maxHeight: 160),
- color: AppTheme.white,
- child: SingleChildScrollView(
- padding:
- const EdgeInsets.only(left: 10, right: 10, top: 0, bottom: 0),
- child: TextField(
- maxLines: null,
- onChanged: (String txt) {},
- style: TextStyle(
- fontFamily: AppTheme.fontName,
- fontSize: 16,
- color: AppTheme.dark_grey,
- ),
- cursorColor: Colors.blue,
- decoration: InputDecoration(
- border: InputBorder.none,
- hintText: 'Enter your feedback...'),
- ),
- ),
- ),
- ),
- ),
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/fitness_app/fitness_app_home_screen.dart b/best_flutter_ui_templates/lib/fitness_app/fitness_app_home_screen.dart
deleted file mode 100644
index b9a8c9a2..00000000
--- a/best_flutter_ui_templates/lib/fitness_app/fitness_app_home_screen.dart
+++ /dev/null
@@ -1,108 +0,0 @@
-import 'package:best_flutter_ui_templates/fitness_app/models/tabIcon_data.dart';
-import 'package:best_flutter_ui_templates/fitness_app/traning/training_screen.dart';
-import 'package:flutter/material.dart';
-import 'bottom_navigation_view/bottom_bar_view.dart';
-import 'fintness_app_theme.dart';
-import 'my_diary/my_diary_screen.dart';
-
-class FitnessAppHomeScreen extends StatefulWidget {
- @override
- _FitnessAppHomeScreenState createState() => _FitnessAppHomeScreenState();
-}
-
-class _FitnessAppHomeScreenState extends State
- with TickerProviderStateMixin {
- AnimationController animationController;
-
- List tabIconsList = TabIconData.tabIconsList;
-
- Widget tabBody = Container(
- color: FintnessAppTheme.background,
- );
-
- @override
- void initState() {
- tabIconsList.forEach((TabIconData tab) {
- tab.isSelected = false;
- });
- tabIconsList[0].isSelected = true;
-
- animationController = AnimationController(
- duration: const Duration(milliseconds: 600), vsync: this);
- tabBody = MyDiaryScreen(animationController: animationController);
- super.initState();
- }
-
- @override
- void dispose() {
- animationController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: FintnessAppTheme.background,
- child: Scaffold(
- backgroundColor: Colors.transparent,
- body: FutureBuilder(
- future: getData(),
- builder: (BuildContext context, AsyncSnapshot snapshot) {
- if (!snapshot.hasData) {
- return const SizedBox();
- } else {
- return Stack(
- children: [
- tabBody,
- bottomBar(),
- ],
- );
- }
- },
- ),
- ),
- );
- }
-
- Future getData() async {
- await Future.delayed(const Duration(milliseconds: 200));
- return true;
- }
-
- Widget bottomBar() {
- return Column(
- children: [
- const Expanded(
- child: SizedBox(),
- ),
- BottomBarView(
- tabIconsList: tabIconsList,
- addClick: () {},
- changeIndex: (int index) {
- if (index == 0 || index == 2) {
- animationController.reverse().then((data) {
- if (!mounted) {
- return;
- }
- setState(() {
- tabBody =
- MyDiaryScreen(animationController: animationController);
- });
- });
- } else if (index == 1 || index == 3) {
- animationController.reverse().then((data) {
- if (!mounted) {
- return;
- }
- setState(() {
- tabBody =
- TrainingScreen(animationController: animationController);
- });
- });
- }
- },
- ),
- ],
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/help_screen.dart b/best_flutter_ui_templates/lib/help_screen.dart
deleted file mode 100644
index ebff259b..00000000
--- a/best_flutter_ui_templates/lib/help_screen.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:flutter/material.dart';
-
-class HelpScreen extends StatefulWidget {
- @override
- _HelpScreenState createState() => _HelpScreenState();
-}
-
-class _HelpScreenState extends State {
- @override
- void initState() {
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: AppTheme.nearlyWhite,
- child: SafeArea(
- top: false,
- child: Scaffold(
- backgroundColor: AppTheme.nearlyWhite,
- body: Column(
- children: [
- Container(
- padding: EdgeInsets.only(
- top: MediaQuery.of(context).padding.top,
- left: 16,
- right: 16),
- child: Image.asset('assets/images/helpImage.png'),
- ),
- Container(
- padding: const EdgeInsets.only(top: 8),
- child: Text(
- 'How can we help you?',
- style: TextStyle(
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- Container(
- padding: const EdgeInsets.only(top: 16),
- child: const Text(
- 'It looks like you are experiencing problems\nwith our sign up process. We are here to\nhelp so please get in touch with us',
- textAlign: TextAlign.center,
- style: TextStyle(
- fontSize: 16,
- ),
- ),
- ),
- Expanded(
- child: Padding(
- padding: const EdgeInsets.all(8.0),
- child: Center(
- child: Container(
- width: 140,
- height: 40,
- decoration: BoxDecoration(
- color: Colors.blue,
- borderRadius:
- const BorderRadius.all(Radius.circular(4.0)),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.6),
- offset: const Offset(4, 4),
- blurRadius: 8.0),
- ],
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- onTap: () {},
- child: Center(
- child: Padding(
- padding: const EdgeInsets.all(4.0),
- child: Text(
- 'Chat with Us',
- style: TextStyle(
- fontWeight: FontWeight.w500,
- color: Colors.white,
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- )
- ],
- ),
- ),
- ),
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/home_screen.dart b/best_flutter_ui_templates/lib/home_screen.dart
deleted file mode 100644
index 8e0a5a96..00000000
--- a/best_flutter_ui_templates/lib/home_screen.dart
+++ /dev/null
@@ -1,228 +0,0 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:flutter/material.dart';
-import 'model/homelist.dart';
-
-class MyHomePage extends StatefulWidget {
- const MyHomePage({Key key}) : super(key: key);
-
- @override
- _MyHomePageState createState() => _MyHomePageState();
-}
-
-class _MyHomePageState extends State with TickerProviderStateMixin {
- List homeList = HomeList.homeList;
- AnimationController animationController;
- bool multiple = true;
-
- @override
- void initState() {
- animationController = AnimationController(
- duration: const Duration(milliseconds: 2000), vsync: this);
- super.initState();
- }
-
- Future getData() async {
- await Future.delayed(const Duration(milliseconds: 0));
- return true;
- }
-
- @override
- void dispose() {
- animationController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: AppTheme.white,
- body: FutureBuilder(
- future: getData(),
- builder: (BuildContext context, AsyncSnapshot snapshot) {
- if (!snapshot.hasData) {
- return const SizedBox();
- } else {
- return Padding(
- padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- appBar(),
- Expanded(
- child: FutureBuilder(
- future: getData(),
- builder:
- (BuildContext context, AsyncSnapshot snapshot) {
- if (!snapshot.hasData) {
- return const SizedBox();
- } else {
- return GridView(
- padding: const EdgeInsets.only(
- top: 0, left: 12, right: 12),
- physics: const BouncingScrollPhysics(),
- scrollDirection: Axis.vertical,
- children: List.generate(
- homeList.length,
- (int index) {
- final int count = homeList.length;
- final Animation animation =
- Tween(begin: 0.0, end: 1.0).animate(
- CurvedAnimation(
- parent: animationController,
- curve: Interval((1 / count) * index, 1.0,
- curve: Curves.fastOutSlowIn),
- ),
- );
- animationController.forward();
- return HomeListView(
- animation: animation,
- animationController: animationController,
- listData: homeList[index],
- callBack: () {
- Navigator.push(
- context,
- MaterialPageRoute(
- builder: (BuildContext context) =>
- homeList[index].navigateScreen,
- ),
- );
- },
- );
- },
- ),
- gridDelegate:
- SliverGridDelegateWithFixedCrossAxisCount(
- crossAxisCount: multiple ? 2 : 1,
- mainAxisSpacing: 12.0,
- crossAxisSpacing: 12.0,
- childAspectRatio: 1.5,
- ),
- );
- }
- },
- ),
- ),
- ],
- ),
- );
- }
- },
- ),
- );
- }
-
- Widget appBar() {
- return SizedBox(
- height: AppBar().preferredSize.height,
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Padding(
- padding: const EdgeInsets.only(top: 8, left: 8),
- child: Container(
- width: AppBar().preferredSize.height - 8,
- height: AppBar().preferredSize.height - 8,
- ),
- ),
- Expanded(
- child: Center(
- child: Padding(
- padding: const EdgeInsets.only(top: 4),
- child: Text(
- 'Flutter UI',
- style: TextStyle(
- fontSize: 22,
- color: AppTheme.darkText,
- fontWeight: FontWeight.w700,
- ),
- ),
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(top: 8, right: 8),
- child: Container(
- width: AppBar().preferredSize.height - 8,
- height: AppBar().preferredSize.height - 8,
- color: Colors.white,
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius:
- BorderRadius.circular(AppBar().preferredSize.height),
- child: Icon(
- multiple ? Icons.dashboard : Icons.view_agenda,
- color: AppTheme.dark_grey,
- ),
- onTap: () {
- setState(() {
- multiple = !multiple;
- });
- },
- ),
- ),
- ),
- ),
- ],
- ),
- );
- }
-}
-
-class HomeListView extends StatelessWidget {
- const HomeListView(
- {Key key,
- this.listData,
- this.callBack,
- this.animationController,
- this.animation})
- : super(key: key);
-
- final HomeList listData;
- final VoidCallback callBack;
- final AnimationController animationController;
- final Animation animation;
-
- @override
- Widget build(BuildContext context) {
- return AnimatedBuilder(
- animation: animationController,
- builder: (BuildContext context, Widget child) {
- return FadeTransition(
- opacity: animation,
- child: Transform(
- transform: Matrix4.translationValues(
- 0.0, 50 * (1.0 - animation.value), 0.0),
- child: AspectRatio(
- aspectRatio: 1.5,
- child: ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(4.0)),
- child: Stack(
- alignment: AlignmentDirectional.center,
- children: [
- Image.asset(
- listData.imagePath,
- fit: BoxFit.cover,
- ),
- Material(
- color: Colors.transparent,
- child: InkWell(
- splashColor: Colors.grey.withOpacity(0.2),
- borderRadius:
- const BorderRadius.all(Radius.circular(4.0)),
- onTap: () {
- callBack();
- },
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- );
- },
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/hotel_booking/calendar_popup_view.dart b/best_flutter_ui_templates/lib/hotel_booking/calendar_popup_view.dart
deleted file mode 100644
index c8922f42..00000000
--- a/best_flutter_ui_templates/lib/hotel_booking/calendar_popup_view.dart
+++ /dev/null
@@ -1,249 +0,0 @@
-import 'dart:ui';
-
-import 'package:best_flutter_ui_templates/hotel_booking/hotel_app_theme.dart';
-import 'package:flutter/material.dart';
-import 'package:intl/intl.dart';
-
-import 'custom_calendar.dart';
-
-class CalendarPopupView extends StatefulWidget {
- const CalendarPopupView(
- {Key key,
- this.initialStartDate,
- this.initialEndDate,
- this.onApplyClick,
- this.onCancelClick,
- this.barrierDismissible = true,
- this.minimumDate,
- this.maximumDate})
- : super(key: key);
-
- final DateTime minimumDate;
- final DateTime maximumDate;
- final bool barrierDismissible;
- final DateTime initialStartDate;
- final DateTime initialEndDate;
- final Function(DateTime, DateTime) onApplyClick;
-
- final Function onCancelClick;
- @override
- _CalendarPopupViewState createState() => _CalendarPopupViewState();
-}
-
-class _CalendarPopupViewState extends State
- with TickerProviderStateMixin {
- AnimationController animationController;
- DateTime startDate;
- DateTime endDate;
-
- @override
- void initState() {
- animationController = AnimationController(
- duration: const Duration(milliseconds: 400), vsync: this);
- if (widget.initialStartDate != null) {
- startDate = widget.initialStartDate;
- }
- if (widget.initialEndDate != null) {
- endDate = widget.initialEndDate;
- }
- animationController.forward();
- super.initState();
- }
-
- @override
- void dispose() {
- animationController.dispose();
- super.dispose();
- }
-
- @override
- Widget build(BuildContext context) {
- return Center(
- child: Scaffold(
- backgroundColor: Colors.transparent,
- body: AnimatedBuilder(
- animation: animationController,
- builder: (BuildContext context, Widget child) {
- return AnimatedOpacity(
- duration: const Duration(milliseconds: 100),
- opacity: animationController.value,
- child: InkWell(
- splashColor: Colors.transparent,
- focusColor: Colors.transparent,
- highlightColor: Colors.transparent,
- hoverColor: Colors.transparent,
- onTap: () {
- if (widget.barrierDismissible) {
- Navigator.pop(context);
- }
- },
- child: Center(
- child: Padding(
- padding: const EdgeInsets.all(24.0),
- child: Container(
- decoration: BoxDecoration(
- color: HotelAppTheme.buildLightTheme().backgroundColor,
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.2),
- offset: const Offset(4, 4),
- blurRadius: 8.0),
- ],
- ),
- child: InkWell(
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- onTap: () {},
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisSize: MainAxisSize.min,
- children: [
- Row(
- children: [
- Expanded(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment:
- CrossAxisAlignment.center,
- children: [
- Text(
- 'From',
- textAlign: TextAlign.left,
- style: TextStyle(
- fontWeight: FontWeight.w100,
- fontSize: 16,
- color:
- Colors.grey.withOpacity(0.8)),
- ),
- const SizedBox(
- height: 4,
- ),
- Text(
- startDate != null
- ? DateFormat('EEE, dd MMM')
- .format(startDate)
- : '--/-- ',
- style: TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 16,
- ),
- ),
- ],
- ),
- ),
- Container(
- height: 74,
- width: 1,
- color: HotelAppTheme.buildLightTheme()
- .dividerColor,
- ),
- Expanded(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment:
- CrossAxisAlignment.center,
- children: [
- Text(
- 'To',
- style: TextStyle(
- fontWeight: FontWeight.w100,
- fontSize: 16,
- color:
- Colors.grey.withOpacity(0.8)),
- ),
- const SizedBox(
- height: 4,
- ),
- Text(
- endDate != null
- ? DateFormat('EEE, dd MMM')
- .format(endDate)
- : '--/-- ',
- style: TextStyle(
- fontWeight: FontWeight.bold,
- fontSize: 16),
- ),
- ],
- ),
- )
- ],
- ),
- const Divider(
- height: 1,
- ),
- CustomCalendarView(
- minimumDate: widget.minimumDate,
- maximumDate: widget.maximumDate,
- initialEndDate: widget.initialEndDate,
- initialStartDate: widget.initialStartDate,
- startEndDateChange: (DateTime startDateData,
- DateTime endDateData) {
- setState(() {
- startDate = startDateData;
- endDate = endDateData;
- });
- },
- ),
- Padding(
- padding: const EdgeInsets.only(
- left: 16, right: 16, bottom: 16, top: 8),
- child: Container(
- height: 48,
- decoration: BoxDecoration(
- color: HotelAppTheme.buildLightTheme()
- .primaryColor,
- borderRadius: const BorderRadius.all(
- Radius.circular(24.0)),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.6),
- blurRadius: 8,
- offset: const Offset(4, 4),
- ),
- ],
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius: const BorderRadius.all(
- Radius.circular(24.0)),
- highlightColor: Colors.transparent,
- onTap: () {
- try {
- // animationController.reverse().then((f) {
-
- // });
- widget.onApplyClick(startDate, endDate);
- Navigator.pop(context);
- } catch (_) {}
- },
- child: Center(
- child: Text(
- 'Apply',
- style: TextStyle(
- fontWeight: FontWeight.w500,
- fontSize: 18,
- color: Colors.white),
- ),
- ),
- ),
- ),
- ),
- )
- ],
- ),
- ),
- ),
- ),
- ),
- ),
- );
- },
- ),
- ),
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/hotel_booking/custom_calendar.dart b/best_flutter_ui_templates/lib/hotel_booking/custom_calendar.dart
deleted file mode 100644
index 6c2ac1ba..00000000
--- a/best_flutter_ui_templates/lib/hotel_booking/custom_calendar.dart
+++ /dev/null
@@ -1,455 +0,0 @@
-import 'package:best_flutter_ui_templates/hotel_booking/hotel_app_theme.dart';
-import 'package:flutter/material.dart';
-import 'package:intl/intl.dart';
-
-class CustomCalendarView extends StatefulWidget {
- const CustomCalendarView(
- {Key key,
- this.initialStartDate,
- this.initialEndDate,
- this.startEndDateChange,
- this.minimumDate,
- this.maximumDate})
- : super(key: key);
-
- final DateTime minimumDate;
- final DateTime maximumDate;
- final DateTime initialStartDate;
- final DateTime initialEndDate;
-
- final Function(DateTime, DateTime) startEndDateChange;
-
- @override
- _CustomCalendarViewState createState() => _CustomCalendarViewState();
-}
-
-class _CustomCalendarViewState extends State {
- List dateList = [];
- DateTime currentMonthDate = DateTime.now();
- DateTime startDate;
- DateTime endDate;
-
- @override
- void initState() {
- setListOfDate(currentMonthDate);
- if (widget.initialStartDate != null) {
- startDate = widget.initialStartDate;
- }
- if (widget.initialEndDate != null) {
- endDate = widget.initialEndDate;
- }
- super.initState();
- }
-
- @override
- void dispose() {
- super.dispose();
- }
-
- void setListOfDate(DateTime monthDate) {
- dateList.clear();
- final DateTime newDate = DateTime(monthDate.year, monthDate.month, 0);
- int previousMothDay = 0;
- if (newDate.weekday < 7) {
- previousMothDay = newDate.weekday;
- for (int i = 1; i <= previousMothDay; i++) {
- dateList.add(newDate.subtract(Duration(days: previousMothDay - i)));
- }
- }
- for (int i = 0; i < (42 - previousMothDay); i++) {
- dateList.add(newDate.add(Duration(days: i + 1)));
- }
- // if (dateList[dateList.length - 7].month != monthDate.month) {
- // dateList.removeRange(dateList.length - 7, dateList.length);
- // }
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- child: Column(
- children: [
- Padding(
- padding:
- const EdgeInsets.only(left: 8.0, right: 8.0, top: 4, bottom: 4),
- child: Row(
- children: [
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: Container(
- height: 38,
- width: 38,
- decoration: BoxDecoration(
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- border: Border.all(
- color: HotelAppTheme.buildLightTheme().dividerColor,
- ),
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- onTap: () {
- setState(() {
- currentMonthDate = DateTime(currentMonthDate.year,
- currentMonthDate.month, 0);
- setListOfDate(currentMonthDate);
- });
- },
- child: Icon(
- Icons.keyboard_arrow_left,
- color: Colors.grey,
- ),
- ),
- ),
- ),
- ),
- Expanded(
- child: Center(
- child: Text(
- DateFormat('MMMM, yyyy').format(currentMonthDate),
- style: TextStyle(
- fontWeight: FontWeight.w500,
- fontSize: 20,
- color: Colors.black),
- ),
- ),
- ),
- Padding(
- padding: const EdgeInsets.all(8.0),
- child: Container(
- height: 38,
- width: 38,
- decoration: BoxDecoration(
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- border: Border.all(
- color: HotelAppTheme.buildLightTheme().dividerColor,
- ),
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius:
- const BorderRadius.all(Radius.circular(24.0)),
- onTap: () {
- setState(() {
- currentMonthDate = DateTime(currentMonthDate.year,
- currentMonthDate.month + 2, 0);
- setListOfDate(currentMonthDate);
- });
- },
- child: Icon(
- Icons.keyboard_arrow_right,
- color: Colors.grey,
- ),
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(right: 8, left: 8, bottom: 8),
- child: Row(
- children: getDaysNameUI(),
- ),
- ),
- Padding(
- padding: const EdgeInsets.only(right: 8, left: 8),
- child: Column(
- children: getDaysNoUI(),
- ),
- ),
- ],
- ),
- );
- }
-
- List getDaysNameUI() {
- final List listUI = [];
- for (int i = 0; i < 7; i++) {
- listUI.add(
- Expanded(
- child: Center(
- child: Text(
- DateFormat('EEE').format(dateList[i]),
- style: TextStyle(
- fontSize: 16,
- fontWeight: FontWeight.w500,
- color: HotelAppTheme.buildLightTheme().primaryColor),
- ),
- ),
- ),
- );
- }
- return listUI;
- }
-
- List getDaysNoUI() {
- final List noList = [];
- int count = 0;
- for (int i = 0; i < dateList.length / 7; i++) {
- final List listUI = [];
- for (int i = 0; i < 7; i++) {
- final DateTime date = dateList[count];
- listUI.add(
- Expanded(
- child: AspectRatio(
- aspectRatio: 1.0,
- child: Container(
- child: Stack(
- children: [
- Padding(
- padding: const EdgeInsets.only(top: 3, bottom: 3),
- child: Material(
- color: Colors.transparent,
- child: Padding(
- padding: EdgeInsets.only(
- top: 2,
- bottom: 2,
- left: isStartDateRadius(date) ? 4 : 0,
- right: isEndDateRadius(date) ? 4 : 0),
- child: Container(
- decoration: BoxDecoration(
- color: startDate != null && endDate != null
- ? getIsItStartAndEndDate(date) ||
- getIsInRange(date)
- ? HotelAppTheme.buildLightTheme()
- .primaryColor
- .withOpacity(0.4)
- : Colors.transparent
- : Colors.transparent,
- borderRadius: BorderRadius.only(
- bottomLeft: isStartDateRadius(date)
- ? const Radius.circular(24.0)
- : const Radius.circular(0.0),
- topLeft: isStartDateRadius(date)
- ? const Radius.circular(24.0)
- : const Radius.circular(0.0),
- topRight: isEndDateRadius(date)
- ? const Radius.circular(24.0)
- : const Radius.circular(0.0),
- bottomRight: isEndDateRadius(date)
- ? const Radius.circular(24.0)
- : const Radius.circular(0.0),
- ),
- ),
- ),
- ),
- ),
- ),
- Material(
- color: Colors.transparent,
- child: InkWell(
- borderRadius:
- const BorderRadius.all(Radius.circular(32.0)),
- onTap: () {
- if (currentMonthDate.month == date.month) {
- if (widget.minimumDate != null &&
- widget.maximumDate != null) {
- final DateTime newminimumDate = DateTime(
- widget.minimumDate.year,
- widget.minimumDate.month,
- widget.minimumDate.day - 1);
- final DateTime newmaximumDate = DateTime(
- widget.maximumDate.year,
- widget.maximumDate.month,
- widget.maximumDate.day + 1);
- if (date.isAfter(newminimumDate) &&
- date.isBefore(newmaximumDate)) {
- onDateClick(date);
- }
- } else if (widget.minimumDate != null) {
- final DateTime newminimumDate = DateTime(
- widget.minimumDate.year,
- widget.minimumDate.month,
- widget.minimumDate.day - 1);
- if (date.isAfter(newminimumDate)) {
- onDateClick(date);
- }
- } else if (widget.maximumDate != null) {
- final DateTime newmaximumDate = DateTime(
- widget.maximumDate.year,
- widget.maximumDate.month,
- widget.maximumDate.day + 1);
- if (date.isBefore(newmaximumDate)) {
- onDateClick(date);
- }
- } else {
- onDateClick(date);
- }
- }
- },
- child: Padding(
- padding: const EdgeInsets.all(2),
- child: Container(
- decoration: BoxDecoration(
- color: getIsItStartAndEndDate(date)
- ? HotelAppTheme.buildLightTheme().primaryColor
- : Colors.transparent,
- borderRadius:
- const BorderRadius.all(Radius.circular(32.0)),
- border: Border.all(
- color: getIsItStartAndEndDate(date)
- ? Colors.white
- : Colors.transparent,
- width: 2,
- ),
- boxShadow: getIsItStartAndEndDate(date)
- ? [
- BoxShadow(
- color: Colors.grey.withOpacity(0.6),
- blurRadius: 4,
- offset: const Offset(0, 0)),
- ]
- : null,
- ),
- child: Center(
- child: Text(
- '${date.day}',
- style: TextStyle(
- color: getIsItStartAndEndDate(date)
- ? Colors.white
- : currentMonthDate.month == date.month
- ? Colors.black
- : Colors.grey.withOpacity(0.6),
- fontSize:
- MediaQuery.of(context).size.width > 360
- ? 18
- : 16,
- fontWeight: getIsItStartAndEndDate(date)
- ? FontWeight.bold
- : FontWeight.normal),
- ),
- ),
- ),
- ),
- ),
- ),
- Positioned(
- bottom: 9,
- right: 0,
- left: 0,
- child: Container(
- height: 6,
- width: 6,
- decoration: BoxDecoration(
- color: DateTime.now().day == date.day &&
- DateTime.now().month == date.month &&
- DateTime.now().year == date.year
- ? getIsInRange(date)
- ? Colors.white
- : HotelAppTheme.buildLightTheme()
- .primaryColor
- : Colors.transparent,
- shape: BoxShape.circle),
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- );
- count += 1;
- }
- noList.add(Row(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- mainAxisSize: MainAxisSize.min,
- children: listUI,
- ));
- }
- return noList;
- }
-
- bool getIsInRange(DateTime date) {
- if (startDate != null && endDate != null) {
- if (date.isAfter(startDate) && date.isBefore(endDate)) {
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
-
- bool getIsItStartAndEndDate(DateTime date) {
- if (startDate != null &&
- startDate.day == date.day &&
- startDate.month == date.month &&
- startDate.year == date.year) {
- return true;
- } else if (endDate != null &&
- endDate.day == date.day &&
- endDate.month == date.month &&
- endDate.year == date.year) {
- return true;
- } else {
- return false;
- }
- }
-
- bool isStartDateRadius(DateTime date) {
- if (startDate != null &&
- startDate.day == date.day &&
- startDate.month == date.month) {
- return true;
- } else if (date.weekday == 1) {
- return true;
- } else {
- return false;
- }
- }
-
- bool isEndDateRadius(DateTime date) {
- if (endDate != null &&
- endDate.day == date.day &&
- endDate.month == date.month) {
- return true;
- } else if (date.weekday == 7) {
- return true;
- } else {
- return false;
- }
- }
-
- void onDateClick(DateTime date) {
- if (startDate == null) {
- startDate = date;
- } else if (startDate != date && endDate == null) {
- endDate = date;
- } else if (startDate.day == date.day && startDate.month == date.month) {
- startDate = null;
- } else if (endDate.day == date.day && endDate.month == date.month) {
- endDate = null;
- }
- if (startDate == null && endDate != null) {
- startDate = endDate;
- endDate = null;
- }
- if (startDate != null && endDate != null) {
- if (!endDate.isAfter(startDate)) {
- final DateTime d = startDate;
- startDate = endDate;
- endDate = d;
- }
- if (date.isBefore(startDate)) {
- startDate = date;
- }
- if (date.isAfter(endDate)) {
- endDate = date;
- }
- }
- setState(() {
- try {
- widget.startEndDateChange(startDate, endDate);
- } catch (_) {}
- });
- }
-}
diff --git a/best_flutter_ui_templates/lib/hotel_booking/hotel_app_theme.dart b/best_flutter_ui_templates/lib/hotel_booking/hotel_app_theme.dart
deleted file mode 100644
index 1dedb546..00000000
--- a/best_flutter_ui_templates/lib/hotel_booking/hotel_app_theme.dart
+++ /dev/null
@@ -1,54 +0,0 @@
-import 'package:best_flutter_ui_templates/main.dart';
-import 'package:flutter/material.dart';
-
-class HotelAppTheme {
- static TextTheme _buildTextTheme(TextTheme base) {
- const String fontName = 'WorkSans';
- return base.copyWith(
- headline1: base.headline1.copyWith(fontFamily: fontName),
- headline2: base.headline2.copyWith(fontFamily: fontName),
- headline3: base.headline3.copyWith(fontFamily: fontName),
- headline4: base.headline4.copyWith(fontFamily: fontName),
- headline5: base.headline5.copyWith(fontFamily: fontName),
- headline6: base.headline6.copyWith(fontFamily: fontName),
- button: base.button.copyWith(fontFamily: fontName),
- caption: base.caption.copyWith(fontFamily: fontName),
- bodyText1: base.bodyText1.copyWith(fontFamily: fontName),
- bodyText2: base.bodyText2.copyWith(fontFamily: fontName),
- subtitle1: base.subtitle1.copyWith(fontFamily: fontName),
- subtitle2: base.subtitle2.copyWith(fontFamily: fontName),
- overline: base.overline.copyWith(fontFamily: fontName),
- );
- }
-
- static ThemeData buildLightTheme() {
- final Color primaryColor = HexColor('#54D3C2');
- final Color secondaryColor = HexColor('#54D3C2');
- final ColorScheme colorScheme = const ColorScheme.light().copyWith(
- primary: primaryColor,
- secondary: secondaryColor,
- );
- final ThemeData base = ThemeData.light();
- return base.copyWith(
- colorScheme: colorScheme,
- primaryColor: primaryColor,
- buttonColor: primaryColor,
- indicatorColor: Colors.white,
- splashColor: Colors.white24,
- splashFactory: InkRipple.splashFactory,
- accentColor: secondaryColor,
- canvasColor: Colors.white,
- backgroundColor: const Color(0xFFFFFFFF),
- scaffoldBackgroundColor: const Color(0xFFF6F6F6),
- errorColor: const Color(0xFFB00020),
- buttonTheme: ButtonThemeData(
- colorScheme: colorScheme,
- textTheme: ButtonTextTheme.primary,
- ),
- textTheme: _buildTextTheme(base.textTheme),
- primaryTextTheme: _buildTextTheme(base.primaryTextTheme),
- accentTextTheme: _buildTextTheme(base.accentTextTheme),
- platform: TargetPlatform.iOS,
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/hotel_booking/slider_view.dart b/best_flutter_ui_templates/lib/hotel_booking/slider_view.dart
deleted file mode 100644
index 72b26d17..00000000
--- a/best_flutter_ui_templates/lib/hotel_booking/slider_view.dart
+++ /dev/null
@@ -1,134 +0,0 @@
-import 'package:flutter/material.dart';
-
-import 'hotel_app_theme.dart';
-
-class SliderView extends StatefulWidget {
- const SliderView({Key key, this.onChangedistValue, this.distValue})
- : super(key: key);
-
- final Function(double) onChangedistValue;
- final double distValue;
-
- @override
- _SliderViewState createState() => _SliderViewState();
-}
-
-class _SliderViewState extends State {
- double distValue = 50.0;
-
- @override
- void initState() {
- distValue = widget.distValue;
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- child: Column(
- children: [
- Row(
- children: [
- Expanded(
- flex: distValue.round(),
- child: const SizedBox(),
- ),
- Container(
- width: 170,
- child: Text(
- 'Less than ${(distValue / 10).toStringAsFixed(1)} Km',
- textAlign: TextAlign.center,
- ),
- ),
- Expanded(
- flex: 100 - distValue.round(),
- child: const SizedBox(),
- ),
- ],
- ),
- SliderTheme(
- data: SliderThemeData(
- thumbShape: CustomThumbShape(),
- ),
- child: Slider(
- onChanged: (double value) {
- setState(() {
- distValue = value;
- });
- try {
- widget.onChangedistValue(distValue);
- } catch (_) {}
- },
- min: 0,
- max: 100,
- activeColor: HotelAppTheme.buildLightTheme().primaryColor,
- inactiveColor: Colors.grey.withOpacity(0.4),
- divisions: 100,
- value: distValue,
- ),
- ),
- ],
- ),
- );
- }
-}
-
-class CustomThumbShape extends SliderComponentShape {
- static const double _thumbSize = 3.0;
- static const double _disabledThumbSize = 3.0;
-
- @override
- Size getPreferredSize(bool isEnabled, bool isDiscrete) {
- return isEnabled
- ? const Size.fromRadius(_thumbSize)
- : const Size.fromRadius(_disabledThumbSize);
- }
-
- static final Animatable sizeTween = Tween(
- begin: _disabledThumbSize,
- end: _thumbSize,
- );
-
- @override
- void paint(
- PaintingContext context,
- Offset thumbCenter, {
- Animation activationAnimation,
- Animation enableAnimation,
- bool isDiscrete,
- TextPainter labelPainter,
- RenderBox parentBox,
- Size sizeWithOverflow,
- SliderThemeData sliderTheme,
- TextDirection textDirection,
- double textScaleFactor,
- double value,
- }) {
- final Canvas canvas = context.canvas;
- final ColorTween colorTween = ColorTween(
- begin: sliderTheme.disabledThumbColor,
- end: sliderTheme.thumbColor,
- );
- canvas.drawPath(
- Path()
- ..addOval(Rect.fromPoints(
- Offset(thumbCenter.dx + 12, thumbCenter.dy + 12),
- Offset(thumbCenter.dx - 12, thumbCenter.dy - 12)))
- ..fillType = PathFillType.evenOdd,
- Paint()
- ..color = Colors.black.withOpacity(0.5)
- ..maskFilter =
- MaskFilter.blur(BlurStyle.normal, convertRadiusToSigma(8)));
-
- final Paint cPaint = Paint();
- cPaint..color = Colors.white;
- cPaint..strokeWidth = 14 / 2;
- canvas.drawCircle(Offset(thumbCenter.dx, thumbCenter.dy), 12, cPaint);
- cPaint..color = colorTween.evaluate(enableAnimation);
- canvas.drawCircle(Offset(thumbCenter.dx, thumbCenter.dy), 10, cPaint);
- }
-
- double convertRadiusToSigma(double radius) {
- return radius * 0.57735 + 0.5;
- }
-}
diff --git a/best_flutter_ui_templates/lib/invite_friend_screen.dart b/best_flutter_ui_templates/lib/invite_friend_screen.dart
deleted file mode 100644
index 5a1864bc..00000000
--- a/best_flutter_ui_templates/lib/invite_friend_screen.dart
+++ /dev/null
@@ -1,109 +0,0 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:flutter/material.dart';
-
-class InviteFriend extends StatefulWidget {
- @override
- _InviteFriendState createState() => _InviteFriendState();
-}
-
-class _InviteFriendState extends State {
- @override
- void initState() {
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: AppTheme.nearlyWhite,
- child: SafeArea(
- top: false,
- child: Scaffold(
- backgroundColor: AppTheme.nearlyWhite,
- body: Column(
- children: [
- Container(
- padding: EdgeInsets.only(
- top: MediaQuery.of(context).padding.top,
- left: 16,
- right: 16),
- child: Image.asset('assets/images/inviteImage.png'),
- ),
- Container(
- padding: const EdgeInsets.only(top: 8),
- child: Text(
- 'Invite Your Friends',
- style: TextStyle(
- fontSize: 20,
- fontWeight: FontWeight.bold,
- ),
- ),
- ),
- Container(
- padding: const EdgeInsets.only(top: 16),
- child: const Text(
- 'Are you one of those who makes everything\n at the last moment?',
- textAlign: TextAlign.center,
- style: TextStyle(
- fontSize: 16,
- ),
- ),
- ),
- Expanded(
- child: Padding(
- padding: const EdgeInsets.all(8.0),
- child: Center(
- child: Container(
- width: 120,
- height: 40,
- decoration: BoxDecoration(
- color: Colors.blue,
- borderRadius:
- const BorderRadius.all(Radius.circular(4.0)),
- boxShadow: [
- BoxShadow(
- color: Colors.grey.withOpacity(0.6),
- offset: const Offset(4, 4),
- blurRadius: 8.0),
- ],
- ),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- onTap: () {},
- child: Center(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Icon(
- Icons.share,
- color: Colors.white,
- size: 22,
- ),
- Padding(
- padding: const EdgeInsets.all(4.0),
- child: Text(
- 'Share',
- style: TextStyle(
- fontWeight: FontWeight.w500,
- color: Colors.white,
- ),
- ),
- ),
- ],
- ),
- ),
- ),
- ),
- ),
- ),
- ),
- )
- ],
- ),
- ),
- ),
- );
- }
-}
diff --git a/best_flutter_ui_templates/lib/model/homelist.dart b/best_flutter_ui_templates/lib/model/homelist.dart
deleted file mode 100644
index 6e247fa0..00000000
--- a/best_flutter_ui_templates/lib/model/homelist.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-import 'package:best_flutter_ui_templates/design_course/home_design_course.dart';
-import 'package:best_flutter_ui_templates/fitness_app/fitness_app_home_screen.dart';
-import 'package:best_flutter_ui_templates/hotel_booking/hotel_home_screen.dart';
-import 'package:flutter/widgets.dart';
-
-class HomeList {
- HomeList({
- this.navigateScreen,
- this.imagePath = '',
- });
-
- Widget navigateScreen;
- String imagePath;
-
- static List homeList = [
- HomeList(
- imagePath: 'assets/hotel/hotel_booking.png',
- navigateScreen: HotelHomeScreen(),
- ),
- HomeList(
- imagePath: 'assets/fitness_app/fitness_app.png',
- navigateScreen: FitnessAppHomeScreen(),
- ),
- HomeList(
- imagePath: 'assets/design_course/design_course.png',
- navigateScreen: DesignCourseHomeScreen(),
- ),
- ];
-}
diff --git a/best_flutter_ui_templates/lib/navigation_home_screen.dart b/best_flutter_ui_templates/lib/navigation_home_screen.dart
deleted file mode 100644
index 13770a0b..00000000
--- a/best_flutter_ui_templates/lib/navigation_home_screen.dart
+++ /dev/null
@@ -1,74 +0,0 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:best_flutter_ui_templates/custom_drawer/drawer_user_controller.dart';
-import 'package:best_flutter_ui_templates/custom_drawer/home_drawer.dart';
-import 'package:best_flutter_ui_templates/feedback_screen.dart';
-import 'package:best_flutter_ui_templates/help_screen.dart';
-import 'package:best_flutter_ui_templates/home_screen.dart';
-import 'package:best_flutter_ui_templates/invite_friend_screen.dart';
-import 'package:flutter/material.dart';
-
-class NavigationHomeScreen extends StatefulWidget {
- @override
- _NavigationHomeScreenState createState() => _NavigationHomeScreenState();
-}
-
-class _NavigationHomeScreenState extends State {
- Widget screenView;
- DrawerIndex drawerIndex;
-
- @override
- void initState() {
- drawerIndex = DrawerIndex.HOME;
- screenView = const MyHomePage();
- super.initState();
- }
-
- @override
- Widget build(BuildContext context) {
- return Container(
- color: AppTheme.nearlyWhite,
- child: SafeArea(
- top: false,
- bottom: false,
- child: Scaffold(
- backgroundColor: AppTheme.nearlyWhite,
- body: DrawerUserController(
- screenIndex: drawerIndex,
- drawerWidth: MediaQuery.of(context).size.width * 0.75,
- onDrawerCall: (DrawerIndex drawerIndexdata) {
- changeIndex(drawerIndexdata);
- //callback from drawer for replace screen as user need with passing DrawerIndex(Enum index)
- },
- screenView: screenView,
- //we replace screen view as we need on navigate starting screens like MyHomePage, HelpScreen, FeedbackScreen, etc...
- ),
- ),
- ),
- );
- }
-
- void changeIndex(DrawerIndex drawerIndexdata) {
- if (drawerIndex != drawerIndexdata) {
- drawerIndex = drawerIndexdata;
- if (drawerIndex == DrawerIndex.HOME) {
- setState(() {
- screenView = const MyHomePage();
- });
- } else if (drawerIndex == DrawerIndex.Help) {
- setState(() {
- screenView = HelpScreen();
- });
- } else if (drawerIndex == DrawerIndex.FeedBack) {
- setState(() {
- screenView = FeedbackScreen();
- });
- } else if (drawerIndex == DrawerIndex.Invite) {
- setState(() {
- screenView = InviteFriend();
- });
- } else {
- //do in your way......
- }
- }
- }
-}
diff --git a/best_flutter_ui_templates/pubspec.lock b/best_flutter_ui_templates/pubspec.lock
deleted file mode 100644
index 14e77652..00000000
--- a/best_flutter_ui_templates/pubspec.lock
+++ /dev/null
@@ -1,209 +0,0 @@
-# Generated by pub
-# See https://dart.dev/tools/pub/glossary#lockfile
-packages:
- archive:
- dependency: transitive
- description:
- name: archive
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.0.13"
- args:
- dependency: transitive
- description:
- name: args
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.6.0"
- async:
- dependency: transitive
- description:
- name: async
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.4.1"
- boolean_selector:
- dependency: transitive
- description:
- name: boolean_selector
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.0.0"
- charcode:
- dependency: transitive
- description:
- name: charcode
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.3"
- collection:
- dependency: transitive
- description:
- name: collection
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.14.12"
- convert:
- dependency: transitive
- description:
- name: convert
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.1"
- crypto:
- dependency: transitive
- description:
- name: crypto
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.4"
- cupertino_icons:
- dependency: "direct main"
- description:
- name: cupertino_icons
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.1.3"
- flutter:
- dependency: "direct main"
- description: flutter
- source: sdk
- version: "0.0.0"
- flutter_test:
- dependency: "direct dev"
- description: flutter
- source: sdk
- version: "0.0.0"
- font_awesome_flutter:
- dependency: "direct main"
- description:
- name: font_awesome_flutter
- url: "https://pub.dartlang.org"
- source: hosted
- version: "8.8.1"
- image:
- dependency: transitive
- description:
- name: image
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.12"
- intl:
- dependency: "direct main"
- description:
- name: intl
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.16.1"
- matcher:
- dependency: transitive
- description:
- name: matcher
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.12.6"
- meta:
- dependency: transitive
- description:
- name: meta
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.8"
- path:
- dependency: transitive
- description:
- name: path
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.6.4"
- petitparser:
- dependency: transitive
- description:
- name: petitparser
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.4.0"
- quiver:
- dependency: transitive
- description:
- name: quiver
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.1.3"
- sky_engine:
- dependency: transitive
- description: flutter
- source: sdk
- version: "0.0.99"
- smooth_star_rating:
- dependency: "direct main"
- description:
- name: smooth_star_rating
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.1"
- source_span:
- dependency: transitive
- description:
- name: source_span
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.7.0"
- stack_trace:
- dependency: transitive
- description:
- name: stack_trace
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.9.3"
- stream_channel:
- dependency: transitive
- description:
- name: stream_channel
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.0.0"
- string_scanner:
- dependency: transitive
- description:
- name: string_scanner
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.0.5"
- term_glyph:
- dependency: transitive
- description:
- name: term_glyph
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.0"
- test_api:
- dependency: transitive
- description:
- name: test_api
- url: "https://pub.dartlang.org"
- source: hosted
- version: "0.2.15"
- typed_data:
- dependency: transitive
- description:
- name: typed_data
- url: "https://pub.dartlang.org"
- source: hosted
- version: "1.1.6"
- vector_math:
- dependency: transitive
- description:
- name: vector_math
- url: "https://pub.dartlang.org"
- source: hosted
- version: "2.0.8"
- xml:
- dependency: transitive
- description:
- name: xml
- url: "https://pub.dartlang.org"
- source: hosted
- version: "3.6.1"
-sdks:
- dart: ">=2.7.0 <3.0.0"
diff --git a/best_flutter_ui_templates/pubspec.yaml b/best_flutter_ui_templates/pubspec.yaml
deleted file mode 100644
index aac71a95..00000000
--- a/best_flutter_ui_templates/pubspec.yaml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: best_flutter_ui_templates
-description: A new Flutter project.
-
-# The following line prevents the package from being accidentally published to
-# pub.dev using `pub publish`. This is preferred for private packages.
-publish_to: 'none' # Remove this line if you wish to publish to pub.dev
-
-# The following defines the version and build number for your application.
-# A version number is three numbers separated by dots, like 1.2.43
-# followed by an optional build number separated by a +.
-# Both the version and the builder number may be overridden in flutter
-# build by specifying --build-name and --build-number, respectively.
-# In Android, build-name is used as versionName while build-number used as versionCode.
-# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
-# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
-# Read more about iOS versioning at
-# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-version: 1.0.0+1
-
-environment:
- sdk: ">=2.7.0 <3.0.0"
-
-dependencies:
- flutter:
- sdk: flutter
-
-
- # The following adds the Cupertino Icons font to your application.
- # Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: ^0.1.3
- font_awesome_flutter: ^8.8.1
- smooth_star_rating: ^1.1.1
- intl: ^0.16.0
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-# The following section is specific to Flutter.
-flutter:
-
- # The following line ensures that the Material Icons font is
- # included with your application, so that you can use the icons in
- # the material Icons class.
- uses-material-design: true
-
- # To add assets to your application, add an assets section, like this:
- assets:
- - assets/images/
- - assets/design_course/
- - assets/fitness_app/
- - assets/hotel/
-
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/assets-and-images/#resolution-aware.
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/assets-and-images/#from-packages
-
- # To add custom fonts to your application, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- fonts:
- - family: WorkSans
- fonts:
- - asset: assets/fonts/WorkSans-Regular.ttf
- - asset: assets/fonts/WorkSans-Medium.ttf
- weight: 500
- - asset: assets/fonts/WorkSans-SemiBold.ttf
- weight: 600
- - asset: assets/fonts/WorkSans-Bold.ttf
- weight: 700
- - family: Roboto
- fonts:
- - asset: assets/fonts/Roboto-Bold.ttf
- - asset: assets/fonts/Roboto-Regular.ttf
- - asset: assets/fonts/Roboto-Medium.ttf
- weight: 400
- #
- # For details regarding fonts from package dependencies,
- # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/best_flutter_ui_templates/test/widget_test.dart b/best_flutter_ui_templates/test/widget_test.dart
deleted file mode 100644
index 65726969..00000000
--- a/best_flutter_ui_templates/test/widget_test.dart
+++ /dev/null
@@ -1,30 +0,0 @@
-// This is a basic Flutter widget test.
-//
-// To perform an interaction with a widget in your test, use the WidgetTester
-// utility that Flutter provides. For example, you can send tap and scroll
-// gestures. You can also use WidgetTester to find child widgets in the widget
-// tree, read text, and verify that the values of widget properties are correct.
-
-import 'package:flutter/material.dart';
-import 'package:flutter_test/flutter_test.dart';
-
-import 'package:best_flutter_ui_templates/main.dart';
-
-void main() {
- testWidgets('Counter increments smoke test', (WidgetTester tester) async {
- // Build our app and trigger a frame.
- await tester.pumpWidget(MyApp());
-
- // Verify that our counter starts at 0.
- expect(find.text('0'), findsOneWidget);
- expect(find.text('1'), findsNothing);
-
- // Tap the '+' icon and trigger a frame.
- await tester.tap(find.byIcon(Icons.add));
- await tester.pump();
-
- // Verify that our counter has incremented.
- expect(find.text('0'), findsNothing);
- expect(find.text('1'), findsOneWidget);
- });
-}
diff --git a/icon/adaptive.png b/icon/adaptive.png
new file mode 100644
index 00000000..a75904f7
Binary files /dev/null and b/icon/adaptive.png differ
diff --git a/icon/android.png b/icon/android.png
new file mode 100644
index 00000000..d35fd32f
Binary files /dev/null and b/icon/android.png differ
diff --git a/icon/googleplay.png b/icon/googleplay.png
new file mode 100644
index 00000000..68ed64f5
Binary files /dev/null and b/icon/googleplay.png differ
diff --git a/icon/icon.afphoto b/icon/icon.afphoto
new file mode 100644
index 00000000..b719556e
Binary files /dev/null and b/icon/icon.afphoto differ
diff --git a/icon/ios.png b/icon/ios.png
new file mode 100644
index 00000000..daa1615f
Binary files /dev/null and b/icon/ios.png differ
diff --git a/images/07-05-2020.apk b/images/07-05-2020.apk
deleted file mode 100644
index af856f66..00000000
Binary files a/images/07-05-2020.apk and /dev/null differ
diff --git a/images/custom_drawer.gif b/images/custom_drawer.gif
deleted file mode 100644
index 5ead2ada..00000000
Binary files a/images/custom_drawer.gif and /dev/null differ
diff --git a/images/custom_drawer.png b/images/custom_drawer.png
deleted file mode 100644
index d1d32881..00000000
Binary files a/images/custom_drawer.png and /dev/null differ
diff --git a/images/design_course.gif b/images/design_course.gif
deleted file mode 100644
index c6934a08..00000000
Binary files a/images/design_course.gif and /dev/null differ
diff --git a/images/fitness_app.gif b/images/fitness_app.gif
deleted file mode 100644
index 79a27e24..00000000
Binary files a/images/fitness_app.gif and /dev/null differ
diff --git a/images/hotel_booking.gif b/images/hotel_booking.gif
deleted file mode 100644
index 3eaea91e..00000000
Binary files a/images/hotel_booking.gif and /dev/null differ
diff --git a/best_flutter_ui_templates/ios/.gitignore b/ios/.gitignore
similarity index 95%
rename from best_flutter_ui_templates/ios/.gitignore
rename to ios/.gitignore
index e96ef602..7a7f9873 100644
--- a/best_flutter_ui_templates/ios/.gitignore
+++ b/ios/.gitignore
@@ -1,3 +1,4 @@
+**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
@@ -18,6 +19,7 @@ Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
+Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
diff --git a/best_flutter_ui_templates/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
similarity index 91%
rename from best_flutter_ui_templates/ios/Flutter/AppFrameworkInfo.plist
rename to ios/Flutter/AppFrameworkInfo.plist
index 6b4c0f78..9625e105 100644
--- a/best_flutter_ui_templates/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -3,7 +3,7 @@
CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
+ en
CFBundleExecutable
App
CFBundleIdentifier
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 8.0
+ 11.0
diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..b2f5fae9
--- /dev/null
+++ b/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,3 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..88c29144
--- /dev/null
+++ b/ios/Flutter/Release.xcconfig
@@ -0,0 +1,3 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 00000000..2c068c40
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,41 @@
+# Uncomment this line to define a global platform for your project
+platform :ios, '12.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def flutter_root
+ generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+
+ File.foreach(generated_xcode_build_settings_path) do |line|
+ matches = line.match(/FLUTTER_ROOT\=(.*)/)
+ return matches[1].strip if matches
+ end
+ raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_ios_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
+end
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_ios_build_settings(target)
+ end
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 00000000..43d0fda7
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,22 @@
+PODS:
+ - Flutter (1.0.0)
+ - url_launcher_ios (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - Flutter (from `Flutter`)
+ - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
+
+EXTERNAL SOURCES:
+ Flutter:
+ :path: Flutter
+ url_launcher_ios:
+ :path: ".symlinks/plugins/url_launcher_ios/ios"
+
+SPEC CHECKSUMS:
+ Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
+ url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
+
+PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048
+
+COCOAPODS: 1.11.3
diff --git a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
similarity index 78%
rename from best_flutter_ui_templates/ios/Runner.xcodeproj/project.pbxproj
rename to ios/Runner.xcodeproj/project.pbxproj
index b522640b..52ad223e 100644
--- a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -3,12 +3,13 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 46;
+ objectVersion = 51;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 52B1DB98B00942DDB93F7C73 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAA6C7B5A9397A0C11B00BE1 /* Pods_Runner.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
@@ -32,6 +33,9 @@
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 5F28C4E1395FA7658B2930D4 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 61CBF051404AAB2C07AF4735 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ 6C9687EB0ABD4421D88855D9 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
@@ -42,6 +46,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 98E2B7F828B15ACA00938B34 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
+ EAA6C7B5A9397A0C11B00BE1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -49,12 +55,23 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 52B1DB98B00942DDB93F7C73 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 4DAB0B301040CA3F0DD934C9 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 5F28C4E1395FA7658B2930D4 /* Pods-Runner.debug.xcconfig */,
+ 61CBF051404AAB2C07AF4735 /* Pods-Runner.release.xcconfig */,
+ 6C9687EB0ABD4421D88855D9 /* Pods-Runner.profile.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
@@ -72,6 +89,8 @@
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
+ 4DAB0B301040CA3F0DD934C9 /* Pods */,
+ FC1DDB21A63D395C2CA63DC7 /* Frameworks */,
);
sourceTree = "";
};
@@ -86,11 +105,11 @@
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
+ 98E2B7F828B15ACA00938B34 /* Runner.entitlements */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
- 97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
@@ -99,11 +118,12 @@
path = Runner;
sourceTree = "";
};
- 97C146F11CF9000F007C117D /* Supporting Files */ = {
+ FC1DDB21A63D395C2CA63DC7 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ EAA6C7B5A9397A0C11B00BE1 /* Pods_Runner.framework */,
);
- name = "Supporting Files";
+ name = Frameworks;
sourceTree = "";
};
/* End PBXGroup section */
@@ -113,12 +133,14 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
+ 5CAFF5E2A8514188015E9D7D /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ AC52A0224720FEFA3CB02F82 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@@ -135,7 +157,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1020;
+ LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -191,6 +213,28 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
+ 5CAFF5E2A8514188015E9D7D /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -205,6 +249,23 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
+ AC52A0224720FEFA3CB02F82 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -241,7 +302,6 @@
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -263,6 +323,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -281,7 +342,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@@ -296,19 +357,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.bestFlutterUiTemplates;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.templates;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@@ -318,7 +375,6 @@
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -340,6 +396,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -364,7 +421,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -374,7 +431,6 @@
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@@ -396,6 +452,7 @@
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
@@ -414,11 +471,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
- SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
@@ -430,19 +488,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.bestFlutterUiTemplates;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.templates;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -457,19 +511,15 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(PROJECT_DIR)/Flutter",
- );
INFOPLIST_FILE = Runner/Info.plist;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- LIBRARY_SEARCH_PATHS = (
+ LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
- "$(PROJECT_DIR)/Flutter",
+ "@executable_path/Frameworks",
);
- PRODUCT_BUNDLE_IDENTIFIER = com.example.bestFlutterUiTemplates;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.templates;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
diff --git a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 71%
rename from best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 1d526a16..919434a6 100644
--- a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
rename to ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
diff --git a/best_flutter_ui_templates/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
similarity index 95%
rename from best_flutter_ui_templates/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
rename to ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index a28140cf..c87d15a3 100644
--- a/best_flutter_ui_templates/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
-
-
-
-
+
+
-
-
+
+
diff --git a/best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
rename to ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
diff --git a/best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
rename to ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
diff --git a/best_flutter_ui_templates/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/AppDelegate.swift
rename to ios/Runner/AppDelegate.swift
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..34f5fccf
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..bb4eef36
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..474734a7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..1f81c33c
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..99f305b7
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..8c15e4bf
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..03b8457f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..6d669fa0
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..8c27b261
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..43b0654c
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..43b0654c
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..6e20536f
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..9d0a5732
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..634d4492
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..f7936b98
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
diff --git a/best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
rename to ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
diff --git a/best_flutter_ui_templates/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Base.lproj/LaunchScreen.storyboard
rename to ios/Runner/Base.lproj/LaunchScreen.storyboard
diff --git a/best_flutter_ui_templates/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Base.lproj/Main.storyboard
rename to ios/Runner/Base.lproj/Main.storyboard
diff --git a/best_flutter_ui_templates/ios/Runner/Info.plist b/ios/Runner/Info.plist
similarity index 88%
rename from best_flutter_ui_templates/ios/Runner/Info.plist
rename to ios/Runner/Info.plist
index 2746d3d7..05d085c7 100644
--- a/best_flutter_ui_templates/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -4,6 +4,8 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Templates
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -11,7 +13,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- best_flutter_ui_templates
+ Templates
CFBundlePackageType
APPL
CFBundleShortVersionString
@@ -39,7 +41,11 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
+ ITSAppUsesNonExemptEncryption
+
UIViewControllerBasedStatusBarAppearance
+ CADisableMinimumFrameDurationOnPhone
+
diff --git a/best_flutter_ui_templates/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h
similarity index 100%
rename from best_flutter_ui_templates/ios/Runner/Runner-Bridging-Header.h
rename to ios/Runner/Runner-Bridging-Header.h
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
new file mode 100644
index 00000000..903def2a
--- /dev/null
+++ b/ios/Runner/Runner.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ aps-environment
+ development
+
+
diff --git a/lib/about_screen.dart b/lib/about_screen.dart
new file mode 100644
index 00000000..25ad1f9e
--- /dev/null
+++ b/lib/about_screen.dart
@@ -0,0 +1,66 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class AboutScreen extends StatefulWidget {
+ const AboutScreen({super.key});
+
+ @override
+ State createState() => _AboutScreenState();
+}
+
+class _AboutScreenState extends State {
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 8),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Text(
+ 'MIT License',
+ textAlign: TextAlign.center,
+ style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
+ ),
+ const SizedBox(height: 16),
+ const Text(
+ 'Copyright © 2019 Mitesh Chodvadiya\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or modified copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.',
+ textAlign: TextAlign.center,
+ style: TextStyle(fontSize: 16),
+ ),
+ const SizedBox(height: 30),
+ const Text(
+ 'The app is made from a fork of:',
+ textAlign: TextAlign.center,
+ style: TextStyle(fontSize: 16),
+ ),
+ const SizedBox(height: 16),
+ const Text(
+ 'Best Flutter UI Templates',
+ textAlign: TextAlign.center,
+ style: TextStyle(fontSize: 16),
+ ),
+ const SizedBox(height: 20),
+ GestureDetector(
+ onTap: () async {
+ final url = Uri(
+ scheme: 'https',
+ host: 'github.com',
+ path: '/nohli/flutter_templates',
+ );
+ if (await canLaunchUrl(url)) launchUrl(url);
+ },
+ child: const Text(
+ 'The code can be found here.',
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ color: Colors.blue,
+ fontSize: 16,
+ decoration: TextDecoration.underline,
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/best_flutter_ui_templates/lib/app_theme.dart b/lib/app_theme.dart
similarity index 71%
rename from best_flutter_ui_templates/lib/app_theme.dart
rename to lib/app_theme.dart
index 0946edc3..ce92709d 100644
--- a/best_flutter_ui_templates/lib/app_theme.dart
+++ b/lib/app_theme.dart
@@ -8,7 +8,7 @@ class AppTheme {
static const Color white = Color(0xFFFFFFFF);
static const Color nearlyBlack = Color(0xFF213333);
static const Color grey = Color(0xFF3A5160);
- static const Color dark_grey = Color(0xFF313A44);
+ static const Color darkGrey = Color(0xFF313A44);
static const Color darkText = Color(0xFF253840);
static const Color darkerText = Color(0xFF17262A);
@@ -20,16 +20,17 @@ class AppTheme {
static const String fontName = 'WorkSans';
static const TextTheme textTheme = TextTheme(
- headline4: display1,
- headline5: headline,
- headline6: title,
- subtitle2: subtitle,
- bodyText2: body2,
- bodyText1: body1,
- caption: caption,
+ headlineMedium: display1,
+ headlineSmall: headline,
+ titleLarge: title,
+ titleSmall: subtitle,
+ bodyMedium: body2,
+ bodyLarge: body1,
+ bodySmall: caption,
);
- static const TextStyle display1 = TextStyle( // h4 -> display1
+ static const TextStyle display1 = TextStyle(
+ // h4 -> display1
fontFamily: fontName,
fontWeight: FontWeight.bold,
fontSize: 36,
@@ -38,7 +39,8 @@ class AppTheme {
color: darkerText,
);
- static const TextStyle headline = TextStyle( // h5 -> headline
+ static const TextStyle headline = TextStyle(
+ // h5 -> headline
fontFamily: fontName,
fontWeight: FontWeight.bold,
fontSize: 24,
@@ -46,7 +48,8 @@ class AppTheme {
color: darkerText,
);
- static const TextStyle title = TextStyle( // h6 -> title
+ static const TextStyle title = TextStyle(
+ // h6 -> title
fontFamily: fontName,
fontWeight: FontWeight.bold,
fontSize: 16,
@@ -54,7 +57,8 @@ class AppTheme {
color: darkerText,
);
- static const TextStyle subtitle = TextStyle( // subtitle2 -> subtitle
+ static const TextStyle subtitle = TextStyle(
+ // subtitle2 -> subtitle
fontFamily: fontName,
fontWeight: FontWeight.w400,
fontSize: 14,
@@ -62,7 +66,8 @@ class AppTheme {
color: darkText,
);
- static const TextStyle body2 = TextStyle( // body1 -> body2
+ static const TextStyle body2 = TextStyle(
+ // body1 -> body2
fontFamily: fontName,
fontWeight: FontWeight.w400,
fontSize: 14,
@@ -70,7 +75,8 @@ class AppTheme {
color: darkText,
);
- static const TextStyle body1 = TextStyle( // body2 -> body1
+ static const TextStyle body1 = TextStyle(
+ // body2 -> body1
fontFamily: fontName,
fontWeight: FontWeight.w400,
fontSize: 16,
@@ -78,12 +84,12 @@ class AppTheme {
color: darkText,
);
- static const TextStyle caption = TextStyle( // Caption -> caption
+ static const TextStyle caption = TextStyle(
+ // Caption -> caption
fontFamily: fontName,
fontWeight: FontWeight.w400,
fontSize: 12,
letterSpacing: 0.2,
color: lightText, // was lightText
);
-
}
diff --git a/best_flutter_ui_templates/lib/custom_drawer/drawer_user_controller.dart b/lib/custom_drawer/drawer_user_controller.dart
similarity index 60%
rename from best_flutter_ui_templates/lib/custom_drawer/drawer_user_controller.dart
rename to lib/custom_drawer/drawer_user_controller.dart
index 75fd369c..a19c31fe 100644
--- a/best_flutter_ui_templates/lib/custom_drawer/drawer_user_controller.dart
+++ b/lib/custom_drawer/drawer_user_controller.dart
@@ -1,73 +1,95 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
-import 'package:best_flutter_ui_templates/custom_drawer/home_drawer.dart';
import 'package:flutter/material.dart';
+import '../app_theme.dart';
+import '../custom_drawer/home_drawer.dart';
+
class DrawerUserController extends StatefulWidget {
const DrawerUserController({
- Key key,
- this.drawerWidth = 250,
- this.onDrawerCall,
- this.screenView,
- this.animatedIconData = AnimatedIcons.arrow_menu,
+ required this.onDrawerCall,
+ required this.screenView,
this.menuView,
this.drawerIsOpen,
- this.screenIndex,
- }) : super(key: key);
+ this.animatedIconData = AnimatedIcons.arrow_menu,
+ this.drawerWidth = 250,
+ this.screenIndex = DrawerIndex.home,
+ super.key,
+ });
final double drawerWidth;
final Function(DrawerIndex) onDrawerCall;
final Widget screenView;
- final Function(bool) drawerIsOpen;
+ final Function(bool)? drawerIsOpen;
final AnimatedIconData animatedIconData;
- final Widget menuView;
+ final Widget? menuView;
final DrawerIndex screenIndex;
@override
- _DrawerUserControllerState createState() => _DrawerUserControllerState();
+ State createState() => _DrawerUserControllerState();
}
-class _DrawerUserControllerState extends State with TickerProviderStateMixin {
- ScrollController scrollController;
- AnimationController iconAnimationController;
- AnimationController animationController;
-
+class _DrawerUserControllerState extends State
+ with TickerProviderStateMixin {
double scrolloffset = 0.0;
+ late final ScrollController scrollController;
+ late final AnimationController animationController;
+ late final AnimationController iconAnimationController;
@override
void initState() {
- animationController = AnimationController(duration: const Duration(milliseconds: 2000), vsync: this);
- iconAnimationController = AnimationController(vsync: this, duration: const Duration(milliseconds: 0));
- iconAnimationController..animateTo(1.0, duration: const Duration(milliseconds: 0), curve: Curves.fastOutSlowIn);
- scrollController = ScrollController(initialScrollOffset: widget.drawerWidth);
- scrollController
- ..addListener(() {
- if (scrollController.offset <= 0) {
- if (scrolloffset != 1.0) {
+ super.initState();
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 2000), vsync: this);
+ iconAnimationController =
+ AnimationController(vsync: this, duration: const Duration());
+ iconAnimationController.animateTo(1.0,
+ duration: const Duration(), curve: Curves.fastOutSlowIn);
+ scrollController =
+ ScrollController(initialScrollOffset: widget.drawerWidth);
+ scrollController.addListener(() {
+ if (scrollController.offset <= 0) {
+ if (scrolloffset != 1.0) {
+ if (mounted) {
setState(() {
scrolloffset = 1.0;
try {
- widget.drawerIsOpen(true);
+ final Function(bool)? function = widget.drawerIsOpen;
+ if (function != null) function(true);
} catch (_) {}
});
}
- iconAnimationController.animateTo(0.0, duration: const Duration(milliseconds: 0), curve: Curves.fastOutSlowIn);
- } else if (scrollController.offset > 0 && scrollController.offset < widget.drawerWidth.floor()) {
- iconAnimationController.animateTo((scrollController.offset * 100 / (widget.drawerWidth)) / 100,
- duration: const Duration(milliseconds: 0), curve: Curves.fastOutSlowIn);
- } else {
- if (scrolloffset != 0.0) {
+ }
+ iconAnimationController.animateTo(0.0,
+ duration: const Duration(), curve: Curves.fastOutSlowIn);
+ } else if (scrollController.offset < widget.drawerWidth.floor()) {
+ iconAnimationController.animateTo(
+ (scrollController.offset * 100 / (widget.drawerWidth)) / 100,
+ duration: const Duration(),
+ curve: Curves.fastOutSlowIn);
+ } else {
+ if (scrolloffset != 0.0) {
+ if (mounted) {
setState(() {
scrolloffset = 0.0;
try {
- widget.drawerIsOpen(false);
+ final Function(bool)? function = widget.drawerIsOpen;
+ if (function != null) function(false);
} catch (_) {}
});
}
- iconAnimationController.animateTo(1.0, duration: const Duration(milliseconds: 0), curve: Curves.fastOutSlowIn);
}
- });
+ iconAnimationController.animateTo(1.0,
+ duration: const Duration(), curve: Curves.fastOutSlowIn);
+ }
+ });
WidgetsBinding.instance.addPostFrameCallback((_) => getInitState());
- super.initState();
+ }
+
+ @override
+ void dispose() {
+ scrollController.dispose();
+ animationController.dispose();
+ iconAnimationController.dispose();
+ super.dispose();
}
Future getInitState() async {
@@ -79,9 +101,9 @@ class _DrawerUserControllerState extends State with Ticker
@override
Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: AppTheme.white,
- body: SingleChildScrollView(
+ return Container(
+ color: AppTheme.white,
+ child: SingleChildScrollView(
controller: scrollController,
scrollDirection: Axis.horizontal,
physics: const PageScrollPhysics(parent: ClampingScrollPhysics()),
@@ -97,18 +119,21 @@ class _DrawerUserControllerState extends State with Ticker
height: MediaQuery.of(context).size.height,
child: AnimatedBuilder(
animation: iconAnimationController,
- builder: (BuildContext context, Widget child) {
+ builder: (BuildContext context, _) {
return Transform(
//transform we use for the stable drawer we, not need to move with scroll view
- transform: Matrix4.translationValues(scrollController.offset, 0.0, 0.0),
+ transform: Matrix4.translationValues(
+ scrollController.offset, 0.0, 0.0),
child: HomeDrawer(
- screenIndex: widget.screenIndex == null ? DrawerIndex.HOME : widget.screenIndex,
+ screenIndex: widget.screenIndex,
iconAnimationController: iconAnimationController,
callBackIndex: (DrawerIndex indexType) {
onDrawerClick();
try {
widget.onDrawerCall(indexType);
- } catch (e) {}
+ } catch (e) {
+ debugPrint('drawer_user_controller?.dart: $e');
+ }
},
),
);
@@ -123,7 +148,9 @@ class _DrawerUserControllerState extends State with Ticker
decoration: BoxDecoration(
color: AppTheme.white,
boxShadow: [
- BoxShadow(color: AppTheme.grey.withOpacity(0.6), blurRadius: 24),
+ BoxShadow(
+ color: AppTheme.grey.withOpacity(0.6),
+ blurRadius: 24),
],
),
child: Stack(
@@ -135,33 +162,35 @@ class _DrawerUserControllerState extends State with Ticker
),
//alternative touch(user Interface) for widget.screen, for example, drawer is close we need to tap on a few home screen area and close the drawer
if (scrolloffset == 1.0)
- InkWell(
- onTap: () {
- onDrawerClick();
- },
+ GestureDetector(
+ onTap: () => onDrawerClick(),
),
+
// this just menu and arrow icon animation
Padding(
- padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top + 8, left: 8),
+ padding: EdgeInsets.only(
+ top: MediaQuery.of(context).padding.top + 8,
+ left: 8),
child: SizedBox(
width: AppBar().preferredSize.height - 8,
height: AppBar().preferredSize.height - 8,
child: Material(
color: Colors.transparent,
child: InkWell(
- borderRadius: BorderRadius.circular(AppBar().preferredSize.height),
+ borderRadius: BorderRadius.circular(
+ AppBar().preferredSize.height),
+ onTap: () {
+ FocusScope.of(context)
+ .requestFocus(FocusNode());
+ onDrawerClick();
+ },
child: Center(
// if you use your own menu view UI you add form initialization
- child: widget.menuView != null
- ? widget.menuView
- : AnimatedIcon(
- icon: widget.animatedIconData != null ? widget.animatedIconData : AnimatedIcons.arrow_menu,
+ child: widget.menuView ??
+ AnimatedIcon(
+ icon: widget.animatedIconData,
progress: iconAnimationController),
),
- onTap: () {
- FocusScope.of(context).requestFocus(FocusNode());
- onDrawerClick();
- },
),
),
),
@@ -178,7 +207,7 @@ class _DrawerUserControllerState extends State with Ticker
}
void onDrawerClick() {
- //if scrollcontroller.offset != 0.0 then we set to closed the drawer(with animation to offset zero position) if is not 1 then open the drawer
+ //if scrollcontroller?.offset != 0.0 then we set to closed the drawer(with animation to offset zero position) if is not 1 then open the drawer
if (scrollController.offset != 0.0) {
scrollController.animateTo(
0.0,
diff --git a/best_flutter_ui_templates/lib/custom_drawer/home_drawer.dart b/lib/custom_drawer/home_drawer.dart
similarity index 54%
rename from best_flutter_ui_templates/lib/custom_drawer/home_drawer.dart
rename to lib/custom_drawer/home_drawer.dart
index 654d982f..d230c6f6 100644
--- a/best_flutter_ui_templates/lib/custom_drawer/home_drawer.dart
+++ b/lib/custom_drawer/home_drawer.dart
@@ -1,68 +1,68 @@
-import 'package:best_flutter_ui_templates/app_theme.dart';
import 'package:flutter/material.dart';
+import '../app_theme.dart';
+
class HomeDrawer extends StatefulWidget {
- const HomeDrawer({Key key, this.screenIndex, this.iconAnimationController, this.callBackIndex}) : super(key: key);
+ const HomeDrawer({
+ required this.screenIndex,
+ required this.iconAnimationController,
+ required this.callBackIndex,
+ super.key,
+ });
final AnimationController iconAnimationController;
final DrawerIndex screenIndex;
final Function(DrawerIndex) callBackIndex;
@override
- _HomeDrawerState createState() => _HomeDrawerState();
+ State createState() => _HomeDrawerState();
}
class _HomeDrawerState extends State {
- List drawerList;
+ late final List drawerList;
@override
void initState() {
- setdDrawerListArray();
super.initState();
+ setDrawerListArray();
}
- void setdDrawerListArray() {
+ void setDrawerListArray() {
drawerList = [
DrawerList(
- index: DrawerIndex.HOME,
+ index: DrawerIndex.home,
labelName: 'Home',
- icon: Icon(Icons.home),
+ icon: const Icon(Icons.home),
),
DrawerList(
- index: DrawerIndex.Help,
+ index: DrawerIndex.help,
labelName: 'Help',
isAssetsImage: true,
imageName: 'assets/images/supportIcon.png',
),
DrawerList(
- index: DrawerIndex.FeedBack,
- labelName: 'FeedBack',
- icon: Icon(Icons.help),
+ index: DrawerIndex.feedback,
+ labelName: 'Feedback',
+ icon: const Icon(Icons.help),
),
DrawerList(
- index: DrawerIndex.Invite,
+ index: DrawerIndex.invite,
labelName: 'Invite Friend',
- icon: Icon(Icons.group),
- ),
- DrawerList(
- index: DrawerIndex.Share,
- labelName: 'Rate the app',
- icon: Icon(Icons.share),
+ icon: const Icon(Icons.group),
),
DrawerList(
- index: DrawerIndex.About,
- labelName: 'About Us',
- icon: Icon(Icons.info),
+ index: DrawerIndex.about,
+ labelName: 'About',
+ icon: const Icon(Icons.info),
),
];
}
@override
Widget build(BuildContext context) {
- return Scaffold(
- backgroundColor: AppTheme.notWhite.withOpacity(0.5),
- body: Column(
+ return Container(
+ color: AppTheme.notWhite.withOpacity(0.5),
+ child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
- mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: double.infinity,
@@ -71,16 +71,19 @@ class _HomeDrawerState extends State {
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisAlignment: MainAxisAlignment.start,
children: [
AnimatedBuilder(
animation: widget.iconAnimationController,
- builder: (BuildContext context, Widget child) {
+ builder: (BuildContext context, _) {
return ScaleTransition(
- scale: AlwaysStoppedAnimation(1.0 - (widget.iconAnimationController.value) * 0.2),
+ scale: AlwaysStoppedAnimation(
+ 1.0 - (widget.iconAnimationController.value) * 0.2),
child: RotationTransition(
- turns: AlwaysStoppedAnimation(Tween(begin: 0.0, end: 24.0)
- .animate(CurvedAnimation(parent: widget.iconAnimationController, curve: Curves.fastOutSlowIn))
+ turns: AlwaysStoppedAnimation(Tween(
+ begin: 0.0, end: 24.0)
+ .animate(CurvedAnimation(
+ parent: widget.iconAnimationController,
+ curve: Curves.fastOutSlowIn))
.value /
360),
child: Container(
@@ -89,11 +92,15 @@ class _HomeDrawerState extends State {
decoration: BoxDecoration(
shape: BoxShape.circle,
boxShadow: [
- BoxShadow(color: AppTheme.grey.withOpacity(0.6), offset: const Offset(2.0, 4.0), blurRadius: 8),
+ BoxShadow(
+ color: AppTheme.grey.withOpacity(0.6),
+ offset: const Offset(2.0, 4.0),
+ blurRadius: 8),
],
),
child: ClipRRect(
- borderRadius: const BorderRadius.all(Radius.circular(60.0)),
+ borderRadius:
+ const BorderRadius.all(Radius.circular(60.0)),
child: Image.asset('assets/images/userImage.png'),
),
),
@@ -101,10 +108,10 @@ class _HomeDrawerState extends State {
);
},
),
- Padding(
- padding: const EdgeInsets.only(top: 8, left: 4),
+ const Padding(
+ padding: EdgeInsets.only(top: 8, left: 4),
child: Text(
- 'Chris Hemsworth',
+ 'Shaquille Oatmeal',
style: TextStyle(
fontWeight: FontWeight.w600,
color: AppTheme.grey,
@@ -139,22 +146,27 @@ class _HomeDrawerState extends State {
),
Column(
children: [
- ListTile(
- title: Text(
- 'Sign Out',
- style: TextStyle(
- fontFamily: AppTheme.fontName,
- fontWeight: FontWeight.w600,
- fontSize: 16,
- color: AppTheme.darkText,
+ Material(
+ color: Colors.transparent,
+ child: InkWell(
+ child: ListTile(
+ title: const Text(
+ 'Sign Out',
+ style: TextStyle(
+ fontFamily: AppTheme.fontName,
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ color: AppTheme.darkText,
+ ),
+ textAlign: TextAlign.left,
+ ),
+ trailing: const Icon(
+ Icons.power_settings_new,
+ color: Colors.red,
+ ),
+ onTap: () {},
),
- textAlign: TextAlign.left,
- ),
- trailing: Icon(
- Icons.power_settings_new,
- color: Colors.red,
),
- onTap: () {},
),
SizedBox(
height: MediaQuery.of(context).padding.bottom,
@@ -181,7 +193,7 @@ class _HomeDrawerState extends State {
padding: const EdgeInsets.only(top: 8.0, bottom: 8.0),
child: Row(
children: [
- Container(
+ const SizedBox(
width: 6.0,
height: 46.0,
// decoration: BoxDecoration(
@@ -199,13 +211,20 @@ class _HomeDrawerState extends State {
const Padding(
padding: EdgeInsets.all(4.0),
),
- listData.isAssetsImage
- ? Container(
- width: 24,
- height: 24,
- child: Image.asset(listData.imageName, color: widget.screenIndex == listData.index ? Colors.blue : AppTheme.nearlyBlack),
- )
- : Icon(listData.icon.icon, color: widget.screenIndex == listData.index ? Colors.blue : AppTheme.nearlyBlack),
+ if (listData.isAssetsImage)
+ SizedBox(
+ width: 24,
+ height: 24,
+ child: Image.asset(listData.imageName,
+ color: widget.screenIndex == listData.index
+ ? Colors.blue
+ : AppTheme.nearlyBlack),
+ )
+ else
+ Icon(listData.icon?.icon,
+ color: widget.screenIndex == listData.index
+ ? Colors.blue
+ : AppTheme.nearlyBlack),
const Padding(
padding: EdgeInsets.all(4.0),
),
@@ -214,40 +233,44 @@ class _HomeDrawerState extends State {
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
- color: widget.screenIndex == listData.index ? Colors.blue : AppTheme.nearlyBlack,
+ color: widget.screenIndex == listData.index
+ ? Colors.blue
+ : AppTheme.nearlyBlack,
),
textAlign: TextAlign.left,
),
],
),
),
- widget.screenIndex == listData.index
- ? AnimatedBuilder(
- animation: widget.iconAnimationController,
- builder: (BuildContext context, Widget child) {
- return Transform(
- transform: Matrix4.translationValues(
- (MediaQuery.of(context).size.width * 0.75 - 64) * (1.0 - widget.iconAnimationController.value - 1.0), 0.0, 0.0),
- child: Padding(
- padding: EdgeInsets.only(top: 8, bottom: 8),
- child: Container(
- width: MediaQuery.of(context).size.width * 0.75 - 64,
- height: 46,
- decoration: BoxDecoration(
- color: Colors.blue.withOpacity(0.2),
- borderRadius: new BorderRadius.only(
- topLeft: Radius.circular(0),
- topRight: Radius.circular(28),
- bottomLeft: Radius.circular(0),
- bottomRight: Radius.circular(28),
- ),
- ),
+ if (widget.screenIndex == listData.index)
+ AnimatedBuilder(
+ animation: widget.iconAnimationController,
+ builder: (BuildContext context, _) {
+ return Transform(
+ transform: Matrix4.translationValues(
+ (MediaQuery.of(context).size.width * 0.75 - 64) *
+ (1.0 - widget.iconAnimationController.value - 1.0),
+ 0.0,
+ 0.0),
+ child: Padding(
+ padding: const EdgeInsets.only(top: 8, bottom: 8),
+ child: Container(
+ width: MediaQuery.of(context).size.width * 0.75 - 64,
+ height: 46,
+ decoration: BoxDecoration(
+ color: Colors.blue.withOpacity(0.2),
+ borderRadius: const BorderRadius.only(
+ topRight: Radius.circular(28),
+ bottomRight: Radius.circular(28),
),
),
- );
- },
- )
- : const SizedBox()
+ ),
+ ),
+ );
+ },
+ )
+ else
+ const SizedBox()
],
),
),
@@ -259,27 +282,19 @@ class _HomeDrawerState extends State {
}
}
-enum DrawerIndex {
- HOME,
- FeedBack,
- Help,
- Share,
- About,
- Invite,
- Testing,
-}
+enum DrawerIndex { home, help, feedback, invite, about }
class DrawerList {
DrawerList({
+ required this.index,
+ this.icon,
this.isAssetsImage = false,
this.labelName = '',
- this.icon,
- this.index,
this.imageName = '',
});
String labelName;
- Icon icon;
+ Icon? icon;
bool isAssetsImage;
String imageName;
DrawerIndex index;
diff --git a/lib/design_course/category_list_view.dart b/lib/design_course/category_list_view.dart
new file mode 100644
index 00000000..c9140f5e
--- /dev/null
+++ b/lib/design_course/category_list_view.dart
@@ -0,0 +1,262 @@
+import 'package:flutter/material.dart';
+
+import 'design_course_app_theme.dart';
+import 'models/category.dart';
+
+class CategoryListView extends StatefulWidget {
+ const CategoryListView({required this.callBack, super.key});
+
+ final Function() callBack;
+
+ @override
+ State createState() => _CategoryListViewState();
+}
+
+class _CategoryListViewState extends State
+ with TickerProviderStateMixin {
+ late final AnimationController animationController;
+ @override
+ void initState() {
+ super.initState();
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 2000), vsync: this);
+ }
+
+ @override
+ void dispose() {
+ animationController.dispose();
+ super.dispose();
+ }
+
+ Future getData() async {
+ await Future.delayed(const Duration(milliseconds: 50));
+ return true;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.only(top: 16, bottom: 16),
+ child: SizedBox(
+ height: 134,
+ width: double.infinity,
+ child: FutureBuilder(
+ future: getData(),
+ builder: (BuildContext context, AsyncSnapshot snapshot) {
+ if (!snapshot.hasData) {
+ return const SizedBox();
+ } else {
+ return ListView.builder(
+ padding: const EdgeInsets.only(right: 16, left: 16),
+ itemCount: Category.categoryList.length,
+ scrollDirection: Axis.horizontal,
+ itemBuilder: (BuildContext context, int index) {
+ final int count = Category.categoryList.length > 10
+ ? 10
+ : Category.categoryList.length;
+ final Animation animation =
+ Tween(begin: 0.0, end: 1.0).animate(
+ CurvedAnimation(
+ parent: animationController,
+ curve: Interval((1 / count) * index, 1.0,
+ curve: Curves.fastOutSlowIn)));
+ animationController.forward();
+
+ return CategoryView(
+ category: Category.categoryList[index],
+ animation: animation,
+ animationController: animationController,
+ callback: () {
+ widget.callBack();
+ },
+ );
+ },
+ );
+ }
+ },
+ ),
+ ),
+ );
+ }
+}
+
+class CategoryView extends StatelessWidget {
+ const CategoryView({
+ required this.category,
+ required this.animationController,
+ required this.animation,
+ required this.callback,
+ super.key,
+ });
+
+ final VoidCallback callback;
+ final Category category;
+ final AnimationController animationController;
+ final Animation animation;
+
+ @override
+ Widget build(BuildContext context) {
+ return AnimatedBuilder(
+ animation: animationController,
+ builder: (BuildContext context, _) {
+ return FadeTransition(
+ opacity: animation,
+ child: Transform(
+ transform: Matrix4.translationValues(
+ 100 * (1.0 - animation.value), 0.0, 0.0),
+ child: GestureDetector(
+ onTap: () => callback(),
+ child: SizedBox(
+ width: 280,
+ child: Stack(
+ children: [
+ Row(
+ children: [
+ const SizedBox(width: 48),
+ Expanded(
+ child: Container(
+ decoration: const BoxDecoration(
+ color: Color(0xFFF8FAFB),
+ borderRadius:
+ BorderRadius.all(Radius.circular(16.0)),
+ ),
+ child: Row(
+ children: [
+ const SizedBox(
+ width: 48 + 24.0,
+ ),
+ Expanded(
+ child: Column(
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(top: 16),
+ child: Text(
+ category.title,
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ letterSpacing: 0.27,
+ color:
+ DesignCourseAppTheme.darkerText,
+ ),
+ ),
+ ),
+ const Expanded(
+ child: SizedBox(),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ right: 16, bottom: 8),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ '${category.lessonCount} lesson',
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color:
+ DesignCourseAppTheme.grey,
+ ),
+ ),
+ Row(
+ children: [
+ Text(
+ '${category.rating}',
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 18,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme
+ .grey,
+ ),
+ ),
+ const Icon(
+ Icons.star,
+ color: DesignCourseAppTheme
+ .nearlyBlue,
+ size: 20,
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ bottom: 16, right: 16),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Text(
+ '\$${category.money}',
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 18,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme
+ .nearlyBlue,
+ ),
+ ),
+ Container(
+ decoration: const BoxDecoration(
+ color: DesignCourseAppTheme
+ .nearlyBlue,
+ borderRadius: BorderRadius.all(
+ Radius.circular(8.0)),
+ ),
+ child: const Padding(
+ padding: EdgeInsets.all(4.0),
+ child: Icon(
+ Icons.add,
+ color: DesignCourseAppTheme
+ .nearlyWhite,
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ )
+ ],
+ ),
+ Padding(
+ padding:
+ const EdgeInsets.only(top: 24, bottom: 24, left: 16),
+ child: Row(
+ children: [
+ ClipRRect(
+ borderRadius:
+ const BorderRadius.all(Radius.circular(16.0)),
+ child: AspectRatio(
+ aspectRatio: 1.0,
+ child: Image.asset(category.imagePath)),
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ );
+ },
+ );
+ }
+}
diff --git a/lib/design_course/course_info_screen.dart b/lib/design_course/course_info_screen.dart
new file mode 100644
index 00000000..a4af63b0
--- /dev/null
+++ b/lib/design_course/course_info_screen.dart
@@ -0,0 +1,390 @@
+import 'package:flutter/material.dart';
+
+import 'design_course_app_theme.dart';
+
+class CourseInfoScreen extends StatefulWidget {
+ const CourseInfoScreen({super.key});
+
+ @override
+ State createState() => _CourseInfoScreenState();
+}
+
+class _CourseInfoScreenState extends State
+ with TickerProviderStateMixin {
+ final double infoHeight = 364.0;
+ double opacity1 = 0.0;
+ double opacity2 = 0.0;
+ double opacity3 = 0.0;
+
+ late final AnimationController animationController;
+ late final Animation animation;
+ @override
+ void initState() {
+ super.initState();
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 1000), vsync: this);
+ animation = Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
+ parent: animationController,
+ curve: const Interval(0, 1.0, curve: Curves.fastOutSlowIn)));
+ setData();
+ }
+
+ @override
+ void dispose() {
+ animationController.dispose();
+ super.dispose();
+ }
+
+ Future setData() async {
+ animationController.forward();
+ await Future.delayed(const Duration(milliseconds: 200));
+ if (mounted) {
+ setState(() {
+ opacity1 = 1.0;
+ });
+ }
+ await Future.delayed(const Duration(milliseconds: 200));
+ if (mounted) {
+ setState(() {
+ opacity2 = 1.0;
+ });
+ }
+ await Future.delayed(const Duration(milliseconds: 200));
+ if (mounted) {
+ setState(() {
+ opacity3 = 1.0;
+ });
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ final double tempHeight = MediaQuery.of(context).size.height -
+ (MediaQuery.of(context).size.width / 1.2) +
+ 24.0;
+ return Material(
+ color: DesignCourseAppTheme.nearlyWhite,
+ child: Stack(
+ children: [
+ Column(
+ children: [
+ AspectRatio(
+ aspectRatio: 1.2,
+ child: Image.asset('assets/design_course/webInterFace.png'),
+ ),
+ ],
+ ),
+ Positioned(
+ top: (MediaQuery.of(context).size.width / 1.2) - 24.0,
+ bottom: 0,
+ left: 0,
+ right: 0,
+ child: Container(
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyWhite,
+ borderRadius: const BorderRadius.only(
+ topLeft: Radius.circular(32.0),
+ topRight: Radius.circular(32.0)),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme.grey.withOpacity(0.2),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 10.0),
+ ],
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(left: 8, right: 8),
+ child: SingleChildScrollView(
+ child: Container(
+ constraints: BoxConstraints(
+ minHeight: infoHeight,
+ maxHeight:
+ tempHeight > infoHeight ? tempHeight : infoHeight),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ const Padding(
+ padding:
+ EdgeInsets.only(top: 32.0, left: 18, right: 16),
+ child: Text(
+ 'Web Design\nCourse',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.darkerText,
+ ),
+ ),
+ ),
+ const Padding(
+ padding: EdgeInsets.only(
+ left: 16, right: 16, bottom: 8, top: 16),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ '\$28.99',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.nearlyBlue,
+ ),
+ ),
+ Row(
+ children: [
+ Text(
+ '4.3',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 22,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ ),
+ Icon(
+ Icons.star,
+ color: DesignCourseAppTheme.nearlyBlue,
+ size: 24,
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ AnimatedOpacity(
+ duration: const Duration(milliseconds: 500),
+ opacity: opacity1,
+ child: Padding(
+ padding: const EdgeInsets.all(8),
+ child: Row(
+ children: [
+ getTimeBoxUI('24', 'Classes'),
+ getTimeBoxUI('2hours', 'Time'),
+ getTimeBoxUI('24', 'Seat'),
+ ],
+ ),
+ ),
+ ),
+ Expanded(
+ child: AnimatedOpacity(
+ duration: const Duration(milliseconds: 500),
+ opacity: opacity2,
+ child: const Padding(
+ padding: EdgeInsets.only(
+ left: 16, right: 16, top: 8, bottom: 8),
+ child: Text(
+ 'Learn modern web design with gamification aspects. From your fundamentals all the way up to masterclass.',
+ textAlign: TextAlign.justify,
+ style: TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ maxLines: 3,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ),
+ ),
+ ),
+ AnimatedOpacity(
+ duration: const Duration(milliseconds: 500),
+ opacity: opacity3,
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 16, bottom: 16, right: 16),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ width: 62,
+ height: 48,
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyWhite,
+ borderRadius: const BorderRadius.all(
+ Radius.circular(16.0)),
+ border: Border.all(
+ color: DesignCourseAppTheme.grey
+ .withOpacity(0.2)),
+ ),
+ child: TextButton(
+ style: TextButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(16.0)),
+ ),
+ onPressed: () {},
+ child: const Icon(
+ Icons.add,
+ color: DesignCourseAppTheme.nearlyBlue,
+ size: 28,
+ ),
+ ),
+ ),
+ const SizedBox(width: 16),
+ Expanded(
+ child: Container(
+ height: 48,
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyBlue,
+ borderRadius: const BorderRadius.all(
+ Radius.circular(16.0),
+ ),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme
+ .nearlyBlue
+ .withOpacity(0.5),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 10.0),
+ ],
+ ),
+ child: Center(
+ child: TextButton(
+ style: TextButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.circular(16.0),
+ ),
+ minimumSize: const Size(1000, 48),
+ ),
+ onPressed: () {},
+ child: const Text(
+ 'Join Course',
+ textAlign: TextAlign.left,
+ style: TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 18,
+ letterSpacing: 0.0,
+ color: DesignCourseAppTheme
+ .nearlyWhite,
+ ),
+ ),
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ SizedBox(
+ height: MediaQuery.of(context).padding.bottom,
+ )
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ Positioned(
+ top: (MediaQuery.of(context).size.width / 1.2) - 24.0 - 35,
+ right: 35,
+ child: ScaleTransition(
+ scale: CurvedAnimation(
+ parent: animationController, curve: Curves.fastOutSlowIn),
+ child: Card(
+ color: DesignCourseAppTheme.nearlyBlue,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(50.0)),
+ elevation: 10.0,
+ child: SizedBox(
+ width: 60,
+ height: 60,
+ child: Center(
+ child: TextButton(
+ style: TextButton.styleFrom(
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(50.0),
+ ),
+ minimumSize: const Size(60, 60),
+ ),
+ onPressed: () {},
+ child: const Icon(
+ Icons.favorite,
+ color: DesignCourseAppTheme.nearlyWhite,
+ size: 28,
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ ),
+ Padding(
+ padding: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
+ child: SizedBox(
+ width: AppBar().preferredSize.height,
+ height: AppBar().preferredSize.height,
+ child: Material(
+ color: Colors.transparent,
+ child: InkWell(
+ borderRadius:
+ BorderRadius.circular(AppBar().preferredSize.height),
+ onTap: () => Navigator.pop(context),
+ child: const Icon(
+ Icons.arrow_back_ios,
+ color: DesignCourseAppTheme.nearlyBlack,
+ ),
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ );
+ }
+
+ Widget getTimeBoxUI(String text1, String txt2) {
+ return Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Container(
+ decoration: BoxDecoration(
+ color: DesignCourseAppTheme.nearlyWhite,
+ borderRadius: const BorderRadius.all(Radius.circular(16.0)),
+ boxShadow: [
+ BoxShadow(
+ color: DesignCourseAppTheme.grey.withOpacity(0.2),
+ offset: const Offset(1.1, 1.1),
+ blurRadius: 8.0),
+ ],
+ ),
+ child: Padding(
+ padding: const EdgeInsets.only(
+ left: 18.0, right: 18.0, top: 12.0, bottom: 12.0),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ text1,
+ textAlign: TextAlign.center,
+ style: const TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.nearlyBlue,
+ ),
+ ),
+ Text(
+ txt2,
+ textAlign: TextAlign.center,
+ style: const TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 14,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme.grey,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ );
+ }
+}
diff --git a/best_flutter_ui_templates/lib/design_course/design_course_app_theme.dart b/lib/design_course/design_course_app_theme.dart
similarity index 90%
rename from best_flutter_ui_templates/lib/design_course/design_course_app_theme.dart
rename to lib/design_course/design_course_app_theme.dart
index 3604e505..8e478e77 100644
--- a/best_flutter_ui_templates/lib/design_course/design_course_app_theme.dart
+++ b/lib/design_course/design_course_app_theme.dart
@@ -8,7 +8,7 @@ class DesignCourseAppTheme {
static const Color nearlyBlue = Color(0xFF00B6F0);
static const Color nearlyBlack = Color(0xFF213333);
static const Color grey = Color(0xFF3A5160);
- static const Color dark_grey = Color(0xFF313A44);
+ static const Color darkGrey = Color(0xFF313A44);
static const Color darkText = Color(0xFF253840);
static const Color darkerText = Color(0xFF17262A);
@@ -19,13 +19,13 @@ class DesignCourseAppTheme {
static const Color spacer = Color(0xFFF2F2F2);
static const TextTheme textTheme = TextTheme(
- headline4: display1,
- headline5: headline,
- headline6: title,
- subtitle2: subtitle,
- bodyText1: body2,
- bodyText2: body1,
- caption: caption,
+ headlineMedium: display1,
+ headlineSmall: headline,
+ titleLarge: title,
+ titleSmall: subtitle,
+ bodyLarge: body2,
+ bodyMedium: body1,
+ bodySmall: caption,
);
static const TextStyle display1 = TextStyle(
diff --git a/best_flutter_ui_templates/lib/design_course/home_design_course.dart b/lib/design_course/home_design_course.dart
similarity index 76%
rename from best_flutter_ui_templates/lib/design_course/home_design_course.dart
rename to lib/design_course/home_design_course.dart
index 7fd09c9d..a692f530 100644
--- a/best_flutter_ui_templates/lib/design_course/home_design_course.dart
+++ b/lib/design_course/home_design_course.dart
@@ -1,13 +1,15 @@
-import 'package:best_flutter_ui_templates/design_course/category_list_view.dart';
-import 'package:best_flutter_ui_templates/design_course/course_info_screen.dart';
-import 'package:best_flutter_ui_templates/design_course/popular_course_list_view.dart';
-import 'package:best_flutter_ui_templates/main.dart';
import 'package:flutter/material.dart';
+
+import 'category_list_view.dart';
+import 'course_info_screen.dart';
import 'design_course_app_theme.dart';
+import 'popular_course_list_view.dart';
class DesignCourseHomeScreen extends StatefulWidget {
+ const DesignCourseHomeScreen({super.key});
+
@override
- _DesignCourseHomeScreenState createState() => _DesignCourseHomeScreenState();
+ State createState() => _DesignCourseHomeScreenState();
}
class _DesignCourseHomeScreenState extends State {
@@ -15,34 +17,31 @@ class _DesignCourseHomeScreenState extends State {
@override
Widget build(BuildContext context) {
- return Container(
+ return Material(
color: DesignCourseAppTheme.nearlyWhite,
- child: Scaffold(
- backgroundColor: Colors.transparent,
- body: Column(
- children: [
- SizedBox(
- height: MediaQuery.of(context).padding.top,
- ),
- getAppBarUI(),
- Expanded(
- child: SingleChildScrollView(
- child: Container(
- height: MediaQuery.of(context).size.height,
- child: Column(
- children: [
- getSearchBarUI(),
- getCategoryUI(),
- Flexible(
- child: getPopularCourseUI(),
- ),
- ],
- ),
+ child: Column(
+ children: [
+ SizedBox(
+ height: MediaQuery.of(context).padding.top,
+ ),
+ getAppBarUI(),
+ Expanded(
+ child: SingleChildScrollView(
+ child: SizedBox(
+ height: MediaQuery.of(context).size.height,
+ child: Column(
+ children: [
+ getSearchBarUI(),
+ getCategoryUI(),
+ Flexible(
+ child: getPopularCourseUI(),
+ ),
+ ],
),
),
),
- ],
- ),
+ ),
+ ],
),
);
}
@@ -52,8 +51,8 @@ class _DesignCourseHomeScreenState extends State {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Padding(
- padding: const EdgeInsets.only(top: 8.0, left: 18, right: 16),
+ const Padding(
+ padding: EdgeInsets.only(top: 8.0, left: 18, right: 16),
child: Text(
'Category',
textAlign: TextAlign.left,
@@ -72,17 +71,18 @@ class _DesignCourseHomeScreenState extends State {
padding: const EdgeInsets.only(left: 16, right: 16),
child: Row(
children: [
- getButtonUI(CategoryType.ui, categoryType == CategoryType.ui),
+ getButtonUI(CategoryType.ui,
+ isSelected: categoryType == CategoryType.ui),
const SizedBox(
width: 16,
),
- getButtonUI(
- CategoryType.coding, categoryType == CategoryType.coding),
+ getButtonUI(CategoryType.coding,
+ isSelected: categoryType == CategoryType.coding),
const SizedBox(
width: 16,
),
- getButtonUI(
- CategoryType.basic, categoryType == CategoryType.basic),
+ getButtonUI(CategoryType.basic,
+ isSelected: categoryType == CategoryType.basic),
],
),
),
@@ -105,7 +105,7 @@ class _DesignCourseHomeScreenState extends State {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Text(
+ const Text(
'Popular Course',
textAlign: TextAlign.left,
style: TextStyle(
@@ -131,12 +131,12 @@ class _DesignCourseHomeScreenState extends State {
Navigator.push(
context,
MaterialPageRoute(
- builder: (BuildContext context) => CourseInfoScreen(),
+ builder: (BuildContext context) => const CourseInfoScreen(),
),
);
}
- Widget getButtonUI(CategoryType categoryTypeData, bool isSelected) {
+ Widget getButtonUI(CategoryType categoryTypeData, {bool isSelected = false}) {
String txt = '';
if (CategoryType.ui == categoryTypeData) {
txt = 'Ui/Ux';
@@ -159,9 +159,11 @@ class _DesignCourseHomeScreenState extends State {
splashColor: Colors.white24,
borderRadius: const BorderRadius.all(Radius.circular(24.0)),
onTap: () {
- setState(() {
- categoryType = categoryTypeData;
- });
+ if (mounted) {
+ setState(() {
+ categoryType = categoryTypeData;
+ });
+ }
},
child: Padding(
padding: const EdgeInsets.only(
@@ -194,15 +196,15 @@ class _DesignCourseHomeScreenState extends State {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Container(
+ SizedBox(
width: MediaQuery.of(context).size.width * 0.75,
height: 64,
child: Padding(
padding: const EdgeInsets.only(top: 8, bottom: 8),
child: Container(
- decoration: BoxDecoration(
- color: HexColor('#F8FAFB'),
- borderRadius: const BorderRadius.only(
+ decoration: const BoxDecoration(
+ color: Color(0xFFF8FAFB),
+ borderRadius: BorderRadius.only(
bottomRight: Radius.circular(13.0),
bottomLeft: Radius.circular(13.0),
topLeft: Radius.circular(13.0),
@@ -215,36 +217,35 @@ class _DesignCourseHomeScreenState extends State {
child: Container(
padding: const EdgeInsets.only(left: 16, right: 16),
child: TextFormField(
- style: TextStyle(
+ style: const TextStyle(
fontFamily: 'WorkSans',
fontWeight: FontWeight.bold,
fontSize: 16,
color: DesignCourseAppTheme.nearlyBlue,
),
keyboardType: TextInputType.text,
- decoration: InputDecoration(
+ decoration: const InputDecoration(
labelText: 'Search for course',
border: InputBorder.none,
helperStyle: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 16,
- color: HexColor('#B9BABC'),
+ color: Color(0xFFB9BABC),
),
labelStyle: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
letterSpacing: 0.2,
- color: HexColor('#B9BABC'),
+ color: Color(0xFFB9BABC),
),
),
- onEditingComplete: () {},
),
),
),
- SizedBox(
+ const SizedBox(
width: 60,
height: 60,
- child: Icon(Icons.search, color: HexColor('#B9BABC')),
+ child: Icon(Icons.search, color: Color(0xFFB9BABC)),
)
],
),
@@ -264,7 +265,7 @@ class _DesignCourseHomeScreenState extends State {
padding: const EdgeInsets.only(top: 8.0, left: 18, right: 18),
child: Row(
children: [
- Expanded(
+ const Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
@@ -292,7 +293,7 @@ class _DesignCourseHomeScreenState extends State {
],
),
),
- Container(
+ SizedBox(
width: 60,
height: 60,
child: Image.asset('assets/design_course/userImage.png'),
diff --git a/best_flutter_ui_templates/lib/design_course/models/category.dart b/lib/design_course/models/category.dart
similarity index 100%
rename from best_flutter_ui_templates/lib/design_course/models/category.dart
rename to lib/design_course/models/category.dart
diff --git a/lib/design_course/popular_course_list_view.dart b/lib/design_course/popular_course_list_view.dart
new file mode 100644
index 00000000..d662e809
--- /dev/null
+++ b/lib/design_course/popular_course_list_view.dart
@@ -0,0 +1,249 @@
+import 'package:flutter/material.dart';
+
+import 'design_course_app_theme.dart';
+import 'models/category.dart';
+
+class PopularCourseListView extends StatefulWidget {
+ const PopularCourseListView({
+ required this.callBack,
+ super.key,
+ });
+
+ final Function() callBack;
+
+ @override
+ State createState() => _PopularCourseListViewState();
+}
+
+class _PopularCourseListViewState extends State
+ with TickerProviderStateMixin {
+ late final AnimationController animationController;
+ @override
+ void initState() {
+ super.initState();
+ animationController = AnimationController(
+ duration: const Duration(milliseconds: 2000), vsync: this);
+ }
+
+ @override
+ void dispose() {
+ animationController.dispose();
+ super.dispose();
+ }
+
+ Future getData() async {
+ await Future.delayed(const Duration(milliseconds: 200));
+ return true;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.only(top: 8),
+ child: FutureBuilder(
+ future: getData(),
+ builder: (BuildContext context, AsyncSnapshot snapshot) {
+ if (!snapshot.hasData) {
+ return const SizedBox();
+ } else {
+ return GridView(
+ padding: const EdgeInsets.all(8),
+ physics: const BouncingScrollPhysics(),
+ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 2,
+ mainAxisSpacing: 32.0,
+ crossAxisSpacing: 32.0,
+ childAspectRatio: 0.8,
+ ),
+ children: List.generate(
+ Category.popularCourseList.length,
+ (int index) {
+ final int count = Category.popularCourseList.length;
+ final Animation animation =
+ Tween(begin: 0.0, end: 1.0).animate(
+ CurvedAnimation(
+ parent: animationController,
+ curve: Interval((1 / count) * index, 1.0,
+ curve: Curves.fastOutSlowIn),
+ ),
+ );
+ animationController.forward();
+ return CategoryView(
+ callback: () {
+ widget.callBack();
+ },
+ category: Category.popularCourseList[index],
+ animation: animation,
+ animationController: animationController,
+ );
+ },
+ ),
+ );
+ }
+ },
+ ),
+ );
+ }
+}
+
+class CategoryView extends StatelessWidget {
+ const CategoryView({
+ required this.category,
+ required this.animationController,
+ required this.animation,
+ required this.callback,
+ super.key,
+ });
+
+ final VoidCallback callback;
+ final Category category;
+ final AnimationController animationController;
+ final Animation animation;
+
+ @override
+ Widget build(BuildContext context) {
+ return AnimatedBuilder(
+ animation: animationController,
+ builder: (BuildContext context, _) {
+ return FadeTransition(
+ opacity: animation,
+ child: Transform(
+ transform: Matrix4.translationValues(
+ 0.0, 50 * (1.0 - animation.value), 0.0),
+ child: Material(
+ color: Colors.transparent,
+ child: InkWell(
+ borderRadius: const BorderRadius.all(Radius.circular(16.0)),
+ onTap: () => callback(),
+ child: SizedBox(
+ height: 280,
+ child: Stack(
+ alignment: AlignmentDirectional.bottomCenter,
+ children: [
+ Column(
+ children: [
+ Expanded(
+ child: Ink(
+ decoration: const BoxDecoration(
+ color: Color(0xFFF8FAFB),
+ borderRadius:
+ BorderRadius.all(Radius.circular(16.0)),
+ // border: Border.all(
+ // color: DesignCourseAppTheme.notWhite),
+ ),
+ child: Column(
+ children: [
+ Expanded(
+ child: Column(
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 16, left: 16, right: 16),
+ child: Text(
+ category.title,
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w600,
+ fontSize: 16,
+ letterSpacing: 0.27,
+ color: DesignCourseAppTheme
+ .darkerText,
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.only(
+ top: 8,
+ left: 16,
+ right: 16,
+ bottom: 8),
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ '${category.lessonCount} lesson',
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight: FontWeight.w200,
+ fontSize: 12,
+ letterSpacing: 0.27,
+ color:
+ DesignCourseAppTheme.grey,
+ ),
+ ),
+ Row(
+ children: [
+ Text(
+ '${category.rating}',
+ textAlign: TextAlign.left,
+ style: const TextStyle(
+ fontWeight:
+ FontWeight.w200,
+ fontSize: 18,
+ letterSpacing: 0.27,
+ color:
+ DesignCourseAppTheme
+ .grey,
+ ),
+ ),
+ const Icon(
+ Icons.star,
+ color: DesignCourseAppTheme
+ .nearlyBlue,
+ size: 20,
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ const SizedBox(
+ width: 48,
+ ),
+ ],
+ ),
+ ),
+ ),
+ const SizedBox(
+ height: 48,
+ ),
+ ],
+ ),
+ Padding(
+ padding:
+ const EdgeInsets.only(top: 24, right: 16, left: 16),
+ child: Container(
+ decoration: BoxDecoration(
+ borderRadius:
+ const BorderRadius.all(Radius.circular(16.0)),
+ boxShadow: